]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
mkfs-util: turn quiet/discard to a flags field
authorAllison Karlitskaya <allison.karlitskaya@redhat.com>
Tue, 3 Dec 2024 08:21:16 +0000 (09:21 +0100)
committerAllison Karlitskaya <allison.karlitskaya@redhat.com>
Tue, 27 May 2025 07:26:02 +0000 (09:26 +0200)
Add a new `MakeFilesystemFlags` enum and use it to replace the existing
`quiet` and `discard` booleans on `make_filesystem()`.

Update the callers.  While we're doing that, consolidate some duplicated
logic in systemd-repart.

Signed-off-by: Allison Karlitskaya <allison.karlitskaya@redhat.com>
src/growfs/makefs.c
src/home/homework-luks.c
src/repart/repart.c
src/shared/mkfs-util.c
src/shared/mkfs-util.h
src/test/test-loop-block.c

index 3378bd3d7050861ffce6c524ef7794e78092bce9..897b9a760079828ffc360cbf11db21429fff96cb 100644 (file)
@@ -70,8 +70,7 @@ static int run(int argc, char *argv[]) {
                                label,
                                /* root = */ NULL,
                                uuid,
-                               /* discard = */ true,
-                               /* quiet = */ true,
+                               MKFS_DISCARD | MKFS_QUIET,
                                /* sector_size = */ 0,
                                /* compression = */ NULL,
                                /* compression_level = */ NULL,
index e92e5e2eb9a4e9dced0007fe0fc49ffe3fff2ce3..01ac02b40a3df6816e779d5f53f072f99fb9ed1d 100644 (file)
@@ -2382,8 +2382,7 @@ int home_create_luks(
                             user_record_user_name_and_realm(h),
                             /* root = */ NULL,
                             fs_uuid,
-                            user_record_luks_discard(h),
-                            /* quiet = */ true,
+                            (user_record_luks_discard(h) ? MKFS_DISCARD : 0) | MKFS_QUIET,
                             /* sector_size = */ 0,
                             /* compression = */ NULL,
                             /* compression_level= */ NULL,
index 89d4297d626cb9d4c1a3426661b8f166c2569bf3..d46caf39af8ce40536338db6fd7d553910c4a5c8 100644 (file)
@@ -2365,6 +2365,18 @@ static bool partition_needs_populate(const Partition *p) {
                 (p->suppressing && partition_needs_populate(p->suppressing));
 }
 
+static MakeFileSystemFlags partition_mkfs_flags(const Partition *p) {
+        MakeFileSystemFlags flags = 0;
+
+        if (arg_discard)
+                flags |= MKFS_DISCARD;
+
+        if (streq(p->format, "erofs") && !DEBUG_LOGGING)
+                flags |= MKFS_QUIET;
+
+        return flags;
+}
+
 static int partition_read_definition(Partition *p, const char *path, const char *const *conf_file_dirs) {
 
         ConfigTableItem table[] = {
@@ -6254,8 +6266,7 @@ static int context_mkfs(Context *context) {
                         return r;
 
                 r = make_filesystem(partition_target_path(t), p->format, strempty(p->new_label), root,
-                                    p->fs_uuid, arg_discard,
-                                    /* quiet = */ streq(p->format, "erofs") && !DEBUG_LOGGING,
+                                    p->fs_uuid, partition_mkfs_flags(p),
                                     context->fs_sector_size, p->compression, p->compression_level,
                                     extra_mkfs_options);
                 if (r < 0)
@@ -7849,8 +7860,7 @@ static int context_minimize(Context *context) {
                                     strempty(p->new_label),
                                     root,
                                     fs_uuid,
-                                    arg_discard,
-                                    /* quiet = */ streq(p->format, "erofs") && !DEBUG_LOGGING,
+                                    partition_mkfs_flags(p),
                                     context->fs_sector_size,
                                     p->compression,
                                     p->compression_level,
@@ -7941,8 +7951,7 @@ static int context_minimize(Context *context) {
                                     strempty(p->new_label),
                                     root,
                                     p->fs_uuid,
-                                    arg_discard,
-                                    /* quiet = */ streq(p->format, "erofs") && !DEBUG_LOGGING,
+                                    partition_mkfs_flags(p),
                                     context->fs_sector_size,
                                     p->compression,
                                     p->compression_level,
index 5412a60902acf471739494e98f5907ac10960aa4..e8412cb4b0268fa5c04799d7247c0f5377595135 100644 (file)
@@ -322,8 +322,7 @@ int make_filesystem(
                 const char *label,
                 const char *root,
                 sd_id128_t uuid,
-                bool discard,
-                bool quiet,
+                MakeFileSystemFlags flags,
                 uint64_t sector_size,
                 char *compression,
                 char *compression_level,
@@ -424,7 +423,7 @@ int make_filesystem(
                                 "-U", vol_id,
                                 "-I", "256",
                                 "-m", "0",
-                                "-E", discard ? "discard,lazy_itable_init=1" : "nodiscard,lazy_itable_init=1",
+                                "-E", FLAGS_SET(flags, MKFS_DISCARD) ? "discard,lazy_itable_init=1" : "nodiscard,lazy_itable_init=1",
                                 "-b", "4096",
                                 "-T", "default");
                 if (!argv)
@@ -433,7 +432,7 @@ int make_filesystem(
                 if (root && strv_extend_many(&argv, "-d", root) < 0)
                         return log_oom();
 
-                if (quiet && strv_extend(&argv, "-q") < 0)
+                if (FLAGS_SET(flags, MKFS_QUIET) && strv_extend(&argv, "-q") < 0)
                         return log_oom();
 
                 if (strv_extend(&argv, node) < 0)
@@ -454,13 +453,13 @@ int make_filesystem(
                 if (!argv)
                         return log_oom();
 
-                if (!discard && strv_extend(&argv, "--nodiscard") < 0)
+                if (!FLAGS_SET(flags, MKFS_DISCARD) && strv_extend(&argv, "--nodiscard") < 0)
                         return log_oom();
 
                 if (root && strv_extend_many(&argv, "-r", root) < 0)
                         return log_oom();
 
-                if (quiet && strv_extend(&argv, "-q") < 0)
+                if (FLAGS_SET(flags, MKFS_QUIET) && strv_extend(&argv, "-q") < 0)
                         return log_oom();
 
                 if (compression) {
@@ -479,7 +478,7 @@ int make_filesystem(
 
                 /* mkfs.btrfs unconditionally warns about several settings changing from v5.15 onwards which
                  * isn't silenced by "-q", so let's redirect stdout to /dev/null as well. */
-                if (quiet)
+                if (FLAGS_SET(flags, MKFS_QUIET))
                         stdio_fds[1] = -EBADF;
 
                 /* mkfs.btrfs expects a sector size of at least 4k bytes. */
@@ -495,11 +494,11 @@ int make_filesystem(
                                 "-f",  /* force override, without this it doesn't seem to want to write to an empty partition */
                                 "-l", label,
                                 "-U", vol_id,
-                                "-t", one_zero(discard));
+                                "-t", one_zero(FLAGS_SET(flags, MKFS_DISCARD)));
                 if (!argv)
                         return log_oom();
 
-                if (quiet && strv_extend(&argv, "-q") < 0)
+                if (FLAGS_SET(flags, MKFS_QUIET) && strv_extend(&argv, "-q") < 0)
                         return log_oom();
 
                 if (sector_size > 0) {
@@ -525,7 +524,7 @@ int make_filesystem(
                 if (!argv)
                         return log_oom();
 
-                if (!discard && strv_extend(&argv, "-K") < 0)
+                if (!FLAGS_SET(flags, MKFS_DISCARD) && strv_extend(&argv, "-K") < 0)
                         return log_oom();
 
                 if (root) {
@@ -557,7 +556,7 @@ int make_filesystem(
                                 return log_oom();
                 }
 
-                if (quiet && strv_extend(&argv, "-q") < 0)
+                if (FLAGS_SET(flags, MKFS_QUIET) && strv_extend(&argv, "-q") < 0)
                         return log_oom();
 
                 if (strv_extend(&argv, node) < 0)
@@ -584,7 +583,7 @@ int make_filesystem(
                         return log_oom();
 
                 /* mkfs.vfat does not have a --quiet option so let's redirect stdout to /dev/null instead. */
-                if (quiet)
+                if (FLAGS_SET(flags, MKFS_QUIET))
                         stdio_fds[1] = -EBADF;
 
         } else if (streq(fstype, "swap")) {
@@ -597,7 +596,7 @@ int make_filesystem(
                 if (!argv)
                         return log_oom();
 
-                if (quiet)
+                if (FLAGS_SET(flags, MKFS_QUIET))
                         stdio_fds[1] = -EBADF;
 
         } else if (streq(fstype, "squashfs")) {
@@ -617,7 +616,7 @@ int make_filesystem(
                 }
 
                 /* mksquashfs -quiet option is pretty new so let's redirect stdout to /dev/null instead. */
-                if (quiet)
+                if (FLAGS_SET(flags, MKFS_QUIET))
                         stdio_fds[1] = -EBADF;
 
         } else if (streq(fstype, "erofs")) {
@@ -626,7 +625,7 @@ int make_filesystem(
                 if (!argv)
                         return log_oom();
 
-                if (quiet && strv_extend(&argv, "--quiet") < 0)
+                if (FLAGS_SET(flags, MKFS_QUIET) && strv_extend(&argv, "--quiet") < 0)
                         return log_oom();
 
                 if (compression) {
index e20d9dc63e1166566bf60e0ac07eb0bf5fc94d2c..ca2fae7e3e08a87a017bd9593a805aa99f48af91 100644 (file)
@@ -5,6 +5,11 @@
 
 #include "forward.h"
 
+typedef enum MakeFilesystemFlags {
+        MKFS_QUIET     = 1 << 0,  /* Suppress mkfs command output */
+        MKFS_DISCARD   = 1 << 1,  /* Enable 'discard' mode on the filesystem */
+} MakeFileSystemFlags;
+
 int mkfs_exists(const char *fstype);
 
 int mkfs_supports_root_option(const char *fstype);
@@ -15,8 +20,7 @@ int make_filesystem(
                 const char *label,
                 const char *root,
                 sd_id128_t uuid,
-                bool discard,
-                bool quiet,
+                MakeFileSystemFlags flags,
                 uint64_t sector_size,
                 char *compression,
                 char *compression_level,
index d59b4b27b1ef3980440f2a98069d2e5fc0ac6d7a..b9a1ffd540a316828ad8120b6bb4e61a87323f77 100644 (file)
@@ -266,16 +266,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, false, 0, NULL, NULL, NULL) >= 0);
+        assert_se(make_filesystem(dissected->partitions[PARTITION_ESP].node, "vfat", "EFI", NULL, id, MKFS_DISCARD, 0, NULL, NULL, NULL) >= 0);
 
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(make_filesystem(dissected->partitions[PARTITION_XBOOTLDR].node, "vfat", "xbootldr", NULL, id, true, false, 0, NULL, NULL, NULL) >= 0);
+        assert_se(make_filesystem(dissected->partitions[PARTITION_XBOOTLDR].node, "vfat", "xbootldr", NULL, id, MKFS_DISCARD, 0, NULL, NULL, NULL) >= 0);
 
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(make_filesystem(dissected->partitions[PARTITION_ROOT].node, "ext4", "root", NULL, id, true, false, 0, NULL, NULL, NULL) >= 0);
+        assert_se(make_filesystem(dissected->partitions[PARTITION_ROOT].node, "ext4", "root", NULL, id, MKFS_DISCARD, 0, NULL, NULL, NULL) >= 0);
 
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(make_filesystem(dissected->partitions[PARTITION_HOME].node, "ext4", "home", NULL, id, true, false, 0, NULL, NULL, NULL) >= 0);
+        assert_se(make_filesystem(dissected->partitions[PARTITION_HOME].node, "ext4", "home", NULL, id, MKFS_DISCARD, 0, NULL, NULL, NULL) >= 0);
 
         dissected = dissected_image_unref(dissected);