Skip to content

Commit c7ac88f

Browse files
Yongpeng YangJaegeuk Kim
authored andcommitted
f2fs-tools: invalidate block device page cache before reading metadata
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 <yangyongpeng@xiaomi.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
1 parent 9330785 commit c7ac88f

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

lib/libf2fs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,6 +1016,7 @@ int get_device_info(int i)
10161016
}
10171017

10181018
dev->fd = fd;
1019+
ioctl(fd, BLKFLSBUF);
10191020

10201021
if (c.sparse_mode && i == 0) {
10211022
if (f2fs_init_sparse_file()) {

0 commit comments

Comments
 (0)