summaryrefslogtreecommitdiff
path: root/cmds-check.c
diff options
context:
space:
mode:
authorLu Fengqi <lufq.fnst@cn.fujitsu.com>2016-03-07 12:57:41 +0800
committerDavid Sterba <dsterba@suse.com>2016-03-14 13:42:47 +0100
commit05640939ea24c609c7c2badc76ebba9ec6a4896d (patch)
tree1ee641f486db5a5767aa52d8f2603eae73451b10 /cmds-check.c
parentda3ae9c69ab4e557e625cabe8894e442def60b62 (diff)
btrfs-progs: Add new option for specify chunk root bytenr
Add new btrfsck option, '--chunk-root', to specify chunk root bytenr. And allow open_ctree_fs_info() function accept chunk_root_bytenr to override the bytenr in superblock. This will be mainly used when chunk tree corruption. Signed-off-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'cmds-check.c')
-rw-r--r--cmds-check.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/cmds-check.c b/cmds-check.c
index 8fb97712..0a48535f 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -9480,6 +9480,7 @@ const char * const cmd_check_usage[] = {
"-E|--subvol-extents <subvolid>",
" print subvolume extents and sharing state",
"-r|--tree-root <bytenr> use the given bytenr for the tree root",
+ "-c|--chunk-root <bytenr> use the given bytenr for the chunk tree root",
"-p|--progress indicate progress",
NULL
};
@@ -9492,6 +9493,7 @@ int cmd_check(int argc, char **argv)
u64 bytenr = 0;
u64 subvolid = 0;
u64 tree_root_bytenr = 0;
+ u64 chunk_root_bytenr = 0;
char uuidbuf[BTRFS_UUID_UNPARSED_SIZE];
int ret;
u64 num;
@@ -9515,11 +9517,12 @@ int cmd_check(int argc, char **argv)
{ "subvol-extents", required_argument, NULL, 'E' },
{ "qgroup-report", no_argument, NULL, 'Q' },
{ "tree-root", required_argument, NULL, 'r' },
+ { "chunk-root", required_argument, NULL, 'c' },
{ "progress", no_argument, NULL, 'p' },
{ NULL, 0, NULL, 0}
};
- c = getopt_long(argc, argv, "as:br:p", long_options, NULL);
+ c = getopt_long(argc, argv, "as:br:pc:", long_options, NULL);
if (c < 0)
break;
switch(c) {
@@ -9548,6 +9551,9 @@ int cmd_check(int argc, char **argv)
case 'r':
tree_root_bytenr = arg_strtou64(optarg);
break;
+ case 'c':
+ chunk_root_bytenr = arg_strtou64(optarg);
+ break;
case 'p':
ctx.progress_enabled = true;
break;
@@ -9611,7 +9617,7 @@ int cmd_check(int argc, char **argv)
ctree_flags |= OPEN_CTREE_PARTIAL;
info = open_ctree_fs_info(argv[optind], bytenr, tree_root_bytenr,
- ctree_flags);
+ chunk_root_bytenr, ctree_flags);
if (!info) {
fprintf(stderr, "Couldn't open file system\n");
ret = -EIO;