[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250717132805.813944-1-bretznic@gmail.com>
Date: Thu, 17 Jul 2025 06:28:05 -0700
From: Nicolas Bretz <bretznic@...il.com>
To: tytso@....edu,
adilger.kernel@...ger.ca
Cc: linux-ext4@...r.kernel.org,
Nicolas Bretz <bretznic@...il.com>
Subject: [PATCH] ext4: clear extent index structure after file delete
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 <bretznic@...il.com>
---
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
Powered by blists - more mailing lists