summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile8
-rw-r--r--btrfs.c1
-rw-r--r--cmds-check.c40
-rw-r--r--commands.h3
4 files changed, 29 insertions, 23 deletions
diff --git a/Makefile b/Makefile
index 9e912a28..039f0dc3 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/btrfs.c b/btrfs.c
index 7b0e50fb..1852a217 100644
--- a/btrfs.c
+++ b/btrfs.c
@@ -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 },
diff --git a/cmds-check.c b/cmds-check.c
index 71e98de5..d63e945c 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -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;
diff --git a/commands.h b/commands.h
index 33eb99a8..ddb636f7 100644
--- a/commands.h
+++ b/commands.h
@@ -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);