linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ian Kumlien <pomac@demius.net>
To: linux-btrfs@vger.kernel.org
Cc: Ian Kumlien <pomac@demius.net>
Subject: [PATCH 6/6] Btrfs-progs: add the rescue section to btrfs
Date: Fri,  8 Feb 2013 01:37:02 +0100	[thread overview]
Message-ID: <1360283822-23452-7-git-send-email-pomac@demius.net> (raw)
In-Reply-To: <1360283822-23452-1-git-send-email-pomac@demius.net>

the btrfs command now lists:
    btrfs rescue select-super -s <number> <device>
        Select a superblock
    btrfs rescue dump-super <device>
        Dump a superblock to disk
    btrfs rescue debug-tree [options] <device>
        Debug the filesystem

btrfs-dump-super.c was imported in to cmds-rescue-super-ops.c

This patch integrates all the functionality...

cmds-rescue.c is used to glue cmds-rescue-debug-tree.c,
cmds-rescue-restore.c and cmds-rescue-super-ops.c together to
make the source files more managable.

Signed-off-by: Ian Kumlien <pomac@demius.net>
---
 Makefile                 |  34 +++++-----------
 btrfs-dump-super.c       |  87 ---------------------------------------
 btrfs.c                  |   2 +
 cmds-rescue-debug-tree.c |  44 ++++++++++----------
 cmds-rescue-super-ops.c  | 103 +++++++++++++++++++++++++++++++++++++----------
 cmds-rescue.c            |  48 ++++++++++++++++++++++
 cmds-restore.c           |  42 +++++++++++--------
 commands.h               |   8 +++-
 8 files changed, 195 insertions(+), 173 deletions(-)
 delete mode 100644 btrfs-dump-super.c
 create mode 100644 cmds-rescue.c

diff --git a/Makefile b/Makefile
index 94541b2..7e2db76 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,9 @@ 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-check.o
+	       cmds-quota.o cmds-qgroup.o cmds-replace.o cmds-check.o \
+	       cmds-rescue.o cmds-rescue-super-ops.o \
+	       cmds-rescue-debug-tree.o cmds-restore.o
 
 CHECKFLAGS= -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise \
 	    -Wuninitialized -Wshadow -Wundef
@@ -17,8 +19,7 @@ DEPFLAGS = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@
 INSTALL = install
 prefix ?= /usr/local
 bindir = $(prefix)/bin
-LIBS=-luuid -lm
-RESTORE_LIBS=-lz -llzo2
+LIBS=-luuid -lm -lz -llzo2
 
 ifeq ("$(origin V)", "command line")
   BUILD_VERBOSE = $(V)
@@ -35,10 +36,9 @@ endif
 
 MAKEOPTS = --no-print-directory Q=$(Q)
 
-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 \
-	btrfs-dump-super
+progs = btrfsctl mkfs.btrfs btrfs-show btrfs-vol btrfs \
+	btrfs-map-logical btrfs-image btrfs-zero-log btrfs-convert \
+	btrfs-find-root btrfstune \
 
 # Create all the static targets
 static_objects = $(patsubst %.o, %.static.o, $(objects))
@@ -95,10 +95,6 @@ btrfs-find-root: $(objects) find-root.o
 	@echo "    [LD]     $@"
 	$(Q)$(CC) $(CFLAGS) -o btrfs-find-root find-root.o $(objects) $(LDFLAGS) $(LIBS)
 
-btrfs-restore: $(objects) restore.o
-	@echo "    [LD]     $@"
-	$(Q)$(CC) $(CFLAGS) -o btrfs-restore restore.o $(objects) $(LDFLAGS) $(LIBS) $(RESTORE_LIBS)
-
 btrfsctl: $(objects) btrfsctl.o
 	@echo "    [LD]     $@"
 	$(Q)$(CC) $(CFLAGS) -o btrfsctl btrfsctl.o $(objects) $(LDFLAGS) $(LIBS)
@@ -115,10 +111,6 @@ mkfs.btrfs: $(objects) mkfs.o
 	@echo "    [LD]     $@"
 	$(Q)$(CC) $(CFLAGS) -o mkfs.btrfs $(objects) mkfs.o $(LDFLAGS) $(LIBS) -lblkid
 
