]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/inode.c
Update bcachefs sources to 7bf1ac0d46 bcachefs: Correctly initialize new buckets...
[bcachefs-tools-debian] / libbcachefs / inode.c
index 4a695a8e7a3bdbdd7ac0fbe931c41c9506c8e648..bb3f443d8381cc1dd087e961a593a989146e6014 100644 (file)
@@ -780,6 +780,7 @@ static int bch2_inode_delete_keys(struct btree_trans *trans,
        struct btree_iter iter;
        struct bkey_s_c k;
        struct bkey_i delete;
+       struct bpos end = POS(inum.inum, U64_MAX);
        u32 snapshot;
        int ret = 0;
 
@@ -788,7 +789,7 @@ static int bch2_inode_delete_keys(struct btree_trans *trans,
         * extent iterator:
         */
        bch2_trans_iter_init(trans, &iter, id, POS(inum.inum, 0),
-                            BTREE_ITER_INTENT|BTREE_ITER_NOT_EXTENTS);
+                            BTREE_ITER_INTENT);
 
        while (1) {
                bch2_trans_begin(trans);
@@ -799,7 +800,7 @@ static int bch2_inode_delete_keys(struct btree_trans *trans,
 
                bch2_btree_iter_set_snapshot(&iter, snapshot);
 
-               k = bch2_btree_iter_peek_upto(&iter, POS(inum.inum, U64_MAX));
+               k = bch2_btree_iter_peek_upto(&iter, end);
                ret = bkey_err(k);
                if (ret)
                        goto err;
@@ -810,6 +811,11 @@ static int bch2_inode_delete_keys(struct btree_trans *trans,
                bkey_init(&delete.k);
                delete.k.p = iter.pos;
 
+               if (iter.flags & BTREE_ITER_IS_EXTENTS)
+                       bch2_key_resize(&delete.k,
+                                       bpos_min(end, k.k->p).offset -
+                                       iter.pos.offset);
+
                ret = bch2_trans_update(trans, &iter, &delete, 0) ?:
                      bch2_trans_commit(trans, NULL, NULL,
                                        BTREE_INSERT_NOFAIL);