diff options
author | Jan Kara <jack@suse.cz> | 2024-11-26 12:46:00 +0100 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2024-11-26 22:54:24 +0100 |
commit | c5566903af56dd1abb092f18dcb0c770d6cd8dcb (patch) | |
tree | 2d64dec3d3d71d2a21d5956f45bb7de31b6d0c18 /fs/udf | |
parent | quota: flush quota_release_work upon quota writeback (diff) | |
download | linux-c5566903af56dd1abb092f18dcb0c770d6cd8dcb.tar.xz linux-c5566903af56dd1abb092f18dcb0c770d6cd8dcb.zip |
udf: Skip parent dir link count update if corrupted
If the parent directory link count is too low (likely directory inode
corruption), just skip updating its link count as if it goes to 0 too
early it can cause unexpected issues.
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/udf')
-rw-r--r-- | fs/udf/namei.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index 78a603129dd5..2be775d30ac1 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c @@ -517,7 +517,11 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry) inode->i_nlink); clear_nlink(inode); inode->i_size = 0; - inode_dec_link_count(dir); + if (dir->i_nlink >= 3) + inode_dec_link_count(dir); + else + udf_warn(inode->i_sb, "parent dir link count too low (%u)\n", + dir->i_nlink); udf_add_fid_counter(dir->i_sb, true, -1); inode_set_mtime_to_ts(dir, inode_set_ctime_to_ts(dir, inode_set_ctime_current(inode))); |