diff options
author | Johannes Thumshirn <johannes.thumshirn@wdc.com> | 2025-01-13 22:31:46 +0300 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2025-01-14 17:49:10 +0300 |
commit | 50cae2ca69561cbd9a90308ad2a14a442d230662 (patch) | |
tree | 88f449070ba406f33c4b5765f86540b5f911d461 /fs/btrfs | |
parent | a678543e609dfb145f0498f895bee05bbc7994a5 (diff) | |
download | linux-50cae2ca69561cbd9a90308ad2a14a442d230662.tar.xz |
btrfs: fix tail delete of RAID stripe-extents
Fix tail delete of RAID stripe-extents, if there is a range to be deleted
as well after the tail delete of the extent.
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/raid-stripe-tree.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/fs/btrfs/raid-stripe-tree.c b/fs/btrfs/raid-stripe-tree.c index 9e559ad48810..ef76202c3a38 100644 --- a/fs/btrfs/raid-stripe-tree.c +++ b/fs/btrfs/raid-stripe-tree.c @@ -119,11 +119,18 @@ int btrfs_delete_raid_extent(struct btrfs_trans_handle *trans, u64 start, u64 le * length to the new size and then re-insert the item. */ if (found_start < start) { - u64 diff = start - found_start; + u64 diff_start = start - found_start; btrfs_partially_delete_raid_extent(trans, path, &key, - diff, 0); - break; + diff_start, 0); + + start += (key.offset - diff_start); + length -= (key.offset - diff_start); + if (length == 0) + break; + + btrfs_release_path(path); + continue; } /* |