Skip to content

Commit 715cd66

Browse files
author
Al Viro
committed
simple_fill_super(): don't bother with d_genocide() on failure
Failing ->fill_super() will be followed by ->kill_sb(), which should include kill_litter_super() if the call of simple_fill_super() had been asked to create anything besides the root dentry. So there's no need to empty the partially populated tree - it will be trimmed by inevitable kill_litter_super(). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent f9453a1 commit 715cd66

File tree

1 file changed

+5
-12
lines changed

1 file changed

+5
-12
lines changed

fs/libfs.c

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -912,7 +912,6 @@ int simple_fill_super(struct super_block *s, unsigned long magic,
912912
const struct tree_descr *files)
913913
{
914914
struct inode *inode;
915-
struct dentry *root;
916915
struct dentry *dentry;
917916
int i;
918917

@@ -935,8 +934,8 @@ int simple_fill_super(struct super_block *s, unsigned long magic,
935934
inode->i_op = &simple_dir_inode_operations;
936935
inode->i_fop = &simple_dir_operations;
937936
set_nlink(inode, 2);
938-
root = d_make_root(inode);
939-
if (!root)
937+
s->s_root = d_make_root(inode);
938+
if (!s->s_root)
940939
return -ENOMEM;
941940
for (i = 0; !files->name || files->name[0]; i++, files++) {
942941
if (!files->name)
@@ -948,27 +947,21 @@ int simple_fill_super(struct super_block *s, unsigned long magic,
948947
"with an index of 1!\n", __func__,
949948
s->s_type->name);
950949

951-
dentry = d_alloc_name(root, files->name);
950+
dentry = d_alloc_name(s->s_root, files->name);
952951
if (!dentry)
953-
goto out;
952+
return -ENOMEM;
954953
inode = new_inode(s);
955954
if (!inode) {
956955
dput(dentry);
957-
goto out;
956+
return -ENOMEM;
958957
}
959958
inode->i_mode = S_IFREG | files->mode;
960959
simple_inode_init_ts(inode);
961960
inode->i_fop = files->ops;
962961
inode->i_ino = i;
963962
d_add(dentry, inode);
964963
}
965-
s->s_root = root;
966964
return 0;
967-
out:
968-
d_genocide(root);
969-
shrink_dcache_parent(root);
970-
dput(root);
971-
return -ENOMEM;
972965
}
973966
EXPORT_SYMBOL(simple_fill_super);
974967

0 commit comments

Comments
 (0)