Skip to contentSkip to conversation

udf: Decrement correct link count in udf_rmdir

PATCH In review Stephen Mollett 2 participants 2 messages May 1, 2007 UDF filesystem

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 udf: Decrement correct link count in udf_rmdir

It appears that a minor thinko occurred in udf_rmdir and the (already-cleared) link count on the directory that is being removed was being decremented instead of the link count on its parent directory. This gives rise to lots of kernel messages similar to:

UDF-fs warning (device loop1): udf_rmdir: empty directory has nlink != 2 (8)

when removing directory trees. No other ill effects have been observed but I guess it could theoretically result in the link count overflowing on a very long-lived, much modified directory.

---

Patch applies cleanly to latest git snapshot and other recent 2.6 kernels.

Please CC: me as I'm not currently subscribed to linux-kernel.

First attempt at formally submitting a kernel patch - apologies if I've cocked something up - please be nice :-)

fs/udf/namei.c renamed from fs/udf/namei.c.orig +1 -1
@@ -878,7 +878,7 @@ static int udf_rmdir(struct inode * dir,
 			inode->i_nlink);
 	clear_nlink(inode);
 	inode->i_size = 0;
-	inode_dec_link_count(inode);
+	inode_dec_link_count(dir);
 	inode->i_ctime = dir->i_ctime = dir->i_mtime = current_fs_time(dir->i_sb);
 	mark_inode_dirty(dir);
 
#1 lore raw
Quoted 25 lines · On Tue, 1 May 2007 19:23:14 +0100 Stephen Mollett <[email protected]> wrote:

It appears that a minor thinko occurred in udf_rmdir and the (already-cleared) link count on the directory that is being removed was being decremented instead of the link count on its parent directory. This gives rise to lots of kernel messages similar to:

UDF-fs warning (device loop1): udf_rmdir: empty directory has nlink != 2 (8)

when removing directory trees. No other ill effects have been observed but I guess it could theoretically result in the link count overflowing on a very long-lived, much modified directory.

---

Patch applies cleanly to latest git snapshot and other recent 2.6 kernels.

Please CC: me as I'm not currently subscribed to linux-kernel.

First attempt at formally submitting a kernel patch - apologies if I've cocked something up - please be nice :-)

fs/udf/namei.c static int udf_rmdir(struct inode * dir, · line 884

Quoted 8 lines
fs/udf/namei.c renamed from fs/udf/namei.c.orig +1 -1
@@ -878,7 +878,7 @@ static int udf_rmdir(struct inode * dir,
 			inode->i_nlink);
 	clear_nlink(inode);
 	inode->i_size = 0;
-	inode_dec_link_count(inode);
+	inode_dec_link_count(dir);
 	inode->i_ctime = dir->i_ctime = dir->i_mtime = current_fs_time(dir->i_sb);
 	mark_inode_dirty(dir);
 

OK, thanks. git-blame says

9a53c3a7 (Dave Hansen 2006-09-30 23:29:03 -0700 881) inode_dec_link_count(inode);

This bug is also fixed in Jan's UDF fixes for 2.6.22, but it looks like I should make your fix a separate thing, with a 2.6.21.x backport.