btrfs: simplify fsid and metadata_uuid comparisons
Refactor the functions find_fsid() and find_fsid_with_metadata_uuid(), as they currently share a common set of code to compare the fsid and metadata_uuid. Create a common helper function, match_fsid_fs_devices(). Signed-off-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
413fb1bc1d
commit
1a89834500
@ -427,6 +427,21 @@ void __exit btrfs_cleanup_fs_uuids(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool match_fsid_fs_devices(const struct btrfs_fs_devices *fs_devices,
|
||||||
|
const u8 *fsid, const u8 *metadata_fsid)
|
||||||
|
{
|
||||||
|
if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!metadata_fsid)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (memcmp(metadata_fsid, fs_devices->metadata_uuid, BTRFS_FSID_SIZE) != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static noinline struct btrfs_fs_devices *find_fsid(
|
static noinline struct btrfs_fs_devices *find_fsid(
|
||||||
const u8 *fsid, const u8 *metadata_fsid)
|
const u8 *fsid, const u8 *metadata_fsid)
|
||||||
{
|
{
|
||||||
@ -436,15 +451,8 @@ static noinline struct btrfs_fs_devices *find_fsid(
|
|||||||
|
|
||||||
/* Handle non-split brain cases */
|
/* Handle non-split brain cases */
|
||||||
list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
|
list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
|
||||||
if (metadata_fsid) {
|
if (match_fsid_fs_devices(fs_devices, fsid, metadata_fsid))
|
||||||
if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0
|
return fs_devices;
|
||||||
&& memcmp(metadata_fsid, fs_devices->metadata_uuid,
|
|
||||||
BTRFS_FSID_SIZE) == 0)
|
|
||||||
return fs_devices;
|
|
||||||
} else {
|
|
||||||
if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0)
|
|
||||||
return fs_devices;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -462,14 +470,14 @@ static struct btrfs_fs_devices *find_fsid_with_metadata_uuid(
|
|||||||
* at all and the CHANGING_FSID_V2 flag set.
|
* at all and the CHANGING_FSID_V2 flag set.
|
||||||
*/
|
*/
|
||||||
list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
|
list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
|
||||||
if (fs_devices->fsid_change &&
|
if (!fs_devices->fsid_change)
|
||||||
memcmp(disk_super->metadata_uuid, fs_devices->fsid,
|
continue;
|
||||||
BTRFS_FSID_SIZE) == 0 &&
|
|
||||||
memcmp(fs_devices->fsid, fs_devices->metadata_uuid,
|
if (match_fsid_fs_devices(fs_devices, disk_super->metadata_uuid,
|
||||||
BTRFS_FSID_SIZE) == 0) {
|
fs_devices->fsid))
|
||||||
return fs_devices;
|
return fs_devices;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle scanned device having completed its fsid change but
|
* Handle scanned device having completed its fsid change but
|
||||||
* belonging to a fs_devices that was created by a device that
|
* belonging to a fs_devices that was created by a device that
|
||||||
|
Loading…
Reference in New Issue
Block a user