From: Luca Boccassi Date: Sat, 29 Jun 2024 17:31:23 +0000 (+0100) Subject: core: try again bind mounting if the destination was already created X-Git-Tag: v257-rc1~1010 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c3f0f6f8bd812fee4b2ab658a5cc9ac9167d387d;p=thirdparty%2Fsystemd.git core: try again bind mounting if the destination was already created 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 --- diff --git a/src/core/namespace.c b/src/core/namespace.c index 57518ad7ff8..7b267927901 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -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; }