Re: [f2fs-dev] [PATCH] f2fs: don't use truncate_inode_pages_final() on live inodes

From: Chao Yu

Date: Tue Oct 20 2026 - 05:22:10 EST


On 10/16/26 00:17, Daeho Jeong wrote:
> From: Daeho Jeong <daehojeong@xxxxxxxxxx>
>
> truncate_inode_pages_final() is meant to be called from ->evict_inode.
> It sets AS_EXITING on the mapping, and nothing ever clears it, to tell
> the VM that the inode is going away.
>
> f2fs calls it in two places where the inode stays live:
>
> - F2FS_IOC_START_ATOMIC_REPLACE uses it to drop the page cache of the
> original inode before setting i_size to 0. The atomic write then
> goes on through this inode.
>
> - f2fs_abort_atomic_write() uses it to drop the uncommitted data. It
> is called on eviction, but also on the last writer's close in
> f2fs_release_file(), from f2fs_file_flush() when the atomic writer
> exits, from F2FS_IOC_ABORT_ATOMIC_WRITE and when
> F2FS_IOC_COMMIT_ATOMIC_WRITE fails.
>
> Other processes may still have the file open or mapped in all of these
> cases. The mapping then stays marked as exiting for as long as the
> inode is in memory. This stops reclaim from storing workingset shadow
> entries for it and breaks any code that assumes an exiting mapping has
> no users left.
>
> All we need in both places is to drop the page cache, so use
> truncate_inode_pages(mapping, 0) instead. The eviction path is not
> affected, because f2fs_pre_evict_inode() still calls
> truncate_inode_pages_final() after f2fs_abort_atomic_write().
>

Cc: stable@xxxxxxxxxx

> Fixes: 3db1de0e582c ("f2fs: change the current atomic write way")
> Fixes: 41e8f85a75fc ("f2fs: introduce F2FS_IOC_START_ATOMIC_REPLACE")
> Signed-off-by: Daeho Jeong <daehojeong@xxxxxxxxxx>
Reviewed-by: Chao Yu <chao@xxxxxxxxxx>

Thanks,