diff options
Diffstat (limited to 'fs/configfs/dir.c')
-rw-r--r-- | fs/configfs/dir.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c index 614e382a6049..0e64312a084c 100644 --- a/fs/configfs/dir.c +++ b/fs/configfs/dir.c | |||
@@ -1073,25 +1073,24 @@ static int configfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
1073 | group = NULL; | 1073 | group = NULL; |
1074 | item = NULL; | 1074 | item = NULL; |
1075 | if (type->ct_group_ops->make_group) { | 1075 | if (type->ct_group_ops->make_group) { |
1076 | group = type->ct_group_ops->make_group(to_config_group(parent_item), name); | 1076 | ret = type->ct_group_ops->make_group(to_config_group(parent_item), name, &group); |
1077 | if (group) { | 1077 | if (!ret) { |
1078 | link_group(to_config_group(parent_item), group); | 1078 | link_group(to_config_group(parent_item), group); |
1079 | item = &group->cg_item; | 1079 | item = &group->cg_item; |
1080 | } | 1080 | } |
1081 | } else { | 1081 | } else { |
1082 | item = type->ct_group_ops->make_item(to_config_group(parent_item), name); | 1082 | ret = type->ct_group_ops->make_item(to_config_group(parent_item), name, &item); |
1083 | if (item) | 1083 | if (!ret) |
1084 | link_obj(parent_item, item); | 1084 | link_obj(parent_item, item); |
1085 | } | 1085 | } |
1086 | mutex_unlock(&subsys->su_mutex); | 1086 | mutex_unlock(&subsys->su_mutex); |
1087 | 1087 | ||
1088 | kfree(name); | 1088 | kfree(name); |
1089 | if (!item) { | 1089 | if (ret) { |
1090 | /* | 1090 | /* |
1091 | * If item == NULL, then link_obj() was never called. | 1091 | * If ret != 0, then link_obj() was never called. |
1092 | * There are no extra references to clean up. | 1092 | * There are no extra references to clean up. |
1093 | */ | 1093 | */ |
1094 | ret = -ENOMEM; | ||
1095 | goto out_put; | 1094 | goto out_put; |
1096 | } | 1095 | } |
1097 | 1096 | ||