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

Reply via email to