]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: try again bind mounting if the destination was already created
authorLuca Boccassi <bluca@debian.org>
Sat, 29 Jun 2024 17:31:23 +0000 (18:31 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sat, 29 Jun 2024 22:44:03 +0000 (00:44 +0200)
If the destination mount point is on a shared filesystem and is
missing on the first attempt, we try to create it, but then
fail with -EEXIST if something else created it in the meanwhile.
Enter the retry logic on EEXIST, as we can just use the mount
point if it was already created.

Fixes https://github.com/systemd/systemd/issues/29690

src/core/namespace.c

index 57518ad7ff8402a73570d98b3d353800ca374f71..7b26792790102e3936199d7d8af2cf99d351b58a 100644 (file)
@@ -1762,11 +1762,11 @@ static int apply_one_mount(
                         (void) mkdir_parents(mount_entry_path(m), 0755);
 
                         q = make_mount_point_inode_from_path(what, mount_entry_path(m), 0755);
-                        if (q < 0) {
-                                if (q != -EEXIST) // FIXME: this shouldn't be logged at LOG_WARNING, but be bubbled up, and logged there to avoid duplicate logging
-                                        log_warning_errno(q, "Failed to create destination mount point node '%s', ignoring: %m",
-                                                          mount_entry_path(m));
-                        else
+                        if (q < 0 && q != -EEXIST)
+                                // FIXME: this shouldn't be logged at LOG_WARNING, but be bubbled up, and logged there to avoid duplicate logging
+                                log_warning_errno(q, "Failed to create destination mount point node '%s', ignoring: %m",
+                                                  mount_entry_path(m));
+                        else
                                 try_again = true;
                 }