diff options
Diffstat (limited to 'libbcachefs/inode.c')
-rw-r--r-- | libbcachefs/inode.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libbcachefs/inode.c b/libbcachefs/inode.c index 1a0d2608..a91465ef 100644 --- a/libbcachefs/inode.c +++ b/libbcachefs/inode.c @@ -733,7 +733,6 @@ static int bch2_inode_delete_keys(struct btree_trans *trans, * iterator: */ bch2_trans_iter_init(trans, &iter, id, POS(inum.inum, 0), - BTREE_ITER_NOT_EXTENTS| BTREE_ITER_INTENT); while (1) { @@ -756,6 +755,14 @@ 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, k.k->p.offset - iter.pos.offset); + + ret = bch2_extent_trim_atomic(trans, &iter, &delete); + if (ret) + goto err; + } + ret = bch2_trans_update(trans, &iter, &delete, 0) ?: bch2_trans_commit(trans, NULL, NULL, BTREE_INSERT_NOFAIL); |