aboutsummaryrefslogtreecommitdiffstats
path: root/fs/configfs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/configfs/dir.c')
-rw-r--r--fs/configfs/dir.c13
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