summaryrefslogtreecommitdiff
path: root/cmd_format.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2017-12-29 21:14:51 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2017-12-29 21:15:47 -0500
commitdbad1685bc2d3bad50c5e161b78d2b8fb9f4d8aa (patch)
treeeb3127084883e6816c5b8e9218c26647634c3af8 /cmd_format.c
parent88242ec7a3acb99a99fe184bbe3c51ab9a620916 (diff)
show-super can now print more stuff
Diffstat (limited to 'cmd_format.c')
-rw-r--r--cmd_format.c59
1 files changed, 51 insertions, 8 deletions
diff --git a/cmd_format.c b/cmd_format.c
index b22fe946..47617660 100644
--- a/cmd_format.c
+++ b/cmd_format.c
@@ -269,7 +269,7 @@ int cmd_format(int argc, char *argv[])
bch2_format(opts, devices.item, darray_size(devices));
if (!quiet)
- bch2_super_print(sb, HUMAN_READABLE);
+ bch2_sb_print(sb, false, 1 << BCH_SB_FIELD_members, HUMAN_READABLE);
free(sb);
if (opts.passphrase) {
@@ -280,18 +280,61 @@ int cmd_format(int argc, char *argv[])
return 0;
}
+static void show_super_usage(void)
+{
+ puts("bcachefs show-super \n"
+ "Usage: bcachefs show-super [OPTION].. device\n"
+ "\n"
+ "Options:\n"
+ " -f, --fields=(fields) list of sections to print\n"
+ " -l, --layout print superblock layout\n"
+ " -h, --help display this help and exit\n"
+ "Report bugs to <linux-bcache@vger.kernel.org>");
+ exit(EXIT_SUCCESS);
+}
+
int cmd_show_super(int argc, char *argv[])
{
- struct bch_sb_handle sb;
- const char *err;
+ static const struct option longopts[] = {
+ { "fields", 1, NULL, 'f' },
+ { "layout", 0, NULL, 'l' },
+ { "help", 0, NULL, 'h' },
+ { NULL }
+ };
+ unsigned fields = 1 << BCH_SB_FIELD_members;
+ bool print_layout = false;
+ int opt;
- if (argc != 2)
- die("please supply a single device");
+ while ((opt = getopt_long(argc, argv, "f:lh", longopts, NULL)) != -1)
+ switch (opt) {
+ case 'f':
+ fields = !strcmp(optarg, "all")
+ ? ~0
+ : read_flag_list_or_die(optarg,
+ bch2_sb_fields, "superblock field");
+ break;
+ case 'l':
+ print_layout = true;
+ break;
+ case 'h':
+ show_super_usage();
+ break;
+ }
+ args_shift(optind);
+
+ char *dev = arg_pop();
+ if (!dev)
+ die("please supply a device");
+ if (argc)
+ die("too many arguments");
- err = bch2_read_super(argv[1], bch2_opts_empty(), &sb);
+ const char *err;
+ struct bch_sb_handle sb;
+ err = bch2_read_super(dev, bch2_opts_empty(), &sb);
if (err)
- die("Error opening %s: %s", argv[1], err);
+ die("Error opening %s: %s", dev, err);
- bch2_super_print(sb.sb, HUMAN_READABLE);
+ bch2_sb_print(sb.sb, print_layout, fields, HUMAN_READABLE);
+ bch2_free_super(&sb);
return 0;
}