From 59c3c195f432243a1d4b2a7210e9699db83cb335 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Sun, 12 Mar 2023 15:15:35 +0100 Subject: [PATCH 1/3] mkfs-util: Always use "default" usage type for ext filesystems If no usage type is explicitly specified, ext will choose one based on the filesystem size. Let's override this and always use the "default" usage type so that we can create filesystems that are initially small but might grow later without opting in to the "small" usage type. --- src/shared/mkfs-util.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/shared/mkfs-util.c b/src/shared/mkfs-util.c index 7e620391e3..33cb83343c 100644 --- a/src/shared/mkfs-util.c +++ b/src/shared/mkfs-util.c @@ -361,6 +361,7 @@ int make_filesystem( "-m", "0", "-E", discard ? "discard,lazy_itable_init=1" : "nodiscard,lazy_itable_init=1", "-b", "4096", + "-T", "default", node); if (!argv) return log_oom(); @@ -378,6 +379,7 @@ int make_filesystem( "-m", "0", "-E", discard ? "discard,lazy_itable_init=1" : "nodiscard,lazy_itable_init=1", "-b", "4096", + "-T", "default", node); if (root && strv_extend_strv(&argv, STRV_MAKE("-d", root), false) < 0) From 2417fa8ef57fd5121709e55081623f50d937f044 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Sun, 12 Mar 2023 15:36:08 +0100 Subject: [PATCH 2/3] mkfs-util: Don't explicitly enable has_journal for ext3/ext4 It's enabled by default anyway and removing it allows merging the ext conditionals into one. --- src/shared/mkfs-util.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/shared/mkfs-util.c b/src/shared/mkfs-util.c index 33cb83343c..e073d66f3c 100644 --- a/src/shared/mkfs-util.c +++ b/src/shared/mkfs-util.c @@ -352,7 +352,7 @@ int make_filesystem( assert_se(sd_id128_to_uuid_string(uuid, vol_id)); /* When changing this conditional, also adjust the log statement below. */ - if (streq(fstype, "ext2")) { + if (STR_IN_SET(fstype, "ext2", "ext3", "ext4")) { argv = strv_new(mkfs, "-q", "-L", label, @@ -363,24 +363,6 @@ int make_filesystem( "-b", "4096", "-T", "default", node); - if (!argv) - return log_oom(); - - if (root && strv_extend_strv(&argv, STRV_MAKE("-d", root), false) < 0) - return log_oom(); - - } else if (STR_IN_SET(fstype, "ext3", "ext4")) { - argv = strv_new(mkfs, - "-q", - "-L", label, - "-U", vol_id, - "-I", "256", - "-O", "has_journal", - "-m", "0", - "-E", discard ? "discard,lazy_itable_init=1" : "nodiscard,lazy_itable_init=1", - "-b", "4096", - "-T", "default", - node); if (root && strv_extend_strv(&argv, STRV_MAKE("-d", root), false) < 0) return log_oom(); From 49f2e129f8cc52beb4cac122c70fe1824a45d53a Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Sun, 12 Mar 2023 16:20:38 +0100 Subject: [PATCH 3/3] mkfs-util: Redirect mkfs.vfat stdout to /dev/null mkfs.vfat does not have a --quiet option so let's redirect its stdout to /dev/null instead. --- src/shared/mkfs-util.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/shared/mkfs-util.c b/src/shared/mkfs-util.c index e073d66f3c..6c259009af 100644 --- a/src/shared/mkfs-util.c +++ b/src/shared/mkfs-util.c @@ -271,6 +271,7 @@ int make_filesystem( _cleanup_strv_free_ char **argv = NULL; _cleanup_(unlink_and_freep) char *protofile = NULL; char vol_id[CONST_MAX(SD_ID128_UUID_STRING_MAX, 8U + 1U)] = {}; + int stdio_fds[3] = { -EBADF, STDERR_FILENO, STDERR_FILENO}; int r; assert(node); @@ -442,6 +443,9 @@ int make_filesystem( return log_oom(); } + /* mkfs.vfat does not have a --quiet option so let's redirect stdout to /dev/null instead. */ + stdio_fds[1] = -EBADF; + } else if (streq(fstype, "swap")) /* TODO: add --quiet here if * https://github.com/util-linux/util-linux/issues/1499 resolved. */ @@ -473,7 +477,14 @@ int make_filesystem( if (extra_mkfs_args && strv_extend_strv(&argv, extra_mkfs_args, false) < 0) return log_oom(); - r = safe_fork("(mkfs)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_WAIT|FORK_STDOUT_TO_STDERR|FORK_CLOSE_ALL_FDS, NULL); + r = safe_fork_full( + "(mkfs)", + stdio_fds, + /*except_fds=*/ NULL, + /*n_except_fds=*/ 0, + FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_WAIT| + FORK_CLOSE_ALL_FDS|FORK_REARRANGE_STDIO, + /*ret_pid=*/ NULL); if (r < 0) return r; if (r == 0) {