diff options
author | Qu Wenruo <quwenruo@cn.fujitsu.com> | 2015-01-16 11:22:28 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2015-02-11 17:19:30 +0100 |
commit | abf010e593cec271a632b746c031a1bf206f7769 (patch) | |
tree | 8922b0e19fdc069e32635efafdbdafc44ef4d708 | |
parent | 0c05f623b13f93105163535f016fc049fa04dbb6 (diff) |
btrfs-progs: Add new btrfs_open_ctree_flags CHUNK_ONLY
Add new flag CHUNK_ONLY and internal used only flag __RETURN_CHUNK.
CHUNK_ONLY will imply __RETURN_CHUNK, SUPPRESS_ERROR and PARTIAL, which
will allow the fs to be opened with only chunk tree OK.
This will improve the usability for btrfs-find-root.
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
-rw-r--r-- | disk-io.c | 6 | ||||
-rw-r--r-- | disk-io.h | 12 |
2 files changed, 16 insertions, 2 deletions
@@ -1197,7 +1197,7 @@ static struct btrfs_fs_info *__open_ctree_fd(int fp, const char *path, BTRFS_UUID_SIZE); ret = btrfs_setup_all_roots(fs_info, root_tree_bytenr, flags); - if (ret) + if (ret && !(flags & __OPEN_CTREEE_RETURN_CHUNK_ROOT)) goto out_chunk; return fs_info; @@ -1242,6 +1242,8 @@ struct btrfs_root *open_ctree(const char *filename, u64 sb_bytenr, info = open_ctree_fs_info(filename, sb_bytenr, 0, flags); if (!info) return NULL; + if (flags & __OPEN_CTREEE_RETURN_CHUNK_ROOT) + return info->chunk_root; return info->fs_root; } @@ -1252,6 +1254,8 @@ struct btrfs_root *open_ctree_fd(int fp, const char *path, u64 sb_bytenr, info = __open_ctree_fd(fp, path, sb_bytenr, 0, flags); if (!info) return NULL; + if (flags & __OPEN_CTREEE_RETURN_CHUNK_ROOT) + return info->chunk_root; return info->fs_root; } @@ -38,7 +38,17 @@ enum btrfs_open_ctree_flags { * Don't print error messages if bytenr or checksums do not match in * tree block headers. Turn on by OPEN_CTREE_SUPPRESS_ERROR */ - OPEN_CTREE_SUPPRESS_CHECK_BLOCK_ERRORS = (1 << 8) + OPEN_CTREE_SUPPRESS_CHECK_BLOCK_ERRORS = (1 << 8), + /* Return chunk root */ + __OPEN_CTREEE_RETURN_CHUNK_ROOT = (1 << 9), + OPEN_CTREE_CHUNK_ROOT_ONLY = OPEN_CTREE_PARTIAL + + OPEN_CTREE_SUPPRESS_CHECK_BLOCK_ERRORS + + __OPEN_CTREEE_RETURN_CHUNK_ROOT, + /* + * TODO: cleanup: Split the open_ctree_flags into more indepent + * tree bits. + * Like split PARTIAL into SKIP_CSUM/SKIP_EXTENT + */ }; static inline u64 btrfs_sb_offset(int mirror) |