From de47cd061097164fff4ca901b703df32604c655e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 6 Apr 2023 11:57:27 +0200 Subject: [PATCH 1/2] fstab-generator: add missing phrase in comment --- src/fstab-generator/fstab-generator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index cc2c5512dd0..dae290c8892 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -1080,7 +1080,7 @@ static int add_sysroot_usr_mount_or_fallback(void) { /* OK, so we didn't write anything out for /sysusr/usr/ nor /sysroot/usr/. In this case, let's make * sure that initrd-usr-fs.target is at least ordered after sysroot.mount so that services that order - * themselves get the guarantee that /usr/ is definitely mounted somewhere. */ + * themselves after it get the guarantee that /usr/ is definitely mounted somewhere. */ return generator_add_symlink( arg_dest, From 4953e39c70430e2d46915f8a626ac14fdf31b3d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 18 Apr 2023 11:33:08 +0200 Subject: [PATCH 2/2] gpt-auto-generator: "translate" errno codes into proper messages E.g. in logs on jammy-ppc64el in https://github.com/systemd/systemd/pull/27294: Apr 16 17:42:50 H systemd-gpt-auto-generator[300]: Failed to dissect partition table of block device /dev/sda: No message of desired type Apr 16 17:42:50 H (sd-execu[295]: /usr/lib/systemd/system-generators/systemd-gpt-auto-generator failed with exit status 1. ee0e6e476e61d4baa2a18e241d212753e75003bf made this particular condition not an error. But for other errnos we want to print a better message too. dissect_loop_device_and_warn() already does this, but it always prints the error at error level. We want to suppress some of the errors, so let's make the print helper public and do the error suppression in the caller. --- src/gpt-auto-generator/gpt-auto-generator.c | 9 ++++----- src/shared/dissect-image.c | 7 +++++-- src/shared/dissect-image.h | 1 + 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c index 005df043285..030ada5d6e8 100644 --- a/src/gpt-auto-generator/gpt-auto-generator.c +++ b/src/gpt-auto-generator/gpt-auto-generator.c @@ -761,12 +761,11 @@ static int enumerate_partitions(dev_t devnum) { * on. And thus we also don't set DISSECT_IMAGE_PIN_PARTITION_DEVICES here, because * we don't actually mount anything immediately. */ &m); - if (r == -ENOPKG) { - log_debug_errno(r, "No suitable partition table found on block device %s, ignoring.", devname); - return 0; + if (r < 0) { + bool ok = r == -ENOPKG; + dissect_log_error(ok ? LOG_DEBUG : LOG_ERR, r, devname, NULL); + return ok ? 0 : r; } - if (r < 0) - return log_error_errno(r, "Failed to dissect partition table of block device %s: %m", devname); if (m->partitions[PARTITION_SWAP].found) { k = add_partition_swap(m->partitions + PARTITION_SWAP); diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c index 6bf6636ba3e..63df45c09cd 100644 --- a/src/shared/dissect-image.c +++ b/src/shared/dissect-image.c @@ -1575,7 +1575,8 @@ int dissect_image_file( #endif } -static int dissect_log_error(int r, const char *name, const VeritySettings *verity) { +int dissect_log_error(int log_level, int r, const char *name, const VeritySettings *verity) { + assert(log_level >= 0 && log_level <= LOG_DEBUG); assert(name); switch (r) { @@ -1620,7 +1621,7 @@ static int dissect_log_error(int r, const char *name, const VeritySettings *veri return log_error_errno(r, "%s: no suitable partitions found.", name); default: - return log_error_errno(r, "Failed to dissect image '%s': %m", name); + return log_error_errno(r, "%s: cannot dissect image: %m", name); } } @@ -1633,6 +1634,7 @@ int dissect_image_file_and_warn( DissectedImage **ret) { return dissect_log_error( + LOG_ERR, dissect_image_file(path, verity, mount_options, image_policy, flags, ret), path, verity); @@ -3560,6 +3562,7 @@ int dissect_loop_device_and_warn( assert(loop); return dissect_log_error( + LOG_ERR, dissect_loop_device(loop, verity, mount_options, image_policy, flags, ret), loop->backing_file ?: loop->node, verity); diff --git a/src/shared/dissect-image.h b/src/shared/dissect-image.h index a55ad63d2d0..184e6151ed3 100644 --- a/src/shared/dissect-image.h +++ b/src/shared/dissect-image.h @@ -147,6 +147,7 @@ static inline int probe_filesystem(const char *path, char **ret_fstype) { return probe_filesystem_full(-1, path, 0, UINT64_MAX, ret_fstype); } +int dissect_log_error(int log_level, int r, const char *name, const VeritySettings *verity); int dissect_image_file(const char *path, const VeritySettings *verity, const MountOptions *mount_options, const ImagePolicy *image_policy, DissectImageFlags flags, DissectedImage **ret); int dissect_image_file_and_warn(const char *path, const VeritySettings *verity, const MountOptions *mount_options, const ImagePolicy *image_policy, DissectImageFlags flags, DissectedImage **ret); int dissect_loop_device(LoopDevice *loop, const VeritySettings *verity, const MountOptions *mount_options, const ImagePolicy *image_policy, DissectImageFlags flags, DissectedImage **ret);