int ret = -ENOMEM;
 
        o2hb_debug_dir = debugfs_create_dir(O2HB_DEBUG_DIR, NULL);
-       if (!o2hb_debug_dir) {
+       if (IS_ERR_OR_NULL(o2hb_debug_dir)) {
+               ret = o2hb_debug_dir ?
+                       PTR_ERR(o2hb_debug_dir) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
                                                 sizeof(o2hb_live_node_bitmap),
                                                 O2NM_MAX_NODES,
                                                 o2hb_live_node_bitmap);
-       if (!o2hb_debug_livenodes) {
+       if (IS_ERR_OR_NULL(o2hb_debug_livenodes)) {
+               ret = o2hb_debug_livenodes ?
+                       PTR_ERR(o2hb_debug_livenodes) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
                                                   sizeof(o2hb_live_region_bitmap),
                                                   O2NM_MAX_REGIONS,
                                                   o2hb_live_region_bitmap);
-       if (!o2hb_debug_liveregions) {
+       if (IS_ERR_OR_NULL(o2hb_debug_liveregions)) {
+               ret = o2hb_debug_liveregions ?
+                       PTR_ERR(o2hb_debug_liveregions) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
                                          sizeof(o2hb_quorum_region_bitmap),
                                          O2NM_MAX_REGIONS,
                                          o2hb_quorum_region_bitmap);
-       if (!o2hb_debug_quorumregions) {
+       if (IS_ERR_OR_NULL(o2hb_debug_quorumregions)) {
+               ret = o2hb_debug_quorumregions ?
+                       PTR_ERR(o2hb_debug_quorumregions) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
                                          sizeof(o2hb_failed_region_bitmap),
                                          O2NM_MAX_REGIONS,
                                          o2hb_failed_region_bitmap);
-       if (!o2hb_debug_failedregions) {
+       if (IS_ERR_OR_NULL(o2hb_debug_failedregions)) {
+               ret = o2hb_debug_failedregions ?
+                       PTR_ERR(o2hb_debug_failedregions) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
 
        reg->hr_debug_dir =
                debugfs_create_dir(config_item_name(®->hr_item), dir);
-       if (!reg->hr_debug_dir) {
+       if (IS_ERR_OR_NULL(reg->hr_debug_dir)) {
+               ret = reg->hr_debug_dir ? PTR_ERR(reg->hr_debug_dir) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
                                          O2HB_DB_TYPE_REGION_LIVENODES,
                                          sizeof(reg->hr_live_node_bitmap),
                                          O2NM_MAX_NODES, reg);
-       if (!reg->hr_debug_livenodes) {
+       if (IS_ERR_OR_NULL(reg->hr_debug_livenodes)) {
+               ret = reg->hr_debug_livenodes ?
+                       PTR_ERR(reg->hr_debug_livenodes) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
                                          sizeof(*(reg->hr_db_regnum)),
                                          O2HB_DB_TYPE_REGION_NUMBER,
                                          0, O2NM_MAX_NODES, reg);
-       if (!reg->hr_debug_regnum) {
+       if (IS_ERR_OR_NULL(reg->hr_debug_regnum)) {
+               ret = reg->hr_debug_regnum ?
+                       PTR_ERR(reg->hr_debug_regnum) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
                                          sizeof(*(reg->hr_db_elapsed_time)),
                                          O2HB_DB_TYPE_REGION_ELAPSED_TIME,
                                          0, 0, reg);
-       if (!reg->hr_debug_elapsed_time) {
+       if (IS_ERR_OR_NULL(reg->hr_debug_elapsed_time)) {
+               ret = reg->hr_debug_elapsed_time ?
+                       PTR_ERR(reg->hr_debug_elapsed_time) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
                                          sizeof(*(reg->hr_db_pinned)),
                                          O2HB_DB_TYPE_REGION_PINNED,
                                          0, 0, reg);
-       if (!reg->hr_debug_pinned) {
+       if (IS_ERR_OR_NULL(reg->hr_debug_pinned)) {
+               ret = reg->hr_debug_pinned ?
+                       PTR_ERR(reg->hr_debug_pinned) : -ENOMEM;
                mlog_errno(ret);
                goto bail;
        }
 
-       ret = 0;
+       return 0;
 bail:
+       debugfs_remove_recursive(reg->hr_debug_dir);
        return ret;
 }
 
 
 
        osb->osb_debug_root = debugfs_create_dir(osb->uuid_str,
                                                 ocfs2_debugfs_root);
-       if (!osb->osb_debug_root) {
+       if (IS_ERR_OR_NULL(osb->osb_debug_root)) {
                status = -EINVAL;
                mlog(ML_ERROR, "Unable to create per-mount debugfs root.\n");
                goto read_super_error;
                                            osb->osb_debug_root,
                                            osb,
                                            &ocfs2_osb_debug_fops);
-       if (!osb->osb_ctxt) {
+       if (IS_ERR_OR_NULL(osb->osb_ctxt)) {
                status = -EINVAL;
                mlog_errno(status);
                goto read_super_error;
        }
 
        ocfs2_debugfs_root = debugfs_create_dir("ocfs2", NULL);
-       if (!ocfs2_debugfs_root) {
-               status = -ENOMEM;
+       if (IS_ERR_OR_NULL(ocfs2_debugfs_root)) {
+               status = ocfs2_debugfs_root ?
+                       PTR_ERR(ocfs2_debugfs_root) : -ENOMEM;
                mlog(ML_ERROR, "Unable to create ocfs2 debugfs root.\n");
                goto out4;
        }