From d6903ec909aceb74631970c457e3de2ba2ed31b3 Mon Sep 17 00:00:00 2001 From: Roman Zippel Date: Wed, 9 Apr 2008 17:44:07 +0200 Subject: [PATCH] --- yaml --- r: 88221 b: refs/heads/master c: 76b0c26af2736b7e5b87e6ed7ab63901483d5736 h: refs/heads/master i: 88219: 44f354f082056e74a550b5a309b9cc2b0fbfad7a v: v3 --- [refs] | 2 +- trunk/fs/hfsplus/dir.c | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index ae17937a75cb..15e05602305d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f4be31ec9690cfe6e94fcbed6ae60a6a38b3c3ed +refs/heads/master: 76b0c26af2736b7e5b87e6ed7ab63901483d5736 diff --git a/trunk/fs/hfsplus/dir.c b/trunk/fs/hfsplus/dir.c index 29683645fa0a..5f4023678251 100644 --- a/trunk/fs/hfsplus/dir.c +++ b/trunk/fs/hfsplus/dir.c @@ -340,16 +340,23 @@ static int hfsplus_unlink(struct inode *dir, struct dentry *dentry) 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);