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 @@ out:
|
||||||
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,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue