On 2/16/26 19:28, Yongpeng Yang wrote:
> From: Yongpeng Yang <[email protected]>
> 
> After the device is mounted, f2fs updates on-disk metadata without
> updating the block device page cache. As a result, f2fs-tools may read
> stale metadata from the page cache.
> 
> For example:
> mount /dev/vdb /mnt/f2fs
> touch mx // ino = 4
> sync
> dump.f2fs -i 4 /dev/vdb
> touch mx2 // ino = 5
> sync
> dump.f2fs -i 5 /dev/vdb // block addr is 0
> 
> Since `dump.f2fs -i 4 /dev/vdb` has already populated the metadata area
> into the block device page cache, the cached pages remain resident in
> memory. After creating mx2, the page cache is not updated accordingly.
> Therefore, `dump.f2fs -i 5 /dev/vdb` reads stale metadata, and the
> physical block address of inode 5 is incorrectly reported as 0.
> 
> This patch issues a BLKFLSBUF ioctl to the block device before reading
> metadata. The kernel then invalidates the block device page cache,
> ensuring that subsequent reads fetch uptodate metadata from disk.
> 
> Signed-off-by: Yongpeng Yang <[email protected]>
> ---
>  lib/libf2fs.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/lib/libf2fs.c b/lib/libf2fs.c
> index 1a496b7..31b5924 100644
> --- a/lib/libf2fs.c
> +++ b/lib/libf2fs.c
> @@ -1027,6 +1027,7 @@ int get_device_info(int i)
>       }
>  
>       dev->fd = fd;
> +     ioctl(fd, BLKFLSBUF);
>  
>       if (c.sparse_mode && i == 0) {
>               if (f2fs_init_sparse_file()) {

ping

Thanks
Yongpeng,


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

Reply via email to