}
 DEFINE_SIMPLE_ATTRIBUTE(blockcheck_fops, blockcheck_u64_get, NULL, "%llu\n");
 
-static struct dentry *blockcheck_debugfs_create(const char *name,
-                                               struct dentry *parent,
-                                               u64 *value)
-{
-       return debugfs_create_file(name, S_IFREG | S_IRUSR, parent, value,
-                                  &blockcheck_fops);
-}
-
 static void ocfs2_blockcheck_debug_remove(struct ocfs2_blockcheck_stats *stats)
 {
        if (stats) {
 static void ocfs2_blockcheck_debug_install(struct ocfs2_blockcheck_stats *stats,
                                           struct dentry *parent)
 {
-       stats->b_debug_dir = debugfs_create_dir("blockcheck", parent);
+       struct dentry *dir;
+
+       dir = debugfs_create_dir("blockcheck", parent);
+       stats->b_debug_dir = dir;
+
+       debugfs_create_file("blocks_checked", S_IFREG | S_IRUSR, dir,
+                           &stats->b_check_count, &blockcheck_fops);
 
-       blockcheck_debugfs_create("blocks_checked", stats->b_debug_dir,
-                                 &stats->b_check_count);
+       debugfs_create_file("checksums_failed", S_IFREG | S_IRUSR, dir,
+                           &stats->b_failure_count, &blockcheck_fops);
 
-       blockcheck_debugfs_create("checksums_failed", stats->b_debug_dir,
-                                 &stats->b_failure_count);
+       debugfs_create_file("ecc_recoveries", S_IFREG | S_IRUSR, dir,
+                           &stats->b_recover_count, &blockcheck_fops);
 
-       blockcheck_debugfs_create("ecc_recoveries", stats->b_debug_dir,
-                                 &stats->b_recover_count);
 }
 #else
 static inline void ocfs2_blockcheck_debug_install(struct ocfs2_blockcheck_stats *stats,
 
        unsigned int            hr_region_num;
 
        struct dentry           *hr_debug_dir;
-       struct dentry           *hr_debug_livenodes;
-       struct dentry           *hr_debug_regnum;
-       struct dentry           *hr_debug_elapsed_time;
-       struct dentry           *hr_debug_pinned;
        struct o2hb_debug_buf   *hr_db_livenodes;
        struct o2hb_debug_buf   *hr_db_regnum;
        struct o2hb_debug_buf   *hr_db_elapsed_time;
        kfree(o2hb_db_failedregions);
 }
 
-static struct dentry *o2hb_debug_create(const char *name, struct dentry *dir,
-                                       struct o2hb_debug_buf **db, int db_len,
-                                       int type, int size, int len, void *data)
+static void o2hb_debug_create(const char *name, struct dentry *dir,
+                             struct o2hb_debug_buf **db, int db_len, int type,
+                             int size, int len, void *data)
 {
        *db = kmalloc(db_len, GFP_KERNEL);
        if (!*db)
-               return NULL;
+               return;
 
        (*db)->db_type = type;
        (*db)->db_size = size;
        (*db)->db_len = len;
        (*db)->db_data = data;
 
-       return debugfs_create_file(name, S_IFREG|S_IRUSR, dir, *db,
-                                  &o2hb_debug_fops);
+       debugfs_create_file(name, S_IFREG|S_IRUSR, dir, *db, &o2hb_debug_fops);
 }
 
 static void o2hb_debug_init(void)
 
        kfree(reg->hr_slots);
 
-       debugfs_remove(reg->hr_debug_livenodes);
-       debugfs_remove(reg->hr_debug_regnum);
-       debugfs_remove(reg->hr_debug_elapsed_time);
-       debugfs_remove(reg->hr_debug_pinned);
-       debugfs_remove(reg->hr_debug_dir);
+       debugfs_remove_recursive(reg->hr_debug_dir);
        kfree(reg->hr_db_livenodes);
        kfree(reg->hr_db_regnum);
        kfree(reg->hr_db_elapsed_time);
                : NULL;
 }
 
-static int o2hb_debug_region_init(struct o2hb_region *reg, struct dentry *dir)
+static void o2hb_debug_region_init(struct o2hb_region *reg,
+                                  struct dentry *parent)
 {
-       int ret = -ENOMEM;
+       struct dentry *dir;
 
-       reg->hr_debug_dir =
-               debugfs_create_dir(config_item_name(®->hr_item), dir);
-       if (!reg->hr_debug_dir) {
-               mlog_errno(ret);
-               goto bail;
-       }
+       dir = debugfs_create_dir(config_item_name(®->hr_item), parent);
+       reg->hr_debug_dir = dir;
 
-       reg->hr_debug_livenodes =
-                       o2hb_debug_create(O2HB_DEBUG_LIVENODES,
-                                         reg->hr_debug_dir,
-                                         &(reg->hr_db_livenodes),
-                                         sizeof(*(reg->hr_db_livenodes)),
-                                         O2HB_DB_TYPE_REGION_LIVENODES,
-                                         sizeof(reg->hr_live_node_bitmap),
-                                         O2NM_MAX_NODES, reg);
-       if (!reg->hr_debug_livenodes) {
-               mlog_errno(ret);
-               goto bail;
-       }
+       o2hb_debug_create(O2HB_DEBUG_LIVENODES, dir, &(reg->hr_db_livenodes),
+                         sizeof(*(reg->hr_db_livenodes)),
+                         O2HB_DB_TYPE_REGION_LIVENODES,
+                         sizeof(reg->hr_live_node_bitmap), O2NM_MAX_NODES,
+                         reg);
 
-       reg->hr_debug_regnum =
-                       o2hb_debug_create(O2HB_DEBUG_REGION_NUMBER,
-                                         reg->hr_debug_dir,
-                                         &(reg->hr_db_regnum),
-                                         sizeof(*(reg->hr_db_regnum)),
-                                         O2HB_DB_TYPE_REGION_NUMBER,
-                                         0, O2NM_MAX_NODES, reg);
-       if (!reg->hr_debug_regnum) {
-               mlog_errno(ret);
-               goto bail;
-       }
+       o2hb_debug_create(O2HB_DEBUG_REGION_NUMBER, dir, &(reg->hr_db_regnum),
+                         sizeof(*(reg->hr_db_regnum)),
+                         O2HB_DB_TYPE_REGION_NUMBER, 0, O2NM_MAX_NODES, reg);
 
-       reg->hr_debug_elapsed_time =
-                       o2hb_debug_create(O2HB_DEBUG_REGION_ELAPSED_TIME,
-                                         reg->hr_debug_dir,
-                                         &(reg->hr_db_elapsed_time),
-                                         sizeof(*(reg->hr_db_elapsed_time)),
-                                         O2HB_DB_TYPE_REGION_ELAPSED_TIME,
-                                         0, 0, reg);
-       if (!reg->hr_debug_elapsed_time) {
-               mlog_errno(ret);
-               goto bail;
-       }
+       o2hb_debug_create(O2HB_DEBUG_REGION_ELAPSED_TIME, dir,
+                         &(reg->hr_db_elapsed_time),
+                         sizeof(*(reg->hr_db_elapsed_time)),
+                         O2HB_DB_TYPE_REGION_ELAPSED_TIME, 0, 0, reg);
 
-       reg->hr_debug_pinned =
-                       o2hb_debug_create(O2HB_DEBUG_REGION_PINNED,
-                                         reg->hr_debug_dir,
-                                         &(reg->hr_db_pinned),
-                                         sizeof(*(reg->hr_db_pinned)),
-                                         O2HB_DB_TYPE_REGION_PINNED,
-                                         0, 0, reg);
-       if (!reg->hr_debug_pinned) {
-               mlog_errno(ret);
-               goto bail;
-       }
+       o2hb_debug_create(O2HB_DEBUG_REGION_PINNED, dir, &(reg->hr_db_pinned),
+                         sizeof(*(reg->hr_db_pinned)),
+                         O2HB_DB_TYPE_REGION_PINNED, 0, 0, reg);
 
-       ret = 0;
-bail:
-       return ret;
 }
 
 static struct config_item *o2hb_heartbeat_group_make_item(struct config_group *group,
        if (ret)
                goto unregister_handler;
 
-       ret = o2hb_debug_region_init(reg, o2hb_debug_dir);
-       if (ret) {
-               config_item_put(®->hr_item);
-               goto unregister_handler;
-       }
+       o2hb_debug_region_init(reg, o2hb_debug_dir);
 
        return ®->hr_item;
 
 
        atomic_t res_tot_count;
        atomic_t res_cur_count;
 
-       struct dlm_debug_ctxt *dlm_debug_ctxt;
        struct dentry *dlm_debugfs_subroot;
 
        /* NOTE: Next three are protected by dlm_domain_lock */
 
 /* files in subroot */
 void dlm_debug_init(struct dlm_ctxt *dlm)
 {
-       struct dlm_debug_ctxt *dc = dlm->dlm_debug_ctxt;
-
        /* for dumping dlm_ctxt */
-       dc->debug_state_dentry = debugfs_create_file(DLM_DEBUGFS_DLM_STATE,
-                                                    S_IFREG|S_IRUSR,
-                                                    dlm->dlm_debugfs_subroot,
-                                                    dlm, &debug_state_fops);
+       debugfs_create_file(DLM_DEBUGFS_DLM_STATE, S_IFREG|S_IRUSR,
+                           dlm->dlm_debugfs_subroot, dlm, &debug_state_fops);
 
        /* for dumping lockres */
-       dc->debug_lockres_dentry =
-                       debugfs_create_file(DLM_DEBUGFS_LOCKING_STATE,
-                                           S_IFREG|S_IRUSR,
-                                           dlm->dlm_debugfs_subroot,
-                                           dlm, &debug_lockres_fops);
+       debugfs_create_file(DLM_DEBUGFS_LOCKING_STATE, S_IFREG|S_IRUSR,
+                           dlm->dlm_debugfs_subroot, dlm, &debug_lockres_fops);
 
        /* for dumping mles */
-       dc->debug_mle_dentry = debugfs_create_file(DLM_DEBUGFS_MLE_STATE,
-                                                  S_IFREG|S_IRUSR,
-                                                  dlm->dlm_debugfs_subroot,
-                                                  dlm, &debug_mle_fops);
+       debugfs_create_file(DLM_DEBUGFS_MLE_STATE, S_IFREG|S_IRUSR,
+                           dlm->dlm_debugfs_subroot, dlm, &debug_mle_fops);
 
        /* for dumping lockres on the purge list */
-       dc->debug_purgelist_dentry =
-                       debugfs_create_file(DLM_DEBUGFS_PURGE_LIST,
-                                           S_IFREG|S_IRUSR,
-                                           dlm->dlm_debugfs_subroot,
-                                           dlm, &debug_purgelist_fops);
-}
-
-void dlm_debug_shutdown(struct dlm_ctxt *dlm)
-{
-       struct dlm_debug_ctxt *dc = dlm->dlm_debug_ctxt;
-
-       if (dc) {
-               debugfs_remove(dc->debug_purgelist_dentry);
-               debugfs_remove(dc->debug_mle_dentry);
-               debugfs_remove(dc->debug_lockres_dentry);
-               debugfs_remove(dc->debug_state_dentry);
-               kfree(dc);
-               dc = NULL;
-       }
+       debugfs_create_file(DLM_DEBUGFS_PURGE_LIST, S_IFREG|S_IRUSR,
+                           dlm->dlm_debugfs_subroot, dlm,
+                           &debug_purgelist_fops);
 }
 
 /* subroot - domain dir */
-int dlm_create_debugfs_subroot(struct dlm_ctxt *dlm)
+void dlm_create_debugfs_subroot(struct dlm_ctxt *dlm)
 {
-       dlm->dlm_debug_ctxt = kzalloc(sizeof(struct dlm_debug_ctxt),
-                                     GFP_KERNEL);
-       if (!dlm->dlm_debug_ctxt) {
-               mlog_errno(-ENOMEM);
-               return -ENOMEM;
-       }
-
        dlm->dlm_debugfs_subroot = debugfs_create_dir(dlm->name,
                                                      dlm_debugfs_root);
-       return 0;
 }
 
 void dlm_destroy_debugfs_subroot(struct dlm_ctxt *dlm)
 {
-       debugfs_remove(dlm->dlm_debugfs_subroot);
+       debugfs_remove_recursive(dlm->dlm_debugfs_subroot);
 }
 
 /* debugfs root */
 
 
 #ifdef CONFIG_DEBUG_FS
 
-struct dlm_debug_ctxt {
-       struct dentry *debug_state_dentry;
-       struct dentry *debug_lockres_dentry;
-       struct dentry *debug_mle_dentry;
-       struct dentry *debug_purgelist_dentry;
-};
-
 struct debug_lockres {
        int dl_len;
        char *dl_buf;
 };
 
 void dlm_debug_init(struct dlm_ctxt *dlm);
-void dlm_debug_shutdown(struct dlm_ctxt *dlm);
 
-int dlm_create_debugfs_subroot(struct dlm_ctxt *dlm);
+void dlm_create_debugfs_subroot(struct dlm_ctxt *dlm);
 void dlm_destroy_debugfs_subroot(struct dlm_ctxt *dlm);
 
 void dlm_create_debugfs_root(void);
 static inline void dlm_debug_init(struct dlm_ctxt *dlm)
 {
 }
-static inline void dlm_debug_shutdown(struct dlm_ctxt *dlm)
-{
-}
-static inline int dlm_create_debugfs_subroot(struct dlm_ctxt *dlm)
+static inline void dlm_create_debugfs_subroot(struct dlm_ctxt *dlm)
 {
-       return 0;
 }
 static inline void dlm_destroy_debugfs_subroot(struct dlm_ctxt *dlm)
 {
 
 static void dlm_complete_dlm_shutdown(struct dlm_ctxt *dlm)
 {
        dlm_unregister_domain_handlers(dlm);
-       dlm_debug_shutdown(dlm);
        dlm_complete_thread(dlm);
        dlm_complete_recovery_thread(dlm);
        dlm_destroy_dlm_worker(dlm);
 
        if (status) {
                dlm_unregister_domain_handlers(dlm);
-               dlm_debug_shutdown(dlm);
                dlm_complete_thread(dlm);
                dlm_complete_recovery_thread(dlm);
                dlm_destroy_dlm_worker(dlm);
        dlm->key = key;
        dlm->node_num = o2nm_this_node();
 
-       ret = dlm_create_debugfs_subroot(dlm);
-       if (ret < 0)
-               goto leave;
+       dlm_create_debugfs_subroot(dlm);
 
        spin_lock_init(&dlm->spinlock);
        spin_lock_init(&dlm->master_lock);
        mlog(0, "context init: refcount %u\n",
                  kref_read(&dlm->dlm_refs));
 
+       ret = 0;
 leave:
        if (ret < 0 && dlm) {
                if (dlm->master_hash)
 
 
        kref_init(&dlm_debug->d_refcnt);
        INIT_LIST_HEAD(&dlm_debug->d_lockres_tracking);
-       dlm_debug->d_locking_state = NULL;
-       dlm_debug->d_locking_filter = NULL;
        dlm_debug->d_filter_secs = 0;
 out:
        return dlm_debug;
 {
        struct ocfs2_dlm_debug *dlm_debug = osb->osb_dlm_debug;
 
-       dlm_debug->d_locking_state = debugfs_create_file("locking_state",
-                                                        S_IFREG|S_IRUSR,
-                                                        osb->osb_debug_root,
-                                                        osb,
-                                                        &ocfs2_dlm_debug_fops);
+       debugfs_create_file("locking_state", S_IFREG|S_IRUSR,
+                           osb->osb_debug_root, osb, &ocfs2_dlm_debug_fops);
 
-       dlm_debug->d_locking_filter = debugfs_create_u32("locking_filter",
-                                               0600,
-                                               osb->osb_debug_root,
-                                               &dlm_debug->d_filter_secs);
+       debugfs_create_u32("locking_filter", 0600, osb->osb_debug_root,
+                          &dlm_debug->d_filter_secs);
 }
 
 static void ocfs2_dlm_shutdown_debug(struct ocfs2_super *osb)
 {
        struct ocfs2_dlm_debug *dlm_debug = osb->osb_dlm_debug;
 
-       if (dlm_debug) {
-               debugfs_remove(dlm_debug->d_locking_state);
-               debugfs_remove(dlm_debug->d_locking_filter);
+       if (dlm_debug)
                ocfs2_put_dlm_debug(dlm_debug);
-       }
 }
 
 int ocfs2_dlm_init(struct ocfs2_super *osb)
 
 
 struct ocfs2_dlm_debug {
        struct kref d_refcnt;
-       struct dentry *d_locking_state;
-       struct dentry *d_locking_filter;
        u32 d_filter_secs;
        struct list_head d_lockres_tracking;
 };
        struct ocfs2_dlm_debug *osb_dlm_debug;
 
        struct dentry *osb_debug_root;
-       struct dentry *osb_ctxt;
 
        wait_queue_head_t recovery_event;
 
 
        osb->osb_debug_root = debugfs_create_dir(osb->uuid_str,
                                                 ocfs2_debugfs_root);
 
-       osb->osb_ctxt = debugfs_create_file("fs_state", S_IFREG|S_IRUSR,
-                                           osb->osb_debug_root,
-                                           osb,
-                                           &ocfs2_osb_debug_fops);
+       debugfs_create_file("fs_state", S_IFREG|S_IRUSR, osb->osb_debug_root,
+                           osb, &ocfs2_osb_debug_fops);
 
        if (ocfs2_meta_ecc(osb))
                ocfs2_blockcheck_stats_debugfs_install( &osb->osb_ecc_stats,
 
        kset_unregister(osb->osb_dev_kset);
 
-       debugfs_remove(osb->osb_ctxt);
-
        /* Orphan scan should be stopped as early as possible */
        ocfs2_orphan_scan_stop(osb);
 
                ocfs2_dlm_shutdown(osb, hangup_needed);
 
        ocfs2_blockcheck_stats_debugfs_remove(&osb->osb_ecc_stats);
-       debugfs_remove(osb->osb_debug_root);
+       debugfs_remove_recursive(osb->osb_debug_root);
 
        if (hangup_needed)
                ocfs2_cluster_hangup(osb->uuid_str, strlen(osb->uuid_str));