unsigned long arg);
        struct rb_root clients;
        struct dentry *debug_root;
+       struct dentry *heaps_debug_root;
+       struct dentry *clients_debug_root;
 };
 
 /**
 
        snprintf(debug_name, 64, "%u", client->pid);
        client->debug_root = debugfs_create_file(debug_name, 0664,
-                                                dev->debug_root, client,
-                                                &debug_client_fops);
+                                               dev->clients_debug_root,
+                                               client, &debug_client_fops);
+       if (!client->debug_root) {
+               char buf[256], *path;
+               path = dentry_path(dev->clients_debug_root, buf, 256);
+               pr_err("Failed to create client debugfs at %s/%s\n",
+                       path, debug_name);
+       }
+
        up_write(&dev->lock);
 
        return client;
 
 void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
 {
+       struct dentry *debug_file;
+
        if (!heap->ops->allocate || !heap->ops->free || !heap->ops->map_dma ||
            !heap->ops->unmap_dma)
                pr_err("%s: can not add heap with invalid ops struct.\n",
           the list later attempt higher id numbers first */
        plist_node_init(&heap->node, -heap->id);
        plist_add(&heap->node, &dev->heaps);
-       debugfs_create_file(heap->name, 0664, dev->debug_root, heap,
-                           &debug_heap_fops);
+       debug_file = debugfs_create_file(heap->name, 0664,
+                                       dev->heaps_debug_root, heap,
+                                       &debug_heap_fops);
+
+       if (!debug_file) {
+               char buf[256], *path;
+               path = dentry_path(dev->heaps_debug_root, buf, 256);
+               pr_err("Failed to create heap debugfs at %s/%s\n",
+                       path, heap->name);
+       }
+
 #ifdef DEBUG_HEAP_SHRINKER
        if (heap->shrinker.shrink) {
                char debug_name[64];
 
                snprintf(debug_name, 64, "%s_shrink", heap->name);
-               debugfs_create_file(debug_name, 0644, dev->debug_root, heap,
-                                   &debug_shrink_fops);
+               debug_file = debugfs_create_file(
+                       debug_name, 0644, dev->heaps_debug_root, heap,
+                       &debug_shrink_fops);
+               if (!debug_file) {
+                       char buf[256], *path;
+                       path = dentry_path(dev->heaps_debug_root, buf, 256);
+                       pr_err("Failed to create heap shrinker debugfs at %s/%s\n",
+                               path, debug_name);
+               }
        }
 #endif
        up_write(&dev->lock);
        }
 
        idev->debug_root = debugfs_create_dir("ion", NULL);
-       if (!idev->debug_root)
-               pr_err("ion: failed to create debug files.\n");
+       if (!idev->debug_root) {
+               pr_err("ion: failed to create debugfs root directory.\n");
+               goto debugfs_done;
+       }
+       idev->heaps_debug_root = debugfs_create_dir("heaps", idev->debug_root);
+       if (!idev->heaps_debug_root) {
+               pr_err("ion: failed to create debugfs heaps directory.\n");
+               goto debugfs_done;
+       }
+       idev->clients_debug_root = debugfs_create_dir("clients",
+                                               idev->debug_root);
+       if (!idev->clients_debug_root)
+               pr_err("ion: failed to create debugfs clients directory.\n");
+
+debugfs_done:
 
        idev->custom_ioctl = custom_ioctl;
        idev->buffers = RB_ROOT;
 void ion_device_destroy(struct ion_device *dev)
 {
        misc_deregister(&dev->dev);
+       debugfs_remove_recursive(dev->debug_root);
        /* XXX need to free the heaps and clients ? */
        kfree(dev);
 }