From 2bc161dddb9d355d81ca1d2126c94b9c18b9e3cf Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Sun, 7 May 2023 21:39:10 +0200 Subject: mkfs-util: Add quiet argument to make_filesystem() We default to quiet operation everywhere except for repart, where we disable quiet and have the mkfs tools write to stdout. We also make sure --quiet or equivalent is implemented for all mkfs tools. --- src/home/homework-luks.c | 10 +++++++++- src/partition/makefs.c | 10 +++++++++- src/partition/repart.c | 7 ++++--- src/shared/mkfs-util.c | 41 +++++++++++++++++++++++++++++------------ src/shared/mkfs-util.h | 1 + src/test/test-loop-block.c | 8 ++++---- 6 files changed, 56 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c index a24e0a70b2..802d9bf6f9 100644 --- a/src/home/homework-luks.c +++ b/src/home/homework-luks.c @@ -2356,7 +2356,15 @@ int home_create_luks( if (r < 0) return log_error_errno(r, "Failed to determine mkfs command line options for '%s': %m", fstype); - r = make_filesystem(setup->dm_node, fstype, user_record_user_name_and_realm(h), NULL, fs_uuid, user_record_luks_discard(h), 0, extra_mkfs_options); + r = make_filesystem(setup->dm_node, + fstype, + user_record_user_name_and_realm(h), + /* root = */ NULL, + fs_uuid, + user_record_luks_discard(h), + /* quiet = */ true, + /* sector_size = */ 0, + extra_mkfs_options); if (r < 0) return r; diff --git a/src/partition/makefs.c b/src/partition/makefs.c index b37a3b9008..53439a4bbc 100644 --- a/src/partition/makefs.c +++ b/src/partition/makefs.c @@ -70,7 +70,15 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to extract file name from '%s': %m", device); - return make_filesystem(device, fstype, label, NULL, uuid, true, 0, NULL); + return make_filesystem(device, + fstype, + label, + /* root = */ NULL, + uuid, + /* discard = */ true, + /* quiet = */ true, + /* sector_size = */ 0, + /* extra_mkfs_options = */ NULL); } DEFINE_MAIN_FUNCTION(run); diff --git a/src/partition/repart.c b/src/partition/repart.c index 44b0e461f2..8766225d6f 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -4270,7 +4270,8 @@ static int context_mkfs(Context *context) { p->format); r = make_filesystem(partition_target_path(t), p->format, strempty(p->new_label), root, - p->fs_uuid, arg_discard, context->sector_size, extra_mkfs_options); + p->fs_uuid, arg_discard, /* quiet = */ false, context->sector_size, + extra_mkfs_options); if (r < 0) return r; @@ -5604,7 +5605,7 @@ static int context_minimize(Context *context) { p->format); r = make_filesystem(d ? d->node : temp, p->format, strempty(p->new_label), root, fs_uuid, - arg_discard, context->sector_size, extra_mkfs_options); + arg_discard, /* quiet = */ false, context->sector_size, extra_mkfs_options); if (r < 0) return r; @@ -5669,7 +5670,7 @@ static int context_minimize(Context *context) { return log_error_errno(r, "Failed to make loopback device of %s: %m", temp); r = make_filesystem(d ? d->node : temp, p->format, strempty(p->new_label), root, p->fs_uuid, - arg_discard, context->sector_size, extra_mkfs_options); + arg_discard, /* quiet = */ false, context->sector_size, extra_mkfs_options); if (r < 0) return r; diff --git a/src/shared/mkfs-util.c b/src/shared/mkfs-util.c index 16d2fb651f..3d8c16b7b9 100644 --- a/src/shared/mkfs-util.c +++ b/src/shared/mkfs-util.c @@ -264,6 +264,7 @@ int make_filesystem( const char *root, sd_id128_t uuid, bool discard, + bool quiet, uint64_t sector_size, char * const *extra_mkfs_args) { @@ -355,7 +356,6 @@ int make_filesystem( /* When changing this conditional, also adjust the log statement below. */ if (STR_IN_SET(fstype, "ext2", "ext3", "ext4")) { argv = strv_new(mkfs, - "-q", "-L", label, "-U", vol_id, "-I", "256", @@ -368,9 +368,11 @@ int make_filesystem( if (root && strv_extend_strv(&argv, STRV_MAKE("-d", root), false) < 0) return log_oom(); + if (quiet && strv_extend(&argv, "-q") < 0) + return log_oom(); + } else if (streq(fstype, "btrfs")) { argv = strv_new(mkfs, - "-q", "-L", label, "-U", vol_id, node); @@ -383,9 +385,11 @@ int make_filesystem( if (root && strv_extend_strv(&argv, STRV_MAKE("-r", root), false) < 0) return log_oom(); + if (quiet && strv_extend(&argv, "-q") < 0) + return log_oom(); + } else if (streq(fstype, "f2fs")) { argv = strv_new(mkfs, - "-q", "-g", /* "default options" */ "-f", /* force override, without this it doesn't seem to want to write to an empty partition */ "-l", label, @@ -393,13 +397,15 @@ int make_filesystem( "-t", one_zero(discard), node); + if (quiet && strv_extend(&argv, "-q") < 0) + return log_oom(); + } else if (streq(fstype, "xfs")) { const char *j; j = strjoina("uuid=", vol_id); argv = strv_new(mkfs, - "-q", "-L", label, "-m", j, "-m", "reflink=1", @@ -427,6 +433,9 @@ int make_filesystem( return log_oom(); } + if (quiet && strv_extend(&argv, "-q") < 0) + return log_oom(); + } else if (streq(fstype, "vfat")) { argv = strv_new(mkfs, @@ -444,32 +453,40 @@ int make_filesystem( } /* mkfs.vfat does not have a --quiet option so let's redirect stdout to /dev/null instead. */ - stdio_fds[1] = -EBADF; + if (quiet) + stdio_fds[1] = -EBADF; - } else if (streq(fstype, "swap")) - /* TODO: add --quiet here if - * https://github.com/util-linux/util-linux/issues/1499 resolved. */ + } else if (streq(fstype, "swap")) { + /* TODO: add --quiet once util-linux v2.38 is available everywhere. */ argv = strv_new(mkfs, "-L", label, "-U", vol_id, node); - else if (streq(fstype, "squashfs")) { + if (quiet) + stdio_fds[1] = -EBADF; + + } else if (streq(fstype, "squashfs")) { argv = strv_new(mkfs, root, node, "-noappend"); /* mksquashfs -quiet option is pretty new so let's redirect stdout to /dev/null instead. */ - stdio_fds[1] = -EBADF; + if (quiet) + stdio_fds[1] = -EBADF; - } else if (streq(fstype, "erofs")) + } else if (streq(fstype, "erofs")) { argv = strv_new(mkfs, "-U", vol_id, node, root); - else + + if (quiet && strv_extend(&argv, "--quiet") < 0) + return log_oom(); + + } else /* Generic fallback for all other file systems */ argv = strv_new(mkfs, node); diff --git a/src/shared/mkfs-util.h b/src/shared/mkfs-util.h index 75ea58543a..9a1cb585d6 100644 --- a/src/shared/mkfs-util.h +++ b/src/shared/mkfs-util.h @@ -18,6 +18,7 @@ int make_filesystem( const char *root, sd_id128_t uuid, bool discard, + bool quiet, uint64_t sector_size, char * const *extra_mkfs_args); diff --git a/src/test/test-loop-block.c b/src/test/test-loop-block.c index d8f48798cb..fad5496052 100644 --- a/src/test/test-loop-block.c +++ b/src/test/test-loop-block.c @@ -245,16 +245,16 @@ static int run(int argc, char *argv[]) { assert_se(r >= 0); assert_se(sd_id128_randomize(&id) >= 0); - assert_se(make_filesystem(dissected->partitions[PARTITION_ESP].node, "vfat", "EFI", NULL, id, true, 0, NULL) >= 0); + assert_se(make_filesystem(dissected->partitions[PARTITION_ESP].node, "vfat", "EFI", NULL, id, true, false, 0, NULL) >= 0); assert_se(sd_id128_randomize(&id) >= 0); - assert_se(make_filesystem(dissected->partitions[PARTITION_XBOOTLDR].node, "vfat", "xbootldr", NULL, id, true, 0, NULL) >= 0); + assert_se(make_filesystem(dissected->partitions[PARTITION_XBOOTLDR].node, "vfat", "xbootldr", NULL, id, true, false, 0, NULL) >= 0); assert_se(sd_id128_randomize(&id) >= 0); - assert_se(make_filesystem(dissected->partitions[PARTITION_ROOT].node, "ext4", "root", NULL, id, true, 0, NULL) >= 0); + assert_se(make_filesystem(dissected->partitions[PARTITION_ROOT].node, "ext4", "root", NULL, id, true, false, 0, NULL) >= 0); assert_se(sd_id128_randomize(&id) >= 0); - assert_se(make_filesystem(dissected->partitions[PARTITION_HOME].node, "ext4", "home", NULL, id, true, 0, NULL) >= 0); + assert_se(make_filesystem(dissected->partitions[PARTITION_HOME].node, "ext4", "home", NULL, id, true, false, 0, NULL) >= 0); dissected = dissected_image_unref(dissected); -- cgit v1.2.1