-btrfs-debug-tree: $(objects) debug-tree.o
-	@echo "    [LD]     $@"
-	$(Q)$(CC) $(CFLAGS) -o btrfs-debug-tree $(objects) debug-tree.o $(LDFLAGS) $(LIBS)
-
 btrfs-zero-log: $(objects) btrfs-zero-log.o
 	@echo "    [LD]     $@"
 	$(Q)$(CC) $(CFLAGS) -o btrfs-zero-log $(objects) btrfs-zero-log.o $(LDFLAGS) $(LIBS)
@@ -127,14 +119,6 @@ btrfs-show-super: $(objects) btrfs-show-super.o
 	@echo "    [LD]     $@"
 	$(Q)$(CC) $(CFLAGS) -o btrfs-show-super $(objects) btrfs-show-super.o $(LDFLAGS) $(LIBS)
 
-btrfs-select-super: $(objects) btrfs-select-super.o
-	@echo "    [LD]     $@"
-	$(Q)$(CC) $(CFLAGS) -o btrfs-select-super $(objects) btrfs-select-super.o $(LDFLAGS) $(LIBS)
-
-btrfs-dump-super: $(objects) btrfs-dump-super.o
-	@echo "    [LD]     $@"
-	$(Q)$(CC) $(CFLAGS) -o btrfs-dump-super $(objects) btrfs-dump-super.o $(LDFLAGS) $(LIBS)
-
 btrfstune: $(objects) btrfstune.o
 	@echo "    [LD]     $@"
 	$(Q)$(CC) $(CFLAGS) -o btrfstune $(objects) btrfstune.o $(LDFLAGS) $(LIBS)
@@ -175,8 +159,8 @@ install-man:
 
 clean :
 	@echo "Cleaning"
-	$(Q)rm -f $(progs) cscope.out *.o .*.d btrfs-convert btrfs-image btrfs-select-super \
-	      btrfs-zero-log btrfstune btrfs-dump-super dir-test ioctl-test quick-test \
+	$(Q)rm -f $(progs) cscope.out *.o .*.d btrfs-convert btrfs-image \
+	      btrfs-zero-log btrfstune dir-test ioctl-test quick-test \
 	      version.h
 	$(Q)$(MAKE) $(MAKEOPTS) -C man $@
 
