hfsplus: switch to d_make_root()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 13 Feb 2012 03:07:07 +0000 (22:07 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 21 Mar 2012 01:29:36 +0000 (21:29 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/hfsplus/super.c

index 427682ca9e48d3e6aeac2087100c40725a811e2c..ceb1c281eefb0f3f5fa17e7358fd51fb6c69e6e5 100644 (file)
@@ -465,6 +465,13 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
                goto out_put_alloc_file;
        }
 
+       sb->s_d_op = &hfsplus_dentry_operations;
+       sb->s_root = d_make_root(root);
+       if (!sb->s_root) {
+               err = -ENOMEM;
+               goto out_put_alloc_file;
+       }
+
        str.len = sizeof(HFSP_HIDDENDIR_NAME) - 1;
        str.name = HFSP_HIDDENDIR_NAME;
        err = hfs_find_init(sbi->cat_tree, &fd);
@@ -515,13 +522,6 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
                }
        }
 
-       sb->s_d_op = &hfsplus_dentry_operations;
-       sb->s_root = d_alloc_root(root);
-       if (!sb->s_root) {
-               err = -ENOMEM;
-               goto out_put_hidden_dir;
-       }
-
        unload_nls(sbi->nls);
        sbi->nls = nls;
        return 0;
@@ -529,7 +529,8 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
 out_put_hidden_dir:
        iput(sbi->hidden_dir);
 out_put_root:
-       iput(root);
+       dput(sb->s_root);
+       sb->s_root = NULL;
 out_put_alloc_file:
        iput(sbi->alloc_file);
 out_close_cat_tree: