From: Krzysztof Opasiak Date: Fri, 11 Dec 2015 15:06:11 +0000 (+0100) Subject: fs: configfs: Factor out configfs_find_subsys_dentry() X-Git-Tag: v4.5-rc1~49^2~52 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=9a70adfff3379a6511483bd60dac06fda49b14a8;p=karo-tx-linux.git fs: configfs: Factor out configfs_find_subsys_dentry() 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 Cc: Joel Becker Cc: Christoph Hellwig Signed-off-by: Nicholas Bellinger --- diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c index 43decd26851c..3873ac10b68c 100644 --- a/fs/configfs/dir.c +++ b/fs/configfs/dir.c @@ -1079,11 +1079,30 @@ out_unlock_dirent_lock: return ret; } +static inline struct configfs_dirent * +configfs_find_subsys_dentry(struct configfs_dirent *root_sd, + struct config_item *subsys_item) +{ + struct configfs_dirent *p; + struct configfs_dirent *ret = NULL; + + list_for_each_entry(p, &root_sd->s_children, s_sibling) { + if (p->s_type & CONFIGFS_DIR && + p->s_element == subsys_item) { + ret = p; + break; + } + } + + return ret; +} + + int configfs_depend_item(struct configfs_subsystem *subsys, struct config_item *target) { int ret; - struct configfs_dirent *p, *root_sd, *subsys_sd = NULL; + struct configfs_dirent *subsys_sd; struct config_item *s_item = &subsys->su_group.cg_item; struct dentry *root; @@ -1102,17 +1121,7 @@ int configfs_depend_item(struct configfs_subsystem *subsys, */ mutex_lock(&d_inode(root)->i_mutex); - root_sd = root->d_fsdata; - - list_for_each_entry(p, &root_sd->s_children, s_sibling) { - if (p->s_type & CONFIGFS_DIR) { - if (p->s_element == s_item) { - subsys_sd = p; - break; - } - } - } - + subsys_sd = configfs_find_subsys_dentry(root->d_fsdata, s_item); if (!subsys_sd) { ret = -ENOENT; goto out_unlock_fs;