btrfs-progs: add new flag to read superblock with mismatched fsids

New flag that mimics OPEN_CTREE_IGNORE_FSID_MISMATCH but only for
reading the superblock. It should be passed around to various helpers
like scan or mount checks as they'd fail before we'd get to the final
caller that can do something useful with the filesystem.

This will be used for an interrupted 'btrfstune -u'.

Note to __open_ctree_fd: the RECOVERY mode is not compatible with that
flag

Signed-off-by: David Sterba <dsterba@suse.com>
master
David Sterba 2018-06-18 17:11:33 +02:00
parent e7e89d93c2
commit 47cbb3c9b2
2 changed files with 9 additions and 0 deletions

View File

@ -1125,6 +1125,9 @@ static struct btrfs_fs_info *__open_ctree_fd(int fp, const char *path,
if (flags & OPEN_CTREE_TEMPORARY_SUPER)
sbflags = SBREAD_TEMPORARY;
if (flags & OPEN_CTREE_IGNORE_FSID_MISMATCH)
sbflags |= SBREAD_IGNORE_FSID_MISMATCH;
ret = btrfs_scan_fs_devices(fp, path, &fs_devices, sb_bytenr, sbflags,
(flags & OPEN_CTREE_NO_DEVICES));
if (ret)

View File

@ -100,6 +100,12 @@ enum btrfs_read_sb_flags {
* SBREAD_RECOVER
*/
SBREAD_TEMPORARY = (1 << 1),
/*
* Equivalent of OPEN_CTREE_IGNORE_FSID_MISMATCH, allow to read
* superblock that has mismatched sb::fsid and sb::dev_item.fsid
*/
SBREAD_IGNORE_FSID_MISMATCH = (1 << 2),
};
/*