diff options
Diffstat (limited to 'c_src')
-rw-r--r-- | c_src/cmd_device.c | 12 | ||||
-rw-r--r-- | c_src/cmd_dump.c | 5 | ||||
-rw-r--r-- | c_src/cmd_format.c | 7 | ||||
-rw-r--r-- | c_src/cmd_fsck.c | 8 | ||||
-rw-r--r-- | c_src/cmd_key.c | 23 | ||||
-rw-r--r-- | c_src/cmd_kill_btree_node.c | 4 | ||||
-rw-r--r-- | c_src/cmd_list_journal.c | 4 | ||||
-rw-r--r-- | c_src/cmd_migrate.c | 19 | ||||
-rw-r--r-- | c_src/cmd_option.c | 4 | ||||
-rw-r--r-- | c_src/tools-util.c | 8 | ||||
-rw-r--r-- | c_src/tools-util.h | 6 |
11 files changed, 59 insertions, 41 deletions
diff --git a/c_src/cmd_device.c b/c_src/cmd_device.c index 96c25310..cb40dcea 100644 --- a/c_src/cmd_device.c +++ b/c_src/cmd_device.c @@ -515,7 +515,11 @@ static int cmd_device_resize(int argc, char *argv[]) } else { printf("Doing offline resize of %s\n", dev); - struct bch_fs *c = bch2_fs_open(&dev, 1, bch2_opts_empty()); + darray_const_str devs = {}; + darray_push(&devs, dev); + + struct bch_opts opts = bch2_opts_empty(); + struct bch_fs *c = bch2_fs_open(&devs, &opts); if (IS_ERR(c)) die("error opening %s: %s", dev, bch2_err_str(PTR_ERR(c))); @@ -612,7 +616,11 @@ static int cmd_device_resize_journal(int argc, char *argv[]) } else { printf("%s is offline - starting:\n", dev); - struct bch_fs *c = bch2_fs_open(&dev, 1, bch2_opts_empty()); + darray_const_str devs = {}; + darray_push(&devs, dev); + + struct bch_opts opts = bch2_opts_empty(); + struct bch_fs *c = bch2_fs_open(&devs, &opts); if (IS_ERR(c)) die("error opening %s: %s", dev, bch2_err_str(PTR_ERR(c))); diff --git a/c_src/cmd_dump.c b/c_src/cmd_dump.c index 7d7ceaa5..c6b813e9 100644 --- a/c_src/cmd_dump.c +++ b/c_src/cmd_dump.c @@ -147,7 +147,9 @@ int cmd_dump(int argc, char *argv[]) if (!argc) die("Please supply device(s) to check"); - struct bch_fs *c = bch2_fs_open(argv, argc, opts); + darray_const_str devs = get_or_split_cmdline_devs(argc, argv); + + struct bch_fs *c = bch2_fs_open(&devs, &opts); if (IS_ERR(c)) die("error opening devices: %s", bch2_err_str(PTR_ERR(c))); @@ -177,5 +179,6 @@ int cmd_dump(int argc, char *argv[]) up_read(&c->state_lock); bch2_fs_stop(c); + darray_exit(&devs); return 0; } diff --git a/c_src/cmd_format.c b/c_src/cmd_format.c index ac48454f..aa87feb0 100644 --- a/c_src/cmd_format.c +++ b/c_src/cmd_format.c @@ -123,7 +123,7 @@ static void build_fs(struct bch_fs *c, const char *src_path) int cmd_format(int argc, char *argv[]) { dev_opts_list devices = {}; - darray_str device_paths = {}; + darray_const_str device_paths = {}; struct format_opts opts = format_opts_default(); struct dev_opts dev_opts = dev_opts_default(); bool force = false, no_passphrase = false, quiet = false, initialize = true, verbose = false; @@ -302,9 +302,8 @@ int cmd_format(int argc, char *argv[]) * Start the filesystem once, to allocate the journal and create * the root directory: */ - struct bch_fs *c = bch2_fs_open(device_paths.data, - device_paths.nr, - bch2_opts_empty()); + struct bch_opts open_opts = bch2_opts_empty(); + struct bch_fs *c = bch2_fs_open(&device_paths, &open_opts); if (IS_ERR(c)) die("error opening %s: %s", device_paths.data[0], bch2_err_str(PTR_ERR(c))); diff --git a/c_src/cmd_fsck.c b/c_src/cmd_fsck.c index aa81fa11..e18f89c5 100644 --- a/c_src/cmd_fsck.c +++ b/c_src/cmd_fsck.c @@ -113,7 +113,7 @@ static void append_opt(struct printbuf *out, const char *opt) prt_str(out, opt); } -static bool should_use_kernel_fsck(darray_str devs) +static bool should_use_kernel_fsck(darray_const_str devs) { system("modprobe bcachefs"); @@ -131,7 +131,7 @@ static bool should_use_kernel_fsck(darray_str devs) opt_set(opts, nochanges, true); opt_set(opts, read_only, true); - struct bch_fs *c = bch2_fs_open(devs.data, devs.nr, opts); + struct bch_fs *c = bch2_fs_open(&devs, &opts); if (IS_ERR(c)) return false; @@ -265,7 +265,7 @@ int cmd_fsck(int argc, char *argv[]) exit(8); } - darray_str devs = get_or_split_cmdline_devs(argc, argv); + darray_const_str devs = get_or_split_cmdline_devs(argc, argv); darray_for_each(devs, i) if (dev_mounted(*i)) { @@ -324,7 +324,7 @@ userland_fsck: if (ret) return ret; - struct bch_fs *c = bch2_fs_open(devs.data, devs.nr, opts); + struct bch_fs *c = bch2_fs_open(&devs, &opts); if (IS_ERR(c)) exit(8); diff --git a/c_src/cmd_key.c b/c_src/cmd_key.c index ac8a94a8..c1b72ff4 100644 --- a/c_src/cmd_key.c +++ b/c_src/cmd_key.c @@ -87,12 +87,13 @@ int cmd_unlock(int argc, char *argv[]) int cmd_set_passphrase(int argc, char *argv[]) { - struct bch_opts opts = bch2_opts_empty(); - struct bch_fs *c; - - if (argc < 2) + args_shift(1); + if (!argc) die("Please supply one or more devices"); + darray_const_str devs = get_or_split_cmdline_devs(argc, argv); + + struct bch_opts opts = bch2_opts_empty(); opt_set(opts, nostart, true); /* @@ -100,7 +101,7 @@ int cmd_set_passphrase(int argc, char *argv[]) * to make sure we're opening and updating every component device: */ - c = bch2_fs_open(argv + 1, argc - 1, opts); + struct bch_fs *c = bch2_fs_open(&devs, &opts); if (IS_ERR(c)) die("Error opening %s: %s", argv[1], bch2_err_str(PTR_ERR(c))); @@ -126,14 +127,16 @@ int cmd_set_passphrase(int argc, char *argv[]) int cmd_remove_passphrase(int argc, char *argv[]) { - struct bch_opts opts = bch2_opts_empty(); - struct bch_fs *c; - - if (argc < 2) + args_shift(1); + if (!argc) die("Please supply one or more devices"); + darray_const_str devs = get_or_split_cmdline_devs(argc, argv); + + struct bch_opts opts = bch2_opts_empty(); opt_set(opts, nostart, true); - c = bch2_fs_open(argv + 1, argc - 1, opts); + + struct bch_fs *c = bch2_fs_open(&devs, &opts); if (IS_ERR(c)) die("Error opening %s: %s", argv[1], bch2_err_str(PTR_ERR(c))); diff --git a/c_src/cmd_kill_btree_node.c b/c_src/cmd_kill_btree_node.c index c8f43150..81dbdd4b 100644 --- a/c_src/cmd_kill_btree_node.c +++ b/c_src/cmd_kill_btree_node.c @@ -74,7 +74,9 @@ int cmd_kill_btree_node(int argc, char *argv[]) if (!argc) die("Please supply device(s)"); - struct bch_fs *c = bch2_fs_open(argv, argc, opts); + darray_const_str devs = get_or_split_cmdline_devs(argc, argv); + + struct bch_fs *c = bch2_fs_open(&devs, &opts); if (IS_ERR(c)) die("error opening %s: %s", argv[0], bch2_err_str(PTR_ERR(c))); diff --git a/c_src/cmd_list_journal.c b/c_src/cmd_list_journal.c index 3cdf4846..fe9e3bbd 100644 --- a/c_src/cmd_list_journal.c +++ b/c_src/cmd_list_journal.c @@ -319,9 +319,9 @@ int cmd_list_journal(int argc, char *argv[]) if (!argc) die("Please supply device(s) to open"); - darray_str devs = get_or_split_cmdline_devs(argc, argv); + darray_const_str devs = get_or_split_cmdline_devs(argc, argv); - struct bch_fs *c = bch2_fs_open(devs.data, devs.nr, opts); + struct bch_fs *c = bch2_fs_open(&devs, &opts); if (IS_ERR(c)) die("error opening %s: %s", argv[0], bch2_err_str(PTR_ERR(c))); diff --git a/c_src/cmd_migrate.c b/c_src/cmd_migrate.c index edd77377..91c42302 100644 --- a/c_src/cmd_migrate.c +++ b/c_src/cmd_migrate.c @@ -253,14 +253,15 @@ static int migrate_fs(const char *fs_path, free(sb); - char *path[1] = { dev->path }; + darray_const_str dev_paths = {}; + darray_push(&dev_paths, dev->path); struct bch_opts opts = bch2_opts_empty(); opt_set(opts, sb, sb_offset); opt_set(opts, nostart, true); opt_set(opts, noexcl, true); - struct bch_fs *c = bch2_fs_open(path, 1, opts); + struct bch_fs *c = bch2_fs_open(&dev_paths, &opts); if (IS_ERR(c)) die("Error opening new filesystem: %s", bch2_err_str(PTR_ERR(c))); @@ -295,7 +296,7 @@ static int migrate_fs(const char *fs_path, opt_set(opts, nochanges, true); opt_set(opts, read_only, true); - c = bch2_fs_open(path, 1, opts); + c = bch2_fs_open(&dev_paths, &opts); if (IS_ERR(c)) die("Error opening new filesystem: %s", bch2_err_str(PTR_ERR(c))); @@ -377,14 +378,14 @@ static void migrate_superblock_usage(void) int cmd_migrate_superblock(int argc, char *argv[]) { - char *dev = NULL; + darray_const_str devs = {}; u64 sb_offset = 0; int opt, ret; while ((opt = getopt(argc, argv, "d:o:h")) != -1) switch (opt) { case 'd': - dev = optarg; + darray_push(&devs, optarg); break; case 'o': ret = kstrtou64(optarg, 10, &sb_offset); @@ -396,13 +397,13 @@ int cmd_migrate_superblock(int argc, char *argv[]) exit(EXIT_SUCCESS); } - if (!dev) + if (!devs.nr) die("Please specify a device"); if (!sb_offset) die("Please specify offset of existing superblock"); - int fd = xopen(dev, O_RDWR); + int fd = xopen(devs.data[0], O_RDWR); struct bch_sb *sb = __bch2_super_read(fd, sb_offset); unsigned sb_size = 1U << sb->layout.sb_max_size_bits; @@ -435,7 +436,7 @@ int cmd_migrate_superblock(int argc, char *argv[]) opt_set(opts, nostart, true); opt_set(opts, sb, sb_offset); - struct bch_fs *c = bch2_fs_open(&dev, 1, opts); + struct bch_fs *c = bch2_fs_open(&devs, &opts); ret = PTR_ERR_OR_ZERO(c) ?: bch2_buckets_nouse_alloc(c); if (ret) @@ -461,7 +462,7 @@ int cmd_migrate_superblock(int argc, char *argv[]) * inconsequential: */ - c = bch2_fs_open(&dev, 1, opts); + c = bch2_fs_open(&devs, &opts); ret = PTR_ERR_OR_ZERO(c); if (ret) die("error opening filesystem: %s", bch2_err_str(ret)); diff --git a/c_src/cmd_option.c b/c_src/cmd_option.c index e314903a..14201c8d 100644 --- a/c_src/cmd_option.c +++ b/c_src/cmd_option.c @@ -94,10 +94,12 @@ int cmd_set_option(int argc, char *argv[]) } if (!online) { + darray_const_str devs = get_or_split_cmdline_devs(argc, argv); + struct bch_opts open_opts = bch2_opts_empty(); opt_set(open_opts, nostart, true); - struct bch_fs *c = bch2_fs_open(argv, argc, open_opts); + struct bch_fs *c = bch2_fs_open(&devs, &open_opts); if (IS_ERR(c)) { fprintf(stderr, "error opening %s: %s\n", argv[0], bch2_err_str(PTR_ERR(c))); exit(EXIT_FAILURE); diff --git a/c_src/tools-util.c b/c_src/tools-util.c index ea12946c..03ad009f 100644 --- a/c_src/tools-util.c +++ b/c_src/tools-util.c @@ -547,7 +547,7 @@ char *dev_to_path(dev_t dev) return path; } -struct mntent *dev_to_mount(char *dev) +struct mntent *dev_to_mount(const char *dev) { struct mntent *mnt, *ret = NULL; FILE *f = setmntent("/proc/mounts", "r"); @@ -586,7 +586,7 @@ found: return ret; } -int dev_mounted(char *dev) +int dev_mounted(const char *dev) { struct mntent *mnt = dev_to_mount(dev); @@ -748,9 +748,9 @@ unsigned version_parse(char *buf) return BCH_VERSION(major, minor); } -darray_str get_or_split_cmdline_devs(int argc, char *argv[]) +darray_const_str get_or_split_cmdline_devs(int argc, char *argv[]) { - darray_str ret = {}; + darray_const_str ret = {}; if (argc == 1) { bch2_split_devs(argv[0], &ret); diff --git a/c_src/tools-util.h b/c_src/tools-util.h index 27652b62..1352050e 100644 --- a/c_src/tools-util.h +++ b/c_src/tools-util.h @@ -186,8 +186,8 @@ u32 crc32c(u32, const void *, size_t); char *dev_to_name(dev_t); char *dev_to_path(dev_t); -struct mntent *dev_to_mount(char *); -int dev_mounted(char *); +struct mntent *dev_to_mount(const char *); +int dev_mounted(const char *); char *fd_to_dev_model(int); #define args_shift(_nr) \ @@ -217,7 +217,7 @@ struct bbpos_range bbpos_range_parse(char *); unsigned version_parse(char *); -darray_str get_or_split_cmdline_devs(int argc, char *argv[]); +darray_const_str get_or_split_cmdline_devs(int argc, char *argv[]); char *pop_cmd(int *argc, char *argv[]); |