diff --git a/btrfs-dump-super.c b/btrfs-dump-super.c
deleted file mode 100644
index 033140c..0000000
--- a/btrfs-dump-super.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2011 Google.  All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License v2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 021110-1307, USA.
- */
-
-#define _XOPEN_SOURCE 500
-#define _GNU_SOURCE 1
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include "kerncompat.h"
-#include "ctree.h"
-#include "disk-io.h"
-#include "version.h"
-
-static void print_usage(void)
-{
-	fprintf(stderr, "usage: btrfs-dump-super dev\n");
-	fprintf(stderr, "%s\n", BTRFS_BUILD_VERSION);
-	exit(1);
-}
-
-static int read_block(const char* filename,  u64 bytenr, struct btrfs_super_block* sb) {
-	int fd = open(filename, O_RDONLY, 0600);
-	int block_size = sizeof(struct btrfs_super_block);
-	int bytes_read = 0;
-
-	if (fd < 0) {
-		fprintf(stderr, "Could not open %s\n", filename);
-		return -1;
-	}
-
-	bytes_read = pread(fd, sb, block_size, bytenr);
-	if (bytes_read < block_size) {
-		fprintf(stderr, "Only read %d bytes of %d.\n", bytes_read, block_size);
-	}
-
-	close(fd);
-	return bytes_read;
-}
-
-int main(int ac, char **av)
-{
-	int i;
-
-	if (ac != 2)
-		print_usage();
-
-	for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
-		u64 bytenr = btrfs_sb_offset(i);
-		int fd;
-		struct btrfs_super_block sb;
-		int block_size = sizeof(struct btrfs_super_block);
-		char filename[1024];
-		int bytes_read = read_block(av[optind], bytenr, &sb);
-		if (bytes_read < block_size)
-			continue;
-
-		sprintf(filename, "/tmp/block.%s.%llu",
-			strrchr(av[optind], '/') + 1, bytenr);
-		fd = open(filename, O_CREAT|O_WRONLY, 0644);
-		if (block_size != pwrite(fd, &sb, block_size, 0)) {
-			fprintf(stderr, "Failed to dump superblock %d", i);
-			continue;
-		}
-		fprintf(stderr, "Dumped superblock %s:%d, gen %llu to %s.\n",
-			av[optind], i, sb.generation, filename);
-		close(fd);
-	}
-
-	return 0;
-}
diff --git a/btrfs.c b/btrfs.c
index cf2f320..459108d 100644
--- a/btrfs.c
+++ b/btrfs.c
@@ -261,6 +261,8 @@ const struct cmd_group btrfs_cmd_group = {
 		{ "quota", cmd_quota, NULL, &quota_cmd_group, 0 },
 		{ "qgroup", cmd_qgroup, NULL, &qgroup_cmd_group, 0 },
 		{ "replace", cmd_replace, NULL, &replace_cmd_group, 0 },
+		{ "rescue", cmd_rescue, NULL, &rescue_cmd_group, 0 },
+		{ "restore", cmd_restore, cmd_restore_usage, NULL, 0 },
 		{ "help", cmd_help, cmd_help_usage, NULL, 0 },
 		{ "version", cmd_version, cmd_version_usage, NULL, 0 },
 		{ 0, 0, 0, 0, 0 }
diff --git a/cmds-rescue-debug-tree.c b/cmds-rescue-debug-tree.c
index f6bd5d8..24703cb 100644
--- a/cmds-rescue-debug-tree.c
+++ b/cmds-rescue-debug-tree.c
@@ -27,21 +27,19 @@
 #include "print-tree.h"
 #include "transaction.h"
 #include "version.h"
+#include "commands.h"
 
-static int print_usage(void)
-{
-	fprintf(stderr, "usage: btrfs-debug-tree [ -e ] [ -d ] [ -r ] [ -R ]\n");
-	fprintf(stderr, "                        [-b block_num ] device\n");
-	fprintf(stderr, "\t-e : print detailed extents info\n");
-	fprintf(stderr, "\t-d : print info of btrfs device and root tree dirs"
-                    " only\n");
-	fprintf(stderr, "\t-r : print info of roots only\n");
-	fprintf(stderr, "\t-R : print info of roots and root backups\n");
-	fprintf(stderr, "\t-b block_num : print info of the specified block"
-                    " only\n");
-	fprintf(stderr, "%s\n", BTRFS_BUILD_VERSION);
-	exit(1);
-}
+const char * const cmd_debug_tree_usage[] = {
+	"btrfs rescue debug-tree [options] <device>",
+	"Debug the filesystem",
+	"",
+	"-e                print detailed extents info",
+	"-d                print info about btrfs device and root tree dirs",
+	"-r                print info about roots only",
+	"-R                print info about roots and root backups",
+	"-b <block_num>    print info about the specified block only",
+	NULL
+};
 
 static void print_extents(struct btrfs_root *root, struct extent_buffer *eb)
 {
@@ -109,7 +107,7 @@ static void print_old_roots(struct btrfs_super_block *super)
 	}
 }
 
