debugfs: Fix filesystem reference counting on debugfs_remove() failure
[pandora-kernel.git] / fs / debugfs / inode.c
index 37a8ca7..e7a7a2f 100644 (file)
@@ -13,9 +13,6 @@
  *
  */
 
-/* uncomment to get debug messages from the debug filesystem, ah the irony. */
-/* #define DEBUG */
-
 #include <linux/module.h>
 #include <linux/fs.h>
 #include <linux/mount.h>
@@ -310,7 +307,7 @@ struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
 }
 EXPORT_SYMBOL_GPL(debugfs_create_symlink);
 
-static void __debugfs_remove(struct dentry *dentry, struct dentry *parent)
+static int __debugfs_remove(struct dentry *dentry, struct dentry *parent)
 {
        int ret = 0;
 
@@ -333,6 +330,7 @@ static void __debugfs_remove(struct dentry *dentry, struct dentry *parent)
                        dput(dentry);
                }
        }
+       return ret;
 }
 
 /**
@@ -351,7 +349,8 @@ static void __debugfs_remove(struct dentry *dentry, struct dentry *parent)
 void debugfs_remove(struct dentry *dentry)
 {
        struct dentry *parent;
-       
+       int ret;
+
        if (!dentry)
                return;
 
@@ -360,9 +359,10 @@ void debugfs_remove(struct dentry *dentry)
                return;
 
        mutex_lock(&parent->d_inode->i_mutex);
-       __debugfs_remove(dentry, parent);
+       ret = __debugfs_remove(dentry, parent);
        mutex_unlock(&parent->d_inode->i_mutex);
-       simple_release_fs(&debugfs_mount, &debugfs_mount_count);
+       if (!ret)
+               simple_release_fs(&debugfs_mount, &debugfs_mount_count);
 }
 EXPORT_SYMBOL_GPL(debugfs_remove);
 
@@ -540,17 +540,5 @@ static int __init debugfs_init(void)
 
        return retval;
 }
-
-static void __exit debugfs_exit(void)
-{
-       debugfs_registered = false;
-
-       simple_release_fs(&debugfs_mount, &debugfs_mount_count);
-       unregister_filesystem(&debug_fs_type);
-       kobject_put(debug_kobj);
-}
-
 core_initcall(debugfs_init);
-module_exit(debugfs_exit);
-MODULE_LICENSE("GPL");