return -ENOMEM;
  
        read_extent_buffer(leaf, name, (unsigned long)(di + 1), name_len);
 -      btrfs_release_path(root, path);
 +      btrfs_release_path(path);
  
        inode = read_one_inode(root, location.objectid);
-       BUG_ON(!inode);
+       if (!inode) {
+               kfree(name);
+               return -EIO;
+       }
  
        ret = link_to_fixup_dir(trans, root, path, location.objectid);
        BUG_ON(ret);
                        break;
  
                ret = btrfs_del_item(trans, root, path);
-               BUG_ON(ret);
+               if (ret)
+                       goto out;
  
 -              btrfs_release_path(root, path);
 +              btrfs_release_path(path);
                inode = read_one_inode(root, key.offset);
-               BUG_ON(!inode);
+               if (!inode)
+                       return -EIO;
  
                ret = fixup_inode_link_count(trans, root, inode);
                BUG_ON(ret);
                 */
                key.offset = (u64)-1;
        }
 -      btrfs_release_path(root, path);
+       ret = 0;
+ out:
-       return 0;
 +      btrfs_release_path(path);
+       return ret;
  }
  
  
                                                     dir_key->offset,
                                                     name, name_len, 0);
                }
 -              if (!log_di || IS_ERR(log_di)) {
 +              if (IS_ERR_OR_NULL(log_di)) {
                        btrfs_dir_item_key_to_cpu(eb, di, &location);
 -                      btrfs_release_path(root, path);
 -                      btrfs_release_path(log, log_path);
 +                      btrfs_release_path(path);
 +                      btrfs_release_path(log_path);
                        inode = read_one_inode(root, location.objectid);
-                       BUG_ON(!inode);
+                       if (!inode) {
+                               kfree(name);
+                               return -EIO;
+                       }
  
                        ret = link_to_fixup_dir(trans, root,
                                                path, location.objectid);
                        break;
  
                ret = btrfs_del_item(trans, log, path);
-               BUG_ON(ret);
+               if (ret)
+                       break;
 -              btrfs_release_path(log, path);
 +              btrfs_release_path(path);
        }
 -      btrfs_release_path(log, path);
 +      btrfs_release_path(path);
        return ret;
  }