diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index e99306a8f47c..16f73c0c33c4 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1749,8 +1749,17 @@ static void mpage_release_unused_pages(struct mpage_da_data *mpd, BUG_ON(!folio_test_locked(folio)); BUG_ON(folio_test_writeback(folio)); if (invalidate) { - if (folio_mapped(folio)) + if (folio_mapped(folio)) { folio_clear_dirty_for_io(folio); + /* + * Unmap folio from page tables to prevent subsequent + * accesses through stale PTEs. This ensures future + * accesses trigger new page faults rather than reusing + * the invalidated folio. + */ + unmap_mapping_pages(folio->mapping, folio->index, + folio_nr_pages(folio), false); + } block_invalidate_folio(folio, 0, folio_size(folio)); folio_clear_uptodate(folio);