[<prev] [next>] [day] [month] [year] [list]
Message-ID: <Pine.LNX.4.64.0804091727200.8547@scrub.home>
Date: Wed, 9 Apr 2008 17:44:07 +0200 (CEST)
From: Roman Zippel <zippel@...ux-m68k.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
cc: stable@...nel.org, linux-kernel@...r.kernel.org
Subject: [PATCH/HFS+] fix unlink of links
Hi,
Some time ago while attempting to handle invalid link counts, I botched
the unlink of links itself, so this patch fixes this now correctly, so
that only the link count of nodes that don't point to links is ignored.
Thanks to Vlado Plaga <rechner@...do-do.de> to notify me of this
problem.
bye, Roman
Signed-off-by: Roman Zippel <zippel@...ux-m68k.org>
Index: linux-2.6/fs/hfsplus/dir.c
===================================================================
--- linux-2.6.orig/fs/hfsplus/dir.c 2008-04-07 14:25:42.000000000 +0200
+++ linux-2.6/fs/hfsplus/dir.c 2008-04-07 15:59:45.000000000 +0200
@@ -340,16 +340,23 @@ static int hfsplus_unlink(struct inode *
if (inode->i_nlink > 0)
drop_nlink(inode);
- hfsplus_delete_inode(inode);
- if (inode->i_ino != cnid && !inode->i_nlink) {
- if (!atomic_read(&HFSPLUS_I(inode).opencnt)) {
- res = hfsplus_delete_cat(inode->i_ino, HFSPLUS_SB(sb).hidden_dir, NULL);
- if (!res)
- hfsplus_delete_inode(inode);
+ if (inode->i_ino == cnid)
+ clear_nlink(inode);
+ if (!inode->i_nlink) {
+ if (inode->i_ino != cnid) {
+ HFSPLUS_SB(sb).file_count--;
+ if (!atomic_read(&HFSPLUS_I(inode).opencnt)) {
+ res = hfsplus_delete_cat(inode->i_ino,
+ HFSPLUS_SB(sb).hidden_dir,
+ NULL);
+ if (!res)
+ hfsplus_delete_inode(inode);
+ } else
+ inode->i_flags |= S_DEAD;
} else
- inode->i_flags |= S_DEAD;
+ hfsplus_delete_inode(inode);
} else
- clear_nlink(inode);
+ HFSPLUS_SB(sb).file_count--;
inode->i_ctime = CURRENT_TIME_SEC;
mark_inode_dirty(inode);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists