fix reiserfs mkdir() breakage
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 2 Mar 2011 14:35:13 +0000 (09:35 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 3 Mar 2011 06:28:40 +0000 (01:28 -0500)
if directory has so many subdirectories that its link count is set
to 1 (i.e. "can't tell accurately") and reiserfs_new_inode() fails,
we shouldn't decrement the parent's link count in cleanup path;
that's what DEC_DIR_INODE_NLINK() is for.  As it is, we end up
with parent suddenly getting zero i_nlink, with very unpleasant
effects.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/reiserfs/namei.c

index ba5f51e..68fdf45 100644 (file)
@@ -771,7 +771,7 @@ static int reiserfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
                                        EMPTY_DIR_SIZE_V1 : EMPTY_DIR_SIZE,
                                        dentry, inode, &security);
        if (retval) {
-               dir->i_nlink--;
+               DEC_DIR_INODE_NLINK(dir)
                goto out_failed;
        }