Btrfs-progs: add btrfsck functionality to btrfs

This patch includes the functionality of btrfs, it's
found as "btrfs check".

Signed-off-by: Ian Kumlien <pomac@demius.net>
Signed-off-by: David Sterba <dsterba@suse.cz>
This commit is contained in:
Ian Kumlien 2013-02-08 01:36:58 +01:00 committed by David Sterba
parent fac45410e9
commit 5956f752c6
4 changed files with 29 additions and 23 deletions

View File

@ -8,7 +8,7 @@ objects = ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o \
send-stream.o send-utils.o qgroup.o raid6.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-quota.o cmds-qgroup.o cmds-replace.o cmds-check.o
CHECKFLAGS= -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise \
-Wuninitialized -Wshadow -Wundef
@ -35,7 +35,7 @@ endif
MAKEOPTS = --no-print-directory Q=$(Q)
progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol btrfsck \
progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol \
btrfs btrfs-map-logical btrfs-image btrfs-zero-log btrfs-convert \
btrfs-find-root btrfs-restore btrfstune btrfs-show-super
@ -110,10 +110,6 @@ btrfs-show: $(objects) btrfs-show.o
@echo " [LD] $@"
$(Q)$(CC) $(CFLAGS) -o btrfs-show btrfs-show.o $(objects) $(LDFLAGS) $(LIBS)
btrfsck: $(objects) btrfsck.o
@echo " [LD] $@"
$(Q)$(CC) $(CFLAGS) -o btrfsck btrfsck.o $(objects) $(LDFLAGS) $(LIBS)
mkfs.btrfs: $(objects) mkfs.o
@echo " [LD] $@"
$(Q)$(CC) $(CFLAGS) -o mkfs.btrfs $(objects) mkfs.o $(LDFLAGS) $(LIBS) -lblkid

View File

@ -246,6 +246,7 @@ const struct cmd_group btrfs_cmd_group = {
{ "balance", cmd_balance, NULL, &balance_cmd_group, 0 },
{ "device", cmd_device, NULL, &device_cmd_group, 0 },
{ "scrub", cmd_scrub, NULL, &scrub_cmd_group, 0 },
{ "check", cmd_check, cmd_check_usage, NULL, 0 },
{ "inspect-internal", cmd_inspect, NULL, &inspect_cmd_group, 0 },
{ "send", cmd_send, cmd_send_usage, NULL, 0 },
{ "receive", cmd_receive, cmd_receive_usage, NULL, 0 },

View File

@ -37,6 +37,7 @@
#include "list.h"
#include "version.h"
#include "utils.h"
#include "commands.h"
static u64 bytes_used = 0;
static u64 total_csum_bytes = 0;
@ -3529,13 +3530,6 @@ static int check_extents(struct btrfs_trans_handle *trans,
return ret;
}
static void print_usage(void)
{
fprintf(stderr, "usage: btrfsck dev\n");
fprintf(stderr, "%s\n", BTRFS_BUILD_VERSION);
exit(1);
}
static struct option long_options[] = {
{ "super", 1, NULL, 's' },
{ "repair", 0, NULL, 0 },
@ -3544,7 +3538,18 @@ static struct option long_options[] = {
{ 0, 0, 0, 0}
};
int main(int ac, char **av)
const char * const cmd_check_usage[] = {
"btrfs check [options] <device>",
"Check an unmounted btrfs filesystem.",
"",
"-s|--super <superblock> use this superblock copy",
"--repair try to repair the filesystem",
"--init-csum-tree create a new CRC tree",
"--init-extent-tree create a new extent tree",
NULL
};
int cmd_check(int argc, char **argv)
{
struct cache_tree root_cache;
struct btrfs_root *root;
@ -3561,7 +3566,7 @@ int main(int ac, char **av)
while(1) {
int c;
c = getopt_long(ac, av, "as:", long_options,
c = getopt_long(argc, argv, "as:", long_options,
&option_index);
if (c < 0)
break;
@ -3574,7 +3579,8 @@ int main(int ac, char **av)
(unsigned long long)bytenr);
break;
case '?':
print_usage();
case 'h':
usage(cmd_check_usage);
}
if (option_index == 1) {
printf("enabling repair mode\n");
@ -3587,25 +3593,25 @@ int main(int ac, char **av)
}
}
ac = ac - optind;
argc = argc - optind;
if (ac != 1)
print_usage();
if (argc != 1)
usage(cmd_check_usage);
radix_tree_init();
cache_tree_init(&root_cache);
if((ret = check_mounted(av[optind])) < 0) {
if((ret = check_mounted(argv[optind])) < 0) {
fprintf(stderr, "Could not check mount status: %s\n", strerror(-ret));
return ret;
} else if(ret) {
fprintf(stderr, "%s is currently mounted. Aborting.\n", av[optind]);
fprintf(stderr, "%s is currently mounted. Aborting.\n", argv[optind]);
return -EBUSY;
}
info = open_ctree_fs_info(av[optind], bytenr, rw, 1);
info = open_ctree_fs_info(argv[optind], bytenr, rw, 1);
uuid_unparse(info->super_copy.fsid, uuidbuf);
printf("Checking filesystem on %s\nUUID: %s\n", av[optind], uuidbuf);
printf("Checking filesystem on %s\nUUID: %s\n", argv[optind], uuidbuf);
if (info == NULL)
return 1;

View File

@ -94,11 +94,14 @@ extern const struct cmd_group replace_cmd_group;
extern const char * const cmd_send_usage[];
extern const char * const cmd_receive_usage[];
extern const char * const cmd_check_usage[];
int cmd_subvolume(int argc, char **argv);
int cmd_filesystem(int argc, char **argv);
int cmd_balance(int argc, char **argv);
int cmd_device(int argc, char **argv);
int cmd_scrub(int argc, char **argv);
int cmd_check(int argc, char **argv);
int cmd_inspect(int argc, char **argv);
int cmd_send(int argc, char **argv);
int cmd_receive(int argc, char **argv);