[PATCH 3/5] btrfs-progs: introduce btrfs_pread wrapper for pread
From: Naohiro Aota <naohiro.aota@wdc.com>
Date: 2021-09-27 04:17:04
Subsystem:
the rest · Maintainer:
Linus Torvalds
Wrap pread with btrfs_pread as well. Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> --- common/device-utils.h | 10 ++++++++++ kernel-shared/disk-io.c | 4 +++- kernel-shared/extent_io.c | 7 ++++--- kernel-shared/zoned.c | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/common/device-utils.h b/common/device-utils.h
index 767dab4370e1..f79e746840fc 100644
--- a/common/device-utils.h
+++ b/common/device-utils.h@@ -60,9 +60,19 @@ static inline ssize_t btrfs_pwrite(int fd, void *buf, size_t count, return btrfs_direct_pio(WRITE, fd, buf, count, offset); } +static inline ssize_t btrfs_pread(int fd, void *buf, size_t count, off_t offset, + bool direct) +{ + if (!direct) + return pread(fd, buf, count, offset); + + return btrfs_direct_pio(READ, fd, buf, count, offset); +} #else #define btrfs_pwrite(fd, buf, count, offset, direct) \ ({ (void)(direct); pwrite(fd, buf, count, offset); }) +#define btrfs_pread(fd, buf, count, offset, direct) \ + ({ (void)(direct); pread(fd, buf, count, offset); }) #endif #endif
diff --git a/kernel-shared/disk-io.c b/kernel-shared/disk-io.c
index 1cda6f3a98af..740500f9fdc9 100644
--- a/kernel-shared/disk-io.c
+++ b/kernel-shared/disk-io.c@@ -35,6 +35,7 @@ #include "kernel-shared/print-tree.h" #include "common/rbtree-utils.h" #include "common/device-scan.h" +#include "common/device-utils.h" #include "crypto/hash.h" /* specified errno for check_tree_block */
@@ -476,7 +477,8 @@ int read_extent_data(struct btrfs_fs_info *fs_info, char *data, u64 logical, goto err; } - ret = pread64(device->fd, data, *len, multi->stripes[0].physical); + ret = btrfs_pread(device->fd, data, *len, multi->stripes[0].physical, + fs_info->zoned); if (ret != *len) ret = -EIO; else
diff --git a/kernel-shared/extent_io.c b/kernel-shared/extent_io.c
index b5984949f431..af09ade4025f 100644
--- a/kernel-shared/extent_io.c
+++ b/kernel-shared/extent_io.c@@ -793,7 +793,8 @@ int read_extent_from_disk(struct extent_buffer *eb, unsigned long offset, unsigned long len) { int ret; - ret = pread(eb->fd, eb->data + offset, len, eb->dev_bytenr); + ret = btrfs_pread(eb->fd, eb->data + offset, len, eb->dev_bytenr, + eb->fs_info->zoned); if (ret < 0) { ret = -errno; goto out;
@@ -850,8 +851,8 @@ int read_data_from_disk(struct btrfs_fs_info *info, void *buf, u64 offset, return -EIO; } - ret = pread(device->fd, buf + total_read, read_len, - multi->stripes[0].physical); + ret = btrfs_pread(device->fd, buf + total_read, read_len, + multi->stripes[0].physical, info->zoned); kfree(multi); if (ret < 0) { fprintf(stderr, "Error reading %llu, %d\n", offset,
diff --git a/kernel-shared/zoned.c b/kernel-shared/zoned.c
index c2cce3b5f366..f5d2299fc744 100644
--- a/kernel-shared/zoned.c
+++ b/kernel-shared/zoned.c@@ -593,7 +593,7 @@ size_t btrfs_sb_io(int fd, void *buf, off_t offset, int rw) return ret; if (rw == READ) - ret_sz = pread64(fd, buf, count, mapped); + ret_sz = btrfs_pread(fd, buf, count, mapped, true); else ret_sz = btrfs_pwrite(fd, buf, count, mapped, true);
--
2.33.0