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:
David Sterba 2013-09-17 17:21:22 +02:00 committed by Chris Mason
parent 6ed613854d
commit e9270f6209
3 changed files with 1808 additions and 1 deletions

View file

@ -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

File diff suppressed because it is too large Load diff

View file

@ -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},