summaryrefslogtreecommitdiff
path: root/c_src
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-04-28 14:50:43 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-04-28 15:31:43 -0400
commit6d7b47685b2625e3103e26a25c8003ef6de5f82d (patch)
tree421b388c1e90e45d7f653bf502c0858426b8d625 /c_src
parent0589d9f3c3cdff28a13f9efc96762d39ef615d22 (diff)
Update bcachefs sources to f0ebca18293c bcachefs: bch2_fs_open() now takes a darray
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'c_src')
-rw-r--r--c_src/cmd_device.c12
-rw-r--r--c_src/cmd_dump.c5
-rw-r--r--c_src/cmd_format.c7
-rw-r--r--c_src/cmd_fsck.c8
-rw-r--r--c_src/cmd_key.c23
-rw-r--r--c_src/cmd_kill_btree_node.c4
-rw-r--r--c_src/cmd_list_journal.c4
-rw-r--r--c_src/cmd_migrate.c19
-rw-r--r--c_src/cmd_option.c4
-rw-r--r--c_src/tools-util.c8
-rw-r--r--c_src/tools-util.h6
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[]);