-int main(int ac, char **av)
+int cmd_debug_tree(int argc, char **argv)
 {
 	struct btrfs_root *root;
 	struct btrfs_fs_info *info;
@@ -133,7 +131,7 @@ int main(int ac, char **av)
 
 	while(1) {
 		int c;
-		c = getopt(ac, av, "deb:rR");
+		c = getopt(argc, argv, "deb:rR");
 		if (c < 0)
 			break;
 		switch(c) {
@@ -154,23 +152,23 @@ int main(int ac, char **av)
 				block_only = atoll(optarg);
 				break;
 			default:
-				print_usage();
+				usage(cmd_debug_tree_usage);
 		}
 	}
-	ac = ac - optind;
-	if (ac != 1)
-		print_usage();
+	argc = argc - optind;
+	if (argc != 1)
+		usage(cmd_debug_tree_usage);
 
-	info = open_ctree_fs_info(av[optind], 0, 0, 1);
+	info = open_ctree_fs_info(argv[optind], 0, 0, 1);
 	if (!info) {
-		fprintf(stderr, "unable to open %s\n", av[optind]);
+		fprintf(stderr, "unable to open %s\n", argv[optind]);
 		exit(1);
 	}
 	root = info->fs_root;
 
 	if (block_only) {
 		if (!root) {
-			fprintf(stderr, "unable to open %s\n", av[optind]);
+			fprintf(stderr, "unable to open %s\n", argv[optind]);
 			exit(1);
 		}
 		leaf = read_tree_block(root,
diff --git a/cmds-rescue-super-ops.c b/cmds-rescue-super-ops.c
index 5eb4e6e..a5e25f6 100644
--- a/cmds-rescue-super-ops.c
+++ b/cmds-rescue-super-ops.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2007 Oracle.  All rights reserved.
+ * Copyright (C) 2011 Google.  All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public
@@ -31,17 +32,25 @@
 #include "list.h"
 #include "version.h"
 #include "utils.h"
+#include "commands.h"
 
-static void print_usage(void)
-{
-	fprintf(stderr, "usage: btrfs-select-super [-c] [-e] -s number dev\n");
-	fprintf(stderr, "       -c Commit changes to disk [IRREVERSIBLE]\n");
-	fprintf(stderr, "       -e Use the earliest super found, may help recover transid verify problems\n");
-	fprintf(stderr, "%s\n", BTRFS_BUILD_VERSION);
-	exit(1);
-}
+const char * const cmd_select_super_usage[] = {
+	"btrfs rescue select-super [options] -s <number> <device>",
+	"Select a superblock",
+	"",
+	"-s <offset>     specify superblock",
+	"-c              commit changes to disk [IRREVERSIBLE]",
+	"-e              Use the earliest super found, may help recover transid verify problems",
+	NULL
+};
 
-int main(int ac, char **av)
+const char * const cmd_dump_super_usage[] = {
+	"btrfs rescue dump-super <device>",
+	"Dump a superblock to disk",
+	NULL
+};
+
+int cmd_select_super(int argc, char **argv)
 {
 	struct btrfs_root *root;
 	int ret;
@@ -53,7 +62,7 @@ int main(int ac, char **av)
 
 	while(1) {
 		int c;
-		c = getopt(ac, av, "s:ce");
+		c = getopt(argc, argv, "s:ce");
 		if (c < 0)
 			break;
 		switch(c) {
@@ -70,35 +79,35 @@ int main(int ac, char **av)
 				use_earliest_bdev = 1;
 				break;
 			default:
-				print_usage();
+				usage(cmd_select_super_usage);
 		}
 	}
-	ac = ac - optind;
+	argc = argc - optind;
 
-	if (ac != 1)
-		print_usage();
+	if (argc != 1)
+		usage(cmd_select_super_usage);
 
 	if (bytenr == 0) {
-		fprintf(stderr, "Please select the super copy with -s\n");
-		print_usage();
+		fprintf(stderr, "Please select the superblock copy with -s\n");
+		usage(cmd_select_super_usage);
 	}
 
 	radix_tree_init();
 
-	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;
 	}
 
-	fp = open(av[optind], O_CREAT|O_RDWR, 0600);
+	fp = open(argv[optind], O_CREAT|O_RDWR, 0600);
 	if (fp < 0) {
-		fprintf(stderr, "Could not open %s\n", av[optind]);
+		fprintf(stderr, "Could not open %s\n", argv[optind]);
 		return 1;
 	}
-	root = open_ctree_fd(fp, av[optind], bytenr, 1, 0);
+	root = open_ctree_fd(fp, argv[optind], bytenr, 1, 0);
 
 	if (!root) {
 		fprintf(stderr, "Open ctree failed\n");
@@ -121,3 +130,55 @@ int main(int ac, char **av)
 	 */ 
 	return ret;
 }
+
+static int read_block(const char* filename,  u64 bytenr, struct btrfs_super_block* sb) {
+        int fd = open(filename, O_RDONLY, 0600);
+        int block_size = sizeof(struct btrfs_super_block);
+        int bytes_read = 0;
+
+        if (fd < 0) {
+                fprintf(stderr, "Could not open %s\n", filename);
+                return -1;
+        }
+
+        bytes_read = pread(fd, sb, block_size, bytenr);
+        if (bytes_read < block_size) {
+                fprintf(stderr, "Only read %d bytes of %d.\n", bytes_read, block_size);
+        }
+
+        close(fd);
+        return bytes_read;
+}
+
+int cmd_dump_super(int argc, char **argv)
+{
+        int i;
+
+        if (argc != 2)
+                usage(cmd_dump_super_usage);
+
+        for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
+                u64 bytenr = btrfs_sb_offset(i);
+                int fd;
+                struct btrfs_super_block sb;
+                int block_size = sizeof(struct btrfs_super_block);
+                char filename[1024];
+                int bytes_read = read_block(argv[optind], bytenr, &sb);
+                if (bytes_read < block_size)
+                        continue;
+
+                sprintf(filename, "/tmp/block.%s.%llu",
+                        strrchr(argv[optind], '/') + 1, bytenr);
+                fd = open(filename, O_CREAT|O_WRONLY, 0644);
+                if (block_size != pwrite(fd, &sb, block_size, 0)) {
+                        fprintf(stderr, "Failed to dump superblock %d", i);
+                        continue;
+                }
+                fprintf(stderr, "Dumped superblock %s:%d, gen %llu to %s.\n",
+                        argv[optind], i, sb.generation, filename);
+                close(fd);
+        }
+
+        return 0;
+}
+
diff --git a/cmds-rescue.c b/cmds-rescue.c
new file mode 100644
index 0000000..d3e0bd4
--- /dev/null
+++ b/cmds-rescue.c
@@ -0,0 +1,48 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License v2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 021110-1307, USA.
+ */
+
+#include <stdio.h>
+#include "commands.h"
+
+static const char * const rescue_cmd_group_usage[] = {
+	"btrfs rescue <command> [<args>]",
+	NULL
+};
+
+extern const char * const cmd_restore_usage[];
+extern const char * const cmd_select_super_usage[];
+extern const char * const cmd_dump_super_usage[];
+extern const char * const cmd_debug_tree_usage[];
+
+int cmd_restore(int argc, char **argv);
+int cmd_select_super(int argc, char **argv);
+int cmd_dump_super(int argc, char **argv);
+int cmd_debug_tree(int argc, char **argv);
+
+const struct cmd_group rescue_cmd_group = {
+        rescue_cmd_group_usage, NULL, {
+		{ "select-super", cmd_select_super, cmd_select_super_usage, NULL, 0 },
+		{ "dump-super", cmd_dump_super, cmd_dump_super_usage, NULL, 0 },
+		{ "debug-tree", cmd_debug_tree, cmd_debug_tree_usage, NULL, 0 },
+		{ 0, 0, 0, 0, 0 },
+	}
+};
+
+int cmd_rescue(int argc, char **argv)
+{
+	return handle_command_group(&rescue_cmd_group, argc, argv);
+}
+
diff --git a/cmds-restore.c b/cmds-restore.c
index 0fe81b3..103a352 100644
--- a/cmds-restore.c
+++ b/cmds-restore.c
@@ -41,6 +41,7 @@
 #include "version.h"
 #include "volumes.h"
 #include "utils.h"
+#include "commands.h"
 
 static char fs_name[4096];
 static char path_name[4096];
@@ -775,12 +776,6 @@ next:
 	return 0;
 }
 
-static void usage()
-{
-	fprintf(stderr, "Usage: restore [-sviocl] [-t disk offset] "
-		"[-m regex] <device> <directory>\n");
-}
-
 static int do_list_roots(struct btrfs_root *root)
 {
 	struct btrfs_key key;
@@ -1004,7 +999,26 @@ out:
 	return ret;
 }
 
-int main(int argc, char **argv)
+const char * const cmd_restore_usage[] = {
+	"btrfs rescue restore [options] <device>",
+	"Restore filesystem",
+	"",
+	"-s              get snapshots",
+	"-v              verbose",
+	"-i              ignore errors",
+	"-o              overwrite",
+	"-t              tree location",
+	"-f <offset>     filesystem location",
+	"-u <block>      super mirror",
+	"-d              find dir",
+	"-r <num>        root objectid",
+	"-c              ignore case in regular expression",
+	"-m <regexp>     regular expression to match",
+	"-l              list roots",
+	NULL
+};
+
+int cmd_restore(int argc, char **argv)
 {
 	struct btrfs_root *root;
 	struct btrfs_key key;
@@ -1084,18 +1098,14 @@ int main(int argc, char **argv)
 				list_roots = 1;
 				break;
 			default:
-				usage();
-				exit(1);
+				usage(cmd_restore_usage);
 		}
 	}
 
