]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: don't report fsconfig errors with "nofail"
authorKarel Zak <kzak@redhat.com>
Thu, 11 Sep 2025 07:35:58 +0000 (09:35 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 11 Sep 2025 08:55:19 +0000 (10:55 +0200)
The new kernel API returns EINVAL on FSCONFIG_CMD_CREATE if the mount
source is inaccessible. We do not want to report this as an error when
the "nofail" mount option is specified.

Note that EINVAL may also be returned by other fsconfig() settings, so
we need to check whether a source is specified and whether it is really
inaccessible. This is just a heuristic (as with the old mount(2)).

Fixes: https://github.com/util-linux/util-linux/issues/3741
Signed-off-by: Karel Zak <kzak@redhat.com>
(cherry picked from commit 8a7bc1ab00d91e8a17ca8cb2907ca3c2a73381dd)

libmount/src/context_mount.c

index 2631d338f653782c7e3fbbf4c7076a5460bedb62..ee3eadb055e795520979f6edb2c05426de52978d 100644 (file)
@@ -1662,6 +1662,12 @@ int mnt_context_get_mount_excode(
 
        /* Error with already generated messages (by kernel or libmount) */
        if (buf && mnt_context_get_nmesgs(cxt, 'e')) {
+               if (syserr == ENOENT
+                   && uflags & MNT_MS_NOFAIL
+                   && cxt->syscall_name && strcmp(cxt->syscall_name, "fsconfig") == 0
+                   && src && !mnt_is_path(src))
+                       return MNT_EX_SUCCESS;
+
                if (cxt->syscall_name) {
                        size_t len = snprintf(buf, bufsz,
                                        _("%s() failed: "),