Re: [PATCH 5/6] btrfs: copy fsid and metadata_uuid for pulled disk without INCOMPAT_METADATA_UUID

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 7.01.20 г. 3:31 ч., Su Yue wrote:
> On 2020/1/6 11:12 PM, Nikolay Borisov wrote:
>>
>>
>> On 12.12.19 г. 13:01 ч., damenly.su@xxxxxxxxx wrote:
>>> From: Su Yue <Damenly_Su@xxxxxxx>
>>>
>>> Since a scanned device may be the device pulled into disk without
>>> metadata_uuid feature, there may already be changing devices there.
>>> Here copy fsid and metadata_uuid for above case.
>>>
>>> Signed-off-by: Su Yue <Damenly_Su@xxxxxxx>
>>
>>
>> What does this patch fix, why is it needed? It seems to be independent
>> of the split brain fixes?
>>
> 
> Sorry for the messy and short commit log.
> It's one of the split brain fixes.
> 
> As mails I replied you earlier, the case
> is for device which succeed to sync in
> the second transaction and is without
> metadata_uuid feature. If there is fs_devices
> already scanned, the device's fsid instead of
> metadata_uuid(NULL here) should be copied into
> the fs_devices->metada_uuid field.

I figures as much as I started tackling the problem. So this must be
part of the patch which fixes aforementioned split brain scenario. I
have already developed some patches + tests. So will be sending those,
since they are very similar to what you posted originally I will retain
your SOB line.

> 
> Thanks.
> 
>>> ---
>>>   fs/btrfs/volumes.c | 11 +++++++----
>>>   1 file changed, 7 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
>>> index faf9cdd14f33..b21ab45e76a0 100644
>>> --- a/fs/btrfs/volumes.c
>>> +++ b/fs/btrfs/volumes.c
>>> @@ -964,13 +964,16 @@ static noinline struct btrfs_device
>>> *device_list_add(const char *path,
>>>        * metadata_uuid/fsid values of the fs_devices.
>>>        */
>>>       if (*new_device_added && fs_devices_found &&
>>> -        has_metadata_uuid && fs_devices->fsid_change &&
>>> +        fs_devices->fsid_change &&
>>>           found_transid > fs_devices->latest_generation) {
>>>           memcpy(fs_devices->fsid, disk_super->fsid,
>>>                  BTRFS_FSID_SIZE);
>>> -        memcpy(fs_devices->metadata_uuid,
>>> -               disk_super->metadata_uuid, BTRFS_FSID_SIZE);
>>> -
>>> +        if (has_metadata_uuid)
>>> +            memcpy(fs_devices->metadata_uuid,
>>> +                   disk_super->metadata_uuid, BTRFS_FSID_SIZE);
>>> +        else
>>> +            memcpy(fs_devices->metadata_uuid,
>>> +                   disk_super->fsid, BTRFS_FSID_SIZE);
>>>           fs_devices->fsid_change = false;
>>>       }
>>>
>>>
> 



[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux