Here are 4 patches which fix a newly found split-brain scenario in the METADATA_UUID_INCOMPAT code. They are mostly the identical with Su's original submission but I have reworked the changelogs and some function names. Hence, I retained his authorship of the patches. First 2 patches factor out some code with the hopes of making find_fisd a bit more readable and simplifying the myriad of nested 'if' in device_list_add. Patch 3 extends find_fsid_changed to handle the case where a disk with METADATA_UUID_INCOMPAT and FSID_CHANGING_IN_PROGRESS is scanned after a disk which has successfully been switched to FSID == METADATA_UUID state and has created btrfs_fs_devices. Patch 4 handles the counterpart situation - a fully switched disk is scanned after one which has had METADATA_UUID_INCOMPAT and FSID_CHANGING_IN_PROGRESS set. This series should be applied to stable branches following 5.0 when the metadata_uuid feature got introduced. This patchset was tested with btrfs-progs' misc 034-metadata-uuid test and a full xfstest run with no regressions. I will also be sending an improvement to the test case which exercises the newly added code. btrfs: Call find_fsid from find_fsid_inprogress btrfs: Factor out metadata_uuid code from find_fsid. btrfs: Handle another split brain scenario with metadata uuid feature btrfs: Fix split-brain handling when changing FSID to metadata uuid fs/btrfs/volumes.c | 158 ++++++++++++++++++++++++++++----------------- 1 file changed, 100 insertions(+), 58 deletions(-) -- 2.17.1
