Need to update manual entry?

On 9/18/25 12:53, Jaegeuk Kim via Linux-f2fs-devel wrote:
> Signed-off-by: Jaegeuk Kim <[email protected]>
> ---
>  tools/f2fs_io/f2fs_io.c | 32 ++++++++++++++++++++++++++------
>  1 file changed, 26 insertions(+), 6 deletions(-)
> 
> diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c
> index b9bf9bc5f797..2d64eda81706 100644
> --- a/tools/f2fs_io/f2fs_io.c
> +++ b/tools/f2fs_io/f2fs_io.c
> @@ -931,6 +931,7 @@ static void do_write_advice(int argc, char **argv, const 
> struct cmd_desc *cmd)
>  "  buffered : buffered IO\n"                         \
>  "  dio      : direct IO\n"                           \
>  "  mmap     : mmap IO\n"                             \
> +"  mlock    : mmap + mlock\n"                                \
>  "advice can be\n"                                    \
>  " 1 : set sequential|willneed\n"                     \
>  " 0 : none\n"                                                \
> @@ -946,6 +947,7 @@ static void do_read(int argc, char **argv, const struct 
> cmd_desc *cmd)
>       u64 total_time = 0;
>       int flags = 0;
>       int do_mmap = 0;
> +     int do_mlock = 0;
>       int fd, advice;
>  
>       if (argc != 8) {
> @@ -968,6 +970,8 @@ static void do_read(int argc, char **argv, const struct 
> cmd_desc *cmd)
>               flags |= O_DIRECT;
>       else if (!strcmp(argv[4], "mmap"))
>               do_mmap = 1;
> +     else if (!strcmp(argv[4], "mlock"))
> +             do_mlock = 1;
>       else if (strcmp(argv[4], "buffered"))
>               die("Wrong IO type");
>  
> @@ -993,11 +997,24 @@ static void do_read(int argc, char **argv, const struct 
> cmd_desc *cmd)
>       total_time = get_current_us();
>       if (do_mmap) {
>               data = mmap(NULL, count * buf_size, PROT_READ,
> -                                             MAP_SHARED | MAP_POPULATE, fd, 
> offset);
> +                             MAP_SHARED | MAP_POPULATE, fd, offset);
>               if (data == MAP_FAILED)
>                       die("Mmap failed");
> -     }
> -     if (!do_mmap) {
> +
> +             read_cnt = count * buf_size;
> +             memcpy(print_buf, data, print_bytes);
> +     } else if (do_mlock) {
> +             data = mmap(NULL, count * buf_size, PROT_READ,
> +                             MAP_SHARED, fd, offset);
> +             if (data == MAP_FAILED)
> +                     die("Mmap failed");
> +             if (posix_fadvise(fd, offset, count * buf_size,
> +                                     POSIX_FADV_WILLNEED) != 0)
> +                     die_errno("fadvise failed");
> +             if (mlock(data, count * buf_size))
> +                     die_errno("mlock failed");
> +             read_cnt = count * buf_size;
> +     } else {
>               for (i = 0; i < count; i++) {
>                       ret = pread(fd, buf, buf_size, offset + buf_size * i);
>                       if (ret != buf_size) {
> @@ -1014,9 +1031,6 @@ static void do_read(int argc, char **argv, const struct 
> cmd_desc *cmd)
>                       if (i == 0)
>                               memcpy(print_buf, buf, print_bytes);
>               }
> -     } else {
> -             read_cnt = count * buf_size;
> -             memcpy(print_buf, data, print_bytes);
>       }
>       printf("Read %"PRIu64" bytes total_time = %"PRIu64" us, BW = %.Lf MB/s 
> print %u bytes:\n",
>               read_cnt, get_current_us() - total_time,
> @@ -1029,6 +1043,12 @@ static void do_read(int argc, char **argv, const 
> struct cmd_desc *cmd)
>               else if (i % 2 == 0)
>                       printf(" ");
>       }
> +     if (do_mmap) {
> +             munmap(data, count * buf_size);
> +     } else if (do_mlock) {
> +             munlock(data, count * buf_size);
> +             munmap(data, count * buf_size);
> +     }
>       printf("\n");
>       exit(0);
>  }



_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to