diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-04-13 08:44:30 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-04-13 21:10:24 -0400 |
commit | 4f5dba7a87d4534f232449b9d23a1b972e2f6d28 (patch) | |
tree | 53b62cd3af70ab49f7bc192ecd278136ecf35c0c | |
parent | 007d6654bc52578e55e439c5b04ce2e6ffe6c827 (diff) |
cmd_format: --source, --no_initialize are incompatible
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | c_src/cmd_format.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/c_src/cmd_format.c b/c_src/cmd_format.c index d0b5d5e8..6385cff4 100644 --- a/c_src/cmd_format.c +++ b/c_src/cmd_format.c @@ -137,9 +137,6 @@ int cmd_format(int argc, char *argv[]) struct bch_opt_strs fs_opt_strs = {}; struct bch_opts fs_opts = bch2_opts_empty(); - if (getenv("BCACHEFS_KERNEL_ONLY")) - initialize = false; - while (true) { const struct bch_option *opt = bch2_cmdline_opt_parse(argc, argv, OPT_FORMAT|OPT_FS|OPT_DEVICE); @@ -258,34 +255,43 @@ int cmd_format(int argc, char *argv[]) if (unconsumed_dev_option) die("Options for devices apply to subsequent devices; got a device option with no device"); - if (opts.version != bcachefs_metadata_version_current) - initialize = false; - if (!devices.nr) die("Please supply a device"); + if (opts.source && !initialize) + die("--source, --no_initialize are incompatible"); + if (opts.encrypted && !no_passphrase) { opts.passphrase = read_passphrase_twice("Enter passphrase: "); initialize = false; } + if (!opts.source) { + if (getenv("BCACHEFS_KERNEL_ONLY")) + initialize = false; + + if (opts.version != bcachefs_metadata_version_current) { + printf("version mismatch, not initializing"); + if (opts.source) + die("--source, --version are incompatible"); + initialize = false; + } + } + darray_for_each(devices, dev) { int ret = open_for_format(dev, force); if (ret) - die("Error opening %s: %s", dev_opts.path, strerror(-ret)); + die("Error opening %s: %s", dev->path, strerror(-ret)); } struct bch_sb *sb = bch2_format(fs_opt_strs, fs_opts, opts, devices); - bch2_opt_strs_free(&fs_opt_strs); if (!quiet) { struct printbuf buf = PRINTBUF; - buf.human_readable_units = true; bch2_sb_to_text(&buf, sb, false, 1 << BCH_SB_FIELD_members_v2); printf("%s", buf.buf); - printbuf_exit(&buf); } free(sb); @@ -295,14 +301,6 @@ int cmd_format(int argc, char *argv[]) free(opts.passphrase); } - darray_exit(&devices); - - /* don't skip initialization when we have to build an image from a source */ - if (opts.source && !initialize) { - printf("Warning: Forcing the initialization because the source flag was supplied\n"); - initialize = 1; - } - if (initialize) { /* * Start the filesystem once, to allocate the journal and create @@ -320,9 +318,9 @@ int cmd_format(int argc, char *argv[]) bch2_fs_stop(c); } - + bch2_opt_strs_free(&fs_opt_strs); + darray_exit(&devices); darray_exit(&device_paths); - return 0; } |