On 2024/12/5 16:01, Lu Pang wrote:
Most of read() and write() are performed with lseek(),
combining two operations into one can slightly improve the performance.
Hi, Lu Pang,
It seems that both pread and pwrite are not available on windows. However,
(I think) windows targets are needed for Windows Android SDK.
thanks,
shengyong
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;
}
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel