btrfs-progs: separate command and implementation of chunk-recover code
The command has been moved and we should rename the files accordingly, so the entry point is now in cmds-rescue.c and the core functionality in it's own file. Return codes of btrfs_recover_chunk_tree have been simplified not to require a define and another file for defintion. CC: Miao Xie <miaox@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
parent
6ed613854d
commit
e9270f6209
3 changed files with 1808 additions and 1 deletions
2
Makefile
2
Makefile
|
@ -13,7 +13,7 @@ objects = ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o \
|
|||
cmds_objects = cmds-subvolume.o cmds-filesystem.o cmds-device.o cmds-scrub.o \
|
||||
cmds-inspect.o cmds-balance.o cmds-send.o cmds-receive.o \
|
||||
cmds-quota.o cmds-qgroup.o cmds-replace.o cmds-check.o \
|
||||
cmds-restore.o cmds-chunk.o cmds-rescue.o
|
||||
cmds-restore.o cmds-rescue.o chunk-recover.o
|
||||
libbtrfs_objects = send-stream.o send-utils.o rbtree.o btrfs-list.o crc32c.o \
|
||||
uuid-tree.o
|
||||
libbtrfs_headers = send-stream.h send-utils.h send.h rbtree.h btrfs-list.h \
|
||||
|
|
1745
chunk-recover.c
Normal file
1745
chunk-recover.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -18,13 +18,75 @@
|
|||
|
||||
#include "kerncompat.h"
|
||||
|
||||
#include <getopt.h>
|
||||
#include "commands.h"
|
||||
#include "utils.h"
|
||||
|
||||
static const char * const rescue_cmd_group_usage[] = {
|
||||
"btrfs rescue <command> [options] <path>",
|
||||
NULL
|
||||
};
|
||||
|
||||
int btrfs_recover_chunk_tree(char *path, int verbose, int yes);
|
||||
|
||||
const char * const cmd_chunk_recover_usage[] = {
|
||||
"btrfs rescue chunk-recover [options] <device>",
|
||||
"Recover the chunk tree by scanning the devices one by one.",
|
||||
"",
|
||||
"-y Assume an answer of `yes' to all questions",
|
||||
"-v Verbose mode",
|
||||
"-h Help",
|
||||
NULL
|
||||
};
|
||||
|
||||
int cmd_chunk_recover(int argc, char *argv[])
|
||||
{
|
||||
int ret = 0;
|
||||
char *file;
|
||||
int yes = 0;
|
||||
int verbose = 0;
|
||||
|
||||
while (1) {
|
||||
int c = getopt(argc, argv, "yvh");
|
||||
if (c < 0)
|
||||
break;
|
||||
switch (c) {
|
||||
case 'y':
|
||||
yes = 1;
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
case 'h':
|
||||
default:
|
||||
usage(cmd_chunk_recover_usage);
|
||||
}
|
||||
}
|
||||
|
||||
argc = argc - optind;
|
||||
if (argc == 0)
|
||||
usage(cmd_chunk_recover_usage);
|
||||
|
||||
file = argv[optind];
|
||||
|
||||
ret = check_mounted(file);
|
||||
if (ret) {
|
||||
fprintf(stderr, "the device is busy\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = btrfs_recover_chunk_tree(file, verbose, yes);
|
||||
if (!ret) {
|
||||
fprintf(stdout, "Recover the chunk tree successfully.\n");
|
||||
} else if (ret > 0) {
|
||||
ret = 0;
|
||||
fprintf(stdout, "Abort to rebuild the on-disk chunk tree.\n");
|
||||
} else {
|
||||
fprintf(stdout, "Fail to recover the chunk tree.\n");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
const struct cmd_group rescue_cmd_group = {
|
||||
rescue_cmd_group_usage, NULL, {
|
||||
{ "chunk-recover", cmd_chunk_recover, cmd_chunk_recover_usage, NULL, 0},
|
||||
|
|
Loading…
Reference in a new issue