mirror of https://gitee.com/openkylin/linux.git
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: Krzysztof Opasiak <k.opasiak@samsung.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
9a9e3415ed
commit
9fb434e754
|
@ -1054,6 +1054,31 @@ static int configfs_depend_prep(struct dentry *origin,
|
|||
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,
|
||||
struct config_item *target)
|
||||
{
|
||||
|
@ -1094,22 +1119,8 @@ int configfs_depend_item(struct configfs_subsystem *subsys,
|
|||
}
|
||||
|
||||
/* 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:
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
|
||||
|
|
Loading…
Reference in New Issue