Most of read() and write() are performed with lseek(), combining two operations into one can slightly improve the performance.
Signed-off-by: Lu Pang <panglu2...@gmail.com> --- lib/libf2fs_io.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/lib/libf2fs_io.c b/lib/libf2fs_io.c index 520ae03..6388ace 100644 --- a/lib/libf2fs_io.c +++ b/lib/libf2fs_io.c @@ -279,11 +279,7 @@ static int dcache_io_read(long entry, __u64 offset, off_t blk) if (fd < 0) return fd; - if (lseek(fd, offset, SEEK_SET) < 0) { - MSG(0, "\n lseek fail.\n"); - return -1; - } - if (read(fd, dcache_buf + entry * F2FS_BLKSIZE, F2FS_BLKSIZE) < 0) { + if (pread(fd, dcache_buf + entry * F2FS_BLKSIZE, F2FS_BLKSIZE, (off_t)offset) < 0) { MSG(0, "\n read() fail.\n"); return -1; } @@ -393,9 +389,7 @@ int dev_read_version(void *buf, __u64 offset, size_t len) { if (c.sparse_mode) return 0; - if (lseek(c.kd, (off_t)offset, SEEK_SET) < 0) - return -1; - if (read(c.kd, buf, len) < 0) + if (pread(c.kd, buf, len, (off_t)offset) < 0) return -1; return 0; } @@ -535,9 +529,7 @@ int dev_read(void *buf, __u64 offset, size_t len) fd = __get_device_fd(&offset); if (fd < 0) return fd; - if (lseek(fd, (off_t)offset, SEEK_SET) < 0) - return -1; - if (read(fd, buf, len) < 0) + if (pread(fd, buf, len, (off_t)offset) < 0) return -1; return 0; } @@ -615,8 +607,6 @@ static int __dev_write(void *buf, __u64 offset, size_t len, enum rw_hint whint) if (fd < 0) return fd; - if (lseek(fd, (off_t)offset, SEEK_SET) < 0) - return -1; #if ! defined(__MINGW32__) if (c.need_whint && (c.whint != whint)) { @@ -629,7 +619,7 @@ static int __dev_write(void *buf, __u64 offset, size_t len, enum rw_hint whint) } #endif - if (write(fd, buf, len) < 0) + if (pwrite(fd, buf, len, (off_t)offset) < 0) return -1; c.need_fsync = true; @@ -663,9 +653,7 @@ int dev_write_block(void *buf, __u64 blk_addr, enum rw_hint whint) int dev_write_dump(void *buf, __u64 offset, size_t len) { - if (lseek(c.dump_fd, (off_t)offset, SEEK_SET) < 0) - return -1; - if (write(c.dump_fd, buf, len) < 0) + if (pwrite(c.dump_fd, buf, len, (off_t)offset) < 0) return -1; return 0; } -- 2.47.1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel