OSDN Git Service

fs: configfs: Factor out configfs_do_depend_item()
authorKrzysztof Opasiak <k.opasiak@samsung.com>
Fri, 11 Dec 2015 15:06:10 +0000 (16:06 +0100)
committerNicholas Bellinger <nab@linux-iscsi.org>
Mon, 21 Dec 2015 02:03:59 +0000 (18:03 -0800)
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>
fs/configfs/dir.c

index d390245..43decd2 100644 (file)
@@ -1054,6 +1054,31 @@ out:
        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);