|
@@ -260,37 +260,6 @@ static void init_symlink(struct inode * inode)
|
|
|
inode->i_op = &configfs_symlink_inode_operations;
|
|
|
}
|
|
|
|
|
|
-static int create_dir(struct config_item *k, struct dentry *d)
|
|
|
-{
|
|
|
- int error;
|
|
|
- umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO;
|
|
|
- struct dentry *p = d->d_parent;
|
|
|
-
|
|
|
- BUG_ON(!k);
|
|
|
-
|
|
|
- error = configfs_dirent_exists(p->d_fsdata, d->d_name.name);
|
|
|
- if (!error)
|
|
|
- error = configfs_make_dirent(p->d_fsdata, d, k, mode,
|
|
|
- CONFIGFS_DIR | CONFIGFS_USET_CREATING);
|
|
|
- if (!error) {
|
|
|
- configfs_set_dir_dirent_depth(p->d_fsdata, d->d_fsdata);
|
|
|
- error = configfs_create(d, mode, init_dir);
|
|
|
- if (!error) {
|
|
|
- inc_nlink(p->d_inode);
|
|
|
- } else {
|
|
|
- struct configfs_dirent *sd = d->d_fsdata;
|
|
|
- if (sd) {
|
|
|
- spin_lock(&configfs_dirent_lock);
|
|
|
- list_del_init(&sd->s_sibling);
|
|
|
- spin_unlock(&configfs_dirent_lock);
|
|
|
- configfs_put(sd);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return error;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* configfs_create_dir - create a directory for an config_item.
|
|
|
* @item: config_itemwe're creating directory for.
|
|
@@ -300,11 +269,37 @@ static int create_dir(struct config_item *k, struct dentry *d)
|
|
|
* until it is validated by configfs_dir_set_ready()
|
|
|
*/
|
|
|
|
|
|
-static int configfs_create_dir(struct config_item * item, struct dentry *dentry)
|
|
|
+static int configfs_create_dir(struct config_item *item, struct dentry *dentry)
|
|
|
{
|
|
|
- int error = create_dir(item, dentry);
|
|
|
- if (!error)
|
|
|
+ int error;
|
|
|
+ umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO;
|
|
|
+ struct dentry *p = dentry->d_parent;
|
|
|
+
|
|
|
+ BUG_ON(!item);
|
|
|
+
|
|
|
+ error = configfs_dirent_exists(p->d_fsdata, dentry->d_name.name);
|
|
|
+ if (unlikely(error))
|
|
|
+ return error;
|
|
|
+
|
|
|
+ error = configfs_make_dirent(p->d_fsdata, dentry, item, mode,
|
|
|
+ CONFIGFS_DIR | CONFIGFS_USET_CREATING);
|
|
|
+ if (unlikely(error))
|
|
|
+ return error;
|
|
|
+
|
|
|
+ configfs_set_dir_dirent_depth(p->d_fsdata, dentry->d_fsdata);
|
|
|
+ error = configfs_create(dentry, mode, init_dir);
|
|
|
+ if (!error) {
|
|
|
+ inc_nlink(p->d_inode);
|
|
|
item->ci_dentry = dentry;
|
|
|
+ } else {
|
|
|
+ struct configfs_dirent *sd = dentry->d_fsdata;
|
|
|
+ if (sd) {
|
|
|
+ spin_lock(&configfs_dirent_lock);
|
|
|
+ list_del_init(&sd->s_sibling);
|
|
|
+ spin_unlock(&configfs_dirent_lock);
|
|
|
+ configfs_put(sd);
|
|
|
+ }
|
|
|
+ }
|
|
|
return error;
|
|
|
}
|
|
|
|