Message ID | 20250107-rst-delete-fixes-v2-0-0c7b14c0aac2@kernel.org (mailing list archive) |
---|---|
Headers | show |
Series | btrfs: more RST delete fixes | expand |
On Tue, Jan 07, 2025 at 01:47:30PM +0100, Johannes Thumshirn wrote: > Here's another set of fixes for the delete path on RAID stripe-tree backed > filesystems. > > Josef's CI system started tripping over a bad key order due to the usage > of btrfs_set_item_key_safe() in btrfs_partially_delete_raid_extent() and > while investigating what is happening there I found more bugs and not > handled corner cases, which resulted in more fixes and test-cases. > > Unfortunately I couldn't fix the bad key order problem and had to resort > to re-creating the item in btrfs_partially_delete_raid_extent() and insert > the new one after deleting the old. > > Fstests btrfs/06* are extremely good in exhibiting these failures and > btrfs/060 has been extensively run while developing this series. > > A full CI run of v1 can be found here: > https://github.com/btrfs/linux/actions/runs/12291668397 > > Changes to v1: > - Handle extent_map lookup failure in 1/14 > - Don't use key.offset = -1 for initial search in 3/14 > - Don't break before calling btrfs_previous_item if we're on slot 0 in > 6/14 > - Remove btrfs_mark_buffer_dirty calls > - Remove line breaks at 80 chars if we're just a bit over > - Fix multiple issues on comment styling > > Link to v1: > https://lore.kernel.org/linux-btrfs/cover.1733989299.git.jth@kernel.org > > Note: > I did not copy the implementation of btrfs_drop_extents() as I'd like to > have feedback on this variant first, before putting the time and energy in > a "completely new" implementation. > > --- > Johannes Thumshirn (14): > btrfs: don't try to delete RAID stripe-extents if we don't need to > btrfs: assert RAID stripe-extent length is always greater than 0 > btrfs: fix search when deleting a RAID stripe-extent > btrfs: fix front delete range calculation for RAID stripe extents > btrfs: fix tail delete of RAID stripe-extents > btrfs: fix deletion of a range spanning parts two RAID stripe extents > btrfs: implement hole punching for RAID stripe extents > btrfs: don't use btrfs_set_item_key_safe on RAID stripe-extents > btrfs: selftests: check for correct return value of failed lookup > btrfs: selftests: don't split RAID extents in half > btrfs: selftests: test RAID stripe-tree deletion spanning two items > btrfs: selftests: add selftest for punching holes into the RAID stripe extents > btrfs: selftests: add test for punching a hole into 3 RAID stripe-extents > btrfs: selftests: add a selftest for deleting two out of three extents > > fs/btrfs/ctree.c | 1 + > fs/btrfs/raid-stripe-tree.c | 146 ++++++- > fs/btrfs/tests/raid-stripe-tree-tests.c | 660 +++++++++++++++++++++++++++++++- > 3 files changed, 776 insertions(+), 31 deletions(-) As this is completely in RST I'm considering it safe for late merge (ideally by the end of this week before rc7 is out).