KEY_TYPE_QUOTA_WARN);
                bch2_quota_acct(c, inode->ei_qid, Q_INO, -1,
                                KEY_TYPE_QUOTA_WARN);
-               bch2_inode_rm(c, inode->v.i_ino);
+               bch2_inode_rm(c, inode->v.i_ino, true);
        }
 }
 
 
 
                bch2_fs_lazy_rw(c);
 
-               ret = bch2_inode_rm(c, u.bi_inum);
+               ret = bch2_inode_rm(c, u.bi_inum, false);
                if (ret)
                        bch_err(c, "error in fsck: error %i while deleting inode", ret);
                return ret;
 
        return ret;
 }
 
-int bch2_inode_rm(struct bch_fs *c, u64 inode_nr)
+int bch2_inode_rm(struct bch_fs *c, u64 inode_nr, bool cached)
 {
        struct btree_trans trans;
        struct btree_iter *iter;
 
        bi_generation = 0;
 
-       iter = bch2_trans_get_iter(&trans, BTREE_ID_INODES, POS(0, inode_nr),
-                                  BTREE_ITER_CACHED|BTREE_ITER_INTENT);
-       k = bch2_btree_iter_peek_cached(iter);
+       if (cached) {
+               iter = bch2_trans_get_iter(&trans, BTREE_ID_INODES, POS(0, inode_nr),
+                                          BTREE_ITER_CACHED|BTREE_ITER_INTENT);
+               k = bch2_btree_iter_peek_cached(iter);
+       } else {
+               iter = bch2_trans_get_iter(&trans, BTREE_ID_INODES, POS(0, inode_nr),
+                                          BTREE_ITER_SLOTS|BTREE_ITER_INTENT);
+               k = bch2_btree_iter_peek_slot(iter);
+       }
 
        ret = bkey_err(k);
        if (ret)
 
 
 int bch2_inode_create(struct btree_trans *, struct bch_inode_unpacked *);
 
-int bch2_inode_rm(struct bch_fs *, u64);
+int bch2_inode_rm(struct bch_fs *, u64, bool);
 
 int bch2_inode_find_by_inum_trans(struct btree_trans *, u64,
                                  struct bch_inode_unpacked *);