mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 14:42:08 +02:00
exfat: use truncate_inode_pages_final() at evict_inode()
Currently, exfat uses truncate_inode_pages() in exfat_evict_inode().
However, truncate_inode_pages() does not mark the mapping as exiting,
so reclaim may still install shadow entries for the mapping until
the inode teardown completes.
In older kernels like Linux 5.10, if shadow entries are present
at that point,clear_inode() can hit
BUG_ON(inode->i_data.nrexceptional);
To align with VFS eviction semantics and prevent this situation,
switch to truncate_inode_pages_final() in ->evict_inode().
Other filesystems were updated to use truncate_inode_pages_final()
in ->evict_inode() by commit 91b0abe36a ("mm + fs: store shadow
entries in page cache")'.
Signed-off-by: Yang Wen <anmuxixixi@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
parent
7dff99b354
commit
4637b4cdd7
|
|
@ -686,7 +686,7 @@ struct inode *exfat_build_inode(struct super_block *sb,
|
|||
|
||||
void exfat_evict_inode(struct inode *inode)
|
||||
{
|
||||
truncate_inode_pages(&inode->i_data, 0);
|
||||
truncate_inode_pages_final(&inode->i_data);
|
||||
|
||||
if (!inode->i_nlink) {
|
||||
i_size_write(inode, 0);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user