diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-06-18 18:33:25 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2022-06-18 18:33:25 -0400 |
commit | 03b8098d370c864422527024b24dd2c9339c74db (patch) | |
tree | 5f833e2b92aeb1f07215224a9c0bf33f2cf6a8ff /linux/blkdev.c | |
parent | a232478f355c112c775c734182363f9e9b1688f8 (diff) |
cmd_dump: Use buffered IO for reading device metadata
We're reading device metadat in mostly sequential order - buffered IO
will be faster than O_DIRECT.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'linux/blkdev.c')
-rw-r--r-- | linux/blkdev.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/linux/blkdev.c b/linux/blkdev.c index 762e5aa0..b545e95d 100644 --- a/linux/blkdev.c +++ b/linux/blkdev.c @@ -168,7 +168,7 @@ struct block_device *blkdev_get_by_path(const char *path, fmode_t mode, void *holder) { struct block_device *bdev; - int fd, sync_fd, flags = O_DIRECT; + int fd, sync_fd, buffered_fd, flags = 0; if ((mode & (FMODE_READ|FMODE_WRITE)) == (FMODE_READ|FMODE_WRITE)) flags = O_RDWR; @@ -183,16 +183,12 @@ struct block_device *blkdev_get_by_path(const char *path, fmode_t mode, flags |= O_EXCL; #endif - fd = open(path, flags); + fd = open(path, flags|O_DIRECT); if (fd < 0) return ERR_PTR(-errno); - sync_fd = open(path, flags|O_SYNC); - if (sync_fd < 0) { - assert(0); - close(fd); - return ERR_PTR(-errno); - } + sync_fd = xopen(path, flags|O_DIRECT|O_SYNC); + buffered_fd = xopen(path, flags); bdev = malloc(sizeof(*bdev)); memset(bdev, 0, sizeof(*bdev)); @@ -203,6 +199,7 @@ struct block_device *blkdev_get_by_path(const char *path, fmode_t mode, bdev->bd_dev = xfstat(fd).st_rdev; bdev->bd_fd = fd; bdev->bd_sync_fd = sync_fd; + bdev->bd_buffered_fd = buffered_fd; bdev->bd_holder = holder; bdev->bd_disk = &bdev->__bd_disk; bdev->bd_disk->bdi = &bdev->bd_disk->__bdi; |