* item
  */
 static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans,
-                                     struct btrfs_root *root,
                                      struct btrfs_path *path,
                                      struct btrfs_inode *dir,
                                      struct btrfs_dir_item *di)
 {
+       struct btrfs_root *root = dir->root;
        struct inode *inode;
        char *name;
        int name_len;
        if (IS_ERR(di)) {
                return PTR_ERR(di);
        } else if (di) {
-               ret = drop_one_dir_item(trans, root, path, dir, di);
+               ret = drop_one_dir_item(trans, path, dir, di);
                if (ret)
                        return ret;
        }
        if (IS_ERR(di)) {
                return PTR_ERR(di);
        } else if (di) {
-               ret = drop_one_dir_item(trans, root, path, dir, di);
+               ret = drop_one_dir_item(trans, path, dir, di);
                if (ret)
                        return ret;
        }
        if (!exists)
                goto out;
 
-       ret = drop_one_dir_item(trans, root, path, BTRFS_I(dir), dst_di);
+       ret = drop_one_dir_item(trans, path, BTRFS_I(dir), dst_di);
        if (ret)
                goto out;