diff options
| author | Ziyi Guo <n7l8m4@u.northwestern.edu> | 2026-02-11 05:20:52 +0300 |
|---|---|---|
| committer | Jan Kara <jack@suse.cz> | 2026-02-27 14:17:52 +0300 |
| commit | 19134a133184fcc49c41cf42797cb2e7fef76065 (patch) | |
| tree | 5156473ba4d4bf5c0c4beda473e6665a4e286778 | |
| parent | ad0e9663f0f5b0ed8e27d3690c5ac9de72243fba (diff) | |
| download | linux-19134a133184fcc49c41cf42797cb2e7fef76065.tar.xz | |
ext2: avoid drop_nlink() during unlink of zero-nlink inode in ext2_unlink()
ext2_unlink() calls inode_dec_link_count() unconditionally, which
invokes drop_nlink(). If the inode was loaded from a corrupted disk
image with i_links_count == 0, drop_nlink()
triggers WARN_ON(inode->i_nlink == 0)
Follow the ext4 pattern from __ext4_unlink(): check i_nlink before
decrementing. If already zero, skip the decrement.
Signed-off-by: Ziyi Guo <n7l8m4@u.northwestern.edu>
Link: https://patch.msgid.link/20260211022052.973114-1-n7l8m4@u.northwestern.edu
Signed-off-by: Jan Kara <jack@suse.cz>
| -rw-r--r-- | fs/ext2/namei.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index 3ab23de558fb..0d09d22fe708 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c @@ -291,7 +291,10 @@ static int ext2_unlink(struct inode *dir, struct dentry *dentry) goto out; inode_set_ctime_to_ts(inode, inode_get_ctime(dir)); - inode_dec_link_count(inode); + + if (inode->i_nlink) + inode_dec_link_count(inode); + err = 0; out: return err; |
