Re: Hang during rm on ext2 mounted sync (2.6.14-rc2+)
From: Chris Sykes
Date: Sat Sep 24 2005 - 09:40:53 EST
On Sat, Sep 24, 2005 at 01:14:31PM +0100, Chris Sykes wrote:
> After many compile reboot cycles, git-bisect tells me that the
> offending cset is 10f47e6a1b8b276323b652053945c87a63a5812d:
> [PATCH] ext2: Enable atomic inode security labeling
>
> I'll do some more testing to verify.
Latest kernel from git (2.6.14-rc2-g87e807b6) still causes the problem
for me. Reversing cset 10f47e6a1b8b276323b652053945c87a63a5812d fixes
it for me.
I'll build a kernel with CONFIG_EXT2_FS_XATTR disabled and see if that
also makes the issue go away.
I have a question though. When looking at the code in
fs/ext2/ialloc.c for ext2_new_inode(). The failure path for
ext2_init_acl() includes a DQUOT_DROP(), but the failure path for
ext2_init_security() does not. e.g.:
err = ext2_init_acl(inode, dir);
if (err) {
DQUOT_FREE_INODE(inode);
DQUOT_DROP(inode);
goto fail2;
}
err = ext2_init_security(inode,dir);
if (err) {
DQUOT_FREE_INODE(inode);
goto fail2;
}
Is this right? Or should we really have the following:
Signed-off-by: Chris Sykes <chris@xxxxxxxxxxxxxxxx>
diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c
--- a/fs/ext2/ialloc.c
+++ b/fs/ext2/ialloc.c
@@ -618,6 +618,7 @@ got:
err = ext2_init_security(inode,dir);
if (err) {
DQUOT_FREE_INODE(inode);
+ DQUOT_DROP(inode);
goto fail2;
}
mark_inode_dirty(inode);
--
(o- Chris Sykes
//\ "Don't worry. Everything is getting nicely out of control ..."
V_/_ Douglas Adams - The Salmon of Doubt
GPG Fingerprint: 5E8E D17F F96C CC08 911D CAF2 9049 70D8 5143 8090
Attachment:
signature.asc
Description: Digital signature