selinuxfs: don't open-code d_genocide()
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 24 Dec 2014 19:56:48 +0000 (14:56 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 26 Jan 2015 04:16:25 +0000 (23:16 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
security/selinux/selinuxfs.c

index 33db1ad4fd103d948f0984d3931c9f4e7b90ee8d..1684bcc78b34e42395b1db335c9122c405987c23 100644 (file)
@@ -1195,30 +1195,8 @@ static const struct file_operations sel_commit_bools_ops = {
 
 static void sel_remove_entries(struct dentry *de)
 {
-       struct list_head *node;
-
-       spin_lock(&de->d_lock);
-       node = de->d_subdirs.next;
-       while (node != &de->d_subdirs) {
-               struct dentry *d = list_entry(node, struct dentry, d_child);
-
-               spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
-               list_del_init(node);
-
-               if (d->d_inode) {
-                       dget_dlock(d);
-                       spin_unlock(&de->d_lock);
-                       spin_unlock(&d->d_lock);
-                       d_delete(d);
-                       simple_unlink(de->d_inode, d);
-                       dput(d);
-                       spin_lock(&de->d_lock);
-               } else
-                       spin_unlock(&d->d_lock);
-               node = de->d_subdirs.next;
-       }
-
-       spin_unlock(&de->d_lock);
+       d_genocide(de);
+       shrink_dcache_parent(de);
 }
 
 #define BOOL_DIR_NAME "booleans"
@@ -1668,37 +1646,13 @@ static int sel_make_class_dir_entries(char *classname, int index,
        return rc;
 }
 
-static void sel_remove_classes(void)
-{
-       struct list_head *class_node;
-
-       list_for_each(class_node, &class_dir->d_subdirs) {
-               struct dentry *class_subdir = list_entry(class_node,
-                                       struct dentry, d_child);
-               struct list_head *class_subdir_node;
-
-               list_for_each(class_subdir_node, &class_subdir->d_subdirs) {
-                       struct dentry *d = list_entry(class_subdir_node,
-                                               struct dentry, d_child);
-
-                       if (d->d_inode)
-                               if (d->d_inode->i_mode & S_IFDIR)
-                                       sel_remove_entries(d);
-               }
-
-               sel_remove_entries(class_subdir);
-       }
-
-       sel_remove_entries(class_dir);
-}
-
 static int sel_make_classes(void)
 {
        int rc, nclasses, i;
        char **classes;
 
        /* delete any existing entries */
-       sel_remove_classes();
+       sel_remove_entries(class_dir);
 
        rc = security_get_classes(&classes, &nclasses);
        if (rc)