mbox series

[0/8,v2] relocation error handling fixes

Message ID 20200304161830.2360-1-josef@toxicpanda.com (mailing list archive)
Headers show
Series relocation error handling fixes | expand

Message

Josef Bacik March 4, 2020, 4:18 p.m. UTC
v1->v2:
- Incorporated the various feedback, tweaked some things, adjusted commit
  messages, added some more comments.  Hopefully I got everything.
- Added "btrfs: do not init a reloc root if we aren't relocating", this is to
  oddress the weird handling of DEAD_ROOT and the use-after-free that Qu had
  originally attempted to fix.
- Reworked "btrfs: splice rc->reloc_roots onto reloc roots in recover" to simply
  handle cleaning up any remaining bigs on the reloc_control, since errors can
  mean we'll have some things left pending on the reloc_control.

------------------------------ Original email ---------------------------------
My root ref patches have uncovered weird failures in some of our xfstests,
particularly those that do balance while having errors.

I ran relocation through my eio-stress bpf script and loads of things fell out,
these are the fixes required to make the stress test run to completion.

Dave this is just based on my master, I assume it'll apply cleanly to what you
have, but if not let me know which branch you want me to rebase onto to get it
to work right.

Most of these are straightforward, the only tricky/subtle one is 7/7, and I've
added a lot of explanation there around my reasoning.  6/7 is also a little bit
more complicated as it changes the rules slightly for reference holding for
roots.  Before we just sort of hoped and prayed we go the right reference
dropped when we dropped root->reloc_root.  Now we hold one ref for the list of
reloc roots and one ref for root->reloc_root, so it's more clear when we need to
be dropping references.  Everything else is relatively straightforward.  Thanks,

Josef

Comments

David Sterba March 13, 2020, 2:35 p.m. UTC | #1
On Wed, Mar 04, 2020 at 11:18:22AM -0500, Josef Bacik wrote:
> v1->v2:
> - Incorporated the various feedback, tweaked some things, adjusted commit
>   messages, added some more comments.  Hopefully I got everything.
> - Added "btrfs: do not init a reloc root if we aren't relocating", this is to
>   oddress the weird handling of DEAD_ROOT and the use-after-free that Qu had
>   originally attempted to fix.
> - Reworked "btrfs: splice rc->reloc_roots onto reloc roots in recover" to simply
>   handle cleaning up any remaining bigs on the reloc_control, since errors can
>   mean we'll have some things left pending on the reloc_control.

I've merged the reviewed patches to misc-next, but there are still
comments to 4 and 6, while 7, 8 could be fine as-is, at least 7 depends
on 6 so it might need changes too.

This the last batch of fixes I want to get in before merging the root
refs part 2. Both are in for-next so we have some testing coverage, but
the changelog for patch 6 is really insufficient.