The extent index structure in the top inode is not being cleared after a file is deleted, which leaves the path to the data blocks intact. This patch clears this extent index structure. Extent structures are already being cleared, so this also makes the behavior consistent between extent and extent _index_ structures. Link: https://bugzilla.kernel.org/show_bug.cgi?id=220342 Signed-off-by: Nicolas Bretz --- fs/ext4/extents.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index b543a46fc809..79fd3f5d4c50 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -2822,6 +2822,7 @@ int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start, struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); int depth = ext_depth(inode); struct ext4_ext_path *path = NULL; + struct ext4_extent_idx *ix = NULL; struct partial_cluster partial; handle_t *handle; int i = 0, err = 0; @@ -3060,6 +3061,10 @@ int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start, */ err = ext4_ext_get_access(handle, inode, path); if (err == 0) { + ix = EXT_FIRST_INDEX(path->p_hdr); + if (ix && ext_inode_hdr(inode)->eh_depth > 0) { + ext4_ext_store_pblock(ix, 0); + } ext_inode_hdr(inode)->eh_depth = 0; ext_inode_hdr(inode)->eh_max = cpu_to_le16(ext4_ext_space_root(inode, 0)); -- 2.47.2