]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
cmd_fsck can now take colon separated devices
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 23 Dec 2023 02:29:36 +0000 (21:29 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 23 Dec 2023 04:30:55 +0000 (23:30 -0500)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
cmd_dump.c
cmd_fsck.c
cmd_kill_btree_node.c
cmd_list_journal.c
tools-util.c
tools-util.h

index f285dd66f84e00f8389747b3f7dc229e7dbf7f8f..ffdbcf49921c43ed065df683ba41783d92286b21 100644 (file)
@@ -59,7 +59,6 @@ static void dump_one_device(struct bch_fs *c, struct bch_dev *ca, int fd,
 
        /* Btree: */
        for (i = 0; i < BTREE_ID_NR; i++) {
-               const struct bch_extent_ptr *ptr;
                struct bkey_ptrs_c ptrs;
                struct btree_trans *trans = bch2_trans_get(c);
                struct btree_iter iter;
index 0c9663d3eb7f8c880a80832cbb100d17d2ae420d..3ce129f9f0dcb098a5da08df0f52ef73385d9e97 100644 (file)
@@ -90,7 +90,6 @@ int cmd_fsck(int argc, char *argv[])
                { NULL }
        };
        struct bch_opts opts = bch2_opts_empty();
-       unsigned i;
        int opt, ret = 0;
 
        opt_set(opts, degraded, true);
@@ -138,15 +137,15 @@ int cmd_fsck(int argc, char *argv[])
                exit(8);
        }
 
-       for (i = 0; i < argc; i++)
-               if (dev_mounted(argv[i]))
-                       return fsck_online(argv[i]);
+       darray_str devs = get_or_split_cmdline_devs(argc, argv);
 
-       struct bch_fs *c = bch2_fs_open(argv, argc, opts);
-       if (IS_ERR(c)) {
-               fprintf(stderr, "error opening %s: %s\n", argv[0], bch2_err_str(PTR_ERR(c)));
+       darray_for_each(devs, i)
+               if (dev_mounted(*i))
+                       return fsck_online(*i);
+
+       struct bch_fs *c = bch2_fs_open(devs.data, devs.nr, opts);
+       if (IS_ERR(c))
                exit(8);
-       }
 
        if (test_bit(BCH_FS_errors_fixed, &c->flags)) {
                fprintf(stderr, "%s: errors fixed\n", c->name);
index 21b78f1cd5cd6c1d16ec4e000fb89a45aeff8798..b0832843c35284e621ea9e1baf2664ba4b6d35ba 100644 (file)
@@ -79,15 +79,12 @@ int cmd_kill_btree_node(int argc, char *argv[])
                        continue;
 
                if (!node_index) {
-                       struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(bkey_i_to_s_c(&b->key));
-                       const struct bch_extent_ptr *ptr;
-
                        struct printbuf buf = PRINTBUF;
-
                        bch2_bkey_val_to_text(&buf, c, bkey_i_to_s_c(&b->key));
                        bch_info(c, "killing btree node %s", buf.buf);
                        printbuf_exit(&buf);
 
+                       struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(bkey_i_to_s_c(&b->key));
                        bkey_for_each_ptr(ptrs, ptr) {
                                struct bch_dev *ca = bch_dev_bkey_exists(c, ptr->dev);
 
index 5c62690c89592c424b96ebc865e83992d2669c6d..b9381ef6348ad03b829e389a8210baee109cd755 100644 (file)
@@ -263,7 +263,9 @@ int cmd_list_journal(int argc, char *argv[])
        if (!argc)
                die("Please supply device(s) to open");
 
-       struct bch_fs *c = bch2_fs_open(argv, argc, opts);
+       darray_str devs = get_or_split_cmdline_devs(argc, argv);
+
+       struct bch_fs *c = bch2_fs_open(devs.data, devs.nr, opts);
        if (IS_ERR(c))
                die("error opening %s: %s", argv[0], bch2_err_str(PTR_ERR(c)));
 
index 8e25cac8b5b1fb16267b10168074731ea7f1bb86..5f0b9ba4fd5f7c279763c3f7df9a9da1d0ca0f59 100644 (file)
@@ -650,3 +650,17 @@ struct bbpos bbpos_parse(char *buf)
        ret.pos = bpos_parse(s);
        return ret;
 }
+
+darray_str get_or_split_cmdline_devs(int argc, char *argv[])
+{
+       darray_str ret = {};
+
+       if (argc == 1) {
+               bch2_split_devs(argv[0], &ret);
+       } else {
+               for (unsigned i = 0; i < argc; i++)
+                       darray_push(&ret, strdup(argv[i]));
+       }
+
+       return ret;
+}
index 174b4e0e9eefc547b268020adbcd5360d392d9e0..563313845df3fe609ecb5b0742ea0364c8ef6e8c 100644 (file)
@@ -199,4 +199,6 @@ do {                                                                        \
 struct bpos bpos_parse(char *);
 struct bbpos bbpos_parse(char *);
 
+darray_str get_or_split_cmdline_devs(int argc, char *argv[]);
+
 #endif /* _TOOLS_UTIL_H */