-	if (!list_roots && optind + 1 >= argc) {
-		usage();
-		exit(1);
-	} else if (list_roots && optind >= argc) {
-		usage();
-		exit(1);
-	}
+	if (!list_roots && optind + 1 >= argc)
+		usage(cmd_restore_usage);
+	else if (list_roots && optind >= argc)
+		usage(cmd_restore_usage);
 
 	if ((ret = check_mounted(argv[optind])) < 0) {
 		fprintf(stderr, "Could not check mount status: %s\n",
diff --git a/commands.h b/commands.h
index ddb636f..06b78d1 100644
--- a/commands.h
+++ b/commands.h
@@ -90,11 +90,12 @@ extern const struct cmd_group receive_cmd_group;
 extern const struct cmd_group quota_cmd_group;
 extern const struct cmd_group qgroup_cmd_group;
 extern const struct cmd_group replace_cmd_group;
+extern const struct cmd_group rescue_cmd_group;
 
 extern const char * const cmd_send_usage[];
 extern const char * const cmd_receive_usage[];
-
 extern const char * const cmd_check_usage[];
+extern const char * const cmd_restore_usage[];
 
 int cmd_subvolume(int argc, char **argv);
 int cmd_filesystem(int argc, char **argv);
@@ -108,6 +109,11 @@ int cmd_receive(int argc, char **argv);
 int cmd_quota(int argc, char **argv);
 int cmd_qgroup(int argc, char **argv);
 int cmd_replace(int argc, char **argv);
+int cmd_restore(int argc, char **argv);
+int cmd_select_super(int argc, char **argv);
+int cmd_dump_super(int argc, char **argv);
+int cmd_debug_tree(int argc, char **argv);
+int cmd_rescue(int argc, char **argv);
 
 /* subvolume exported functions */
 int test_issubvolume(char *path);
-- 
1.8.1.2


  parent reply	other threads:[~2013-02-08  0:41 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-08  0:36 Btrfs-progs: Merge btrfs-restore, btrfsck, btrfs-select-super, btrfs-dump-super and btrfs-debug-tree in to btrfs Ian Kumlien
2013-02-08  0:36 ` [PATCH 1/6] Btrfs-progs: Rename btrfsck.c -> cmds-check.c Ian Kumlien
2013-02-08  0:36 ` [PATCH 2/6] Btrfs-progs: add btrfsck functionality to btrfs Ian Kumlien
2013-02-08 17:39   ` Goffredo Baroncelli
2013-02-08 18:17     ` Ian Kumlien
2013-02-08 23:07       ` David Sterba
2013-02-08 23:37         ` Ian Kumlien
2013-02-12 16:39   ` David Sterba
2013-02-12 17:37     ` Filipe Brandenburger
2013-02-12 18:01       ` Goffredo Baroncelli
2013-02-12 22:52         ` David Sterba
2013-02-12 23:07           ` Goffredo Baroncelli
2013-06-02 15:47   ` Dieter Ries
2013-11-13 17:13     ` David Sterba
2013-11-14  9:25       ` Ilya Dryomov
2013-11-14 12:49         ` David Sterba
2013-11-14 12:56           ` Ian Kumlien
2013-02-08  0:36 ` [PATCH 3/6] Btrfs-progs: move btrfs-select-super.c Ian Kumlien
2013-02-08  0:37 ` [PATCH 4/6] Btrfs-progs: move debug-tree.c -> cmds-rescue-debug-tree.c Ian Kumlien
2013-02-08  0:37 ` [PATCH 5/6] Btrfs-progs: restore.c -> cmds-restore.c Ian Kumlien
2013-02-08  0:37 ` Ian Kumlien [this message]
2013-02-08 17:39   ` [PATCH 6/6] Btrfs-progs: add the rescue section to btrfs Goffredo Baroncelli
2013-02-08 18:07     ` Ian Kumlien
2013-02-08 19:57   ` Ilya Dryomov
2013-02-08 20:48     ` Hugo Mills
2013-02-08 22:30   ` David Sterba
2013-02-12 15:26   ` David Sterba
2013-02-08 17:40 ` Btrfs-progs: Merge btrfs-restore, btrfsck, btrfs-select-super, btrfs-dump-super and btrfs-debug-tree in " Goffredo Baroncelli
2013-02-08 18:05   ` Ian Kumlien

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1360283822-23452-7-git-send-email-pomac@demius.net \
    --to=pomac@demius.net \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).