Commit 9fb434e7 authored by Krzysztof Opasiak's avatar Krzysztof Opasiak Committed by Nicholas Bellinger

fs: configfs: Factor out configfs_do_depend_item()

configfs_depend_item() is quite complicated and should
be split up into smaller functions. This also allow to
share this code with other functions.
Signed-off-by: default avatarKrzysztof Opasiak <k.opasiak@samsung.com>
Cc: Joel Becker <jlbec@evilplan.org>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 9a9e3415
...@@ -1054,6 +1054,31 @@ static int configfs_depend_prep(struct dentry *origin, ...@@ -1054,6 +1054,31 @@ static int configfs_depend_prep(struct dentry *origin,
return ret; return ret;
} }
static int configfs_do_depend_item(struct dentry *subsys_dentry,
struct config_item *target)
{
struct configfs_dirent *p;
int ret;
spin_lock(&configfs_dirent_lock);
/* Scan the tree, return 0 if found */
ret = configfs_depend_prep(subsys_dentry, target);
if (ret)
goto out_unlock_dirent_lock;
/*
* We are sure that the item is not about to be removed by rmdir(), and
* not in the middle of attachment by mkdir().
*/
p = target->ci_dentry->d_fsdata;
p->s_dependent_count += 1;
out_unlock_dirent_lock:
spin_unlock(&configfs_dirent_lock);
return ret;
}
int configfs_depend_item(struct configfs_subsystem *subsys, int configfs_depend_item(struct configfs_subsystem *subsys,
struct config_item *target) struct config_item *target)
{ {
...@@ -1094,22 +1119,8 @@ int configfs_depend_item(struct configfs_subsystem *subsys, ...@@ -1094,22 +1119,8 @@ int configfs_depend_item(struct configfs_subsystem *subsys,
} }
/* Ok, now we can trust subsys/s_item */ /* Ok, now we can trust subsys/s_item */
ret = configfs_do_depend_item(subsys_sd->s_dentry, target);
spin_lock(&configfs_dirent_lock);
/* Scan the tree, return 0 if found */
ret = configfs_depend_prep(subsys_sd->s_dentry, target);
if (ret)
goto out_unlock_dirent_lock;
/*
* We are sure that the item is not about to be removed by rmdir(), and
* not in the middle of attachment by mkdir().
*/
p = target->ci_dentry->d_fsdata;
p->s_dependent_count += 1;
out_unlock_dirent_lock:
spin_unlock(&configfs_dirent_lock);
out_unlock_fs: out_unlock_fs:
mutex_unlock(&d_inode(root)->i_mutex); mutex_unlock(&d_inode(root)->i_mutex);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment