From 0f49c426fbd7265bdac09343e7c38f1df71ad71f Mon Sep 17 00:00:00 2001 From: Chris Mason Date: Tue, 5 Oct 2010 10:14:48 -0400 Subject: Add rescue command to zero the log Signed-off-by: Chris Mason --- Makefile | 3 +++ btrfs-zero-log.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 btrfs-zero-log.c diff --git a/Makefile b/Makefile index 5178343e..6e6f6c68 100644 --- a/Makefile +++ b/Makefile @@ -59,6 +59,9 @@ mkfs.btrfs: $(objects) mkfs.o btrfs-debug-tree: $(objects) debug-tree.o gcc $(CFLAGS) -o btrfs-debug-tree $(objects) debug-tree.o $(LDFLAGS) $(LIBS) +btrfs-zero-log: $(objects) btrfs-zero-log.o + gcc $(CFLAGS) -o btrfs-zero-log $(objects) btrfs-zero-log.o $(LDFLAGS) $(LIBS) + btrfstune: $(objects) btrfstune.o gcc $(CFLAGS) -o btrfstune $(objects) btrfstune.o $(LDFLAGS) $(LIBS) diff --git a/btrfs-zero-log.c b/btrfs-zero-log.c new file mode 100644 index 00000000..f10438be --- /dev/null +++ b/btrfs-zero-log.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2007 Oracle. 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 +#include +#include +#include +#include +#include "kerncompat.h" +#include "ctree.h" +#include "disk-io.h" +#include "print-tree.h" +#include "transaction.h" +#include "list.h" +#include "version.h" +#include "utils.h" + +static void print_usage(void) +{ + fprintf(stderr, "usage: btrfs-zero-log dev\n"); + fprintf(stderr, "%s\n", BTRFS_BUILD_VERSION); + exit(1); +} + +int main(int ac, char **av) +{ + struct btrfs_root *root; + int ret; + + if (ac != 2) + print_usage(); + + radix_tree_init(); + + if((ret = check_mounted(av[1])) < 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[1]); + return -EBUSY; + } + + root = open_ctree(av[1], 0, 1); + + if (root == NULL) + return 1; + + btrfs_set_super_log_root(&root->fs_info->super_copy, 0); + btrfs_set_super_log_root_level(&root->fs_info->super_copy, 0); + close_ctree(root); + return ret; +} -- cgit v1.2.3