From e5e6b7c225987551ebda14d2d7feadb66a64fb3c Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 26 Jul 2022 23:15:01 +0900 Subject: [PATCH 1/2] Revert "core/mount: fail early if directory cannot be created" This reverts commit e4de58c8231e47509ffeb3aa47620ca42f22d7f6. If mkdir() fails and the path does exist, then the later mount command fails anyway. Hence, it is not necessary to fail here. Fixes #24120. --- src/core/mount.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/core/mount.c b/src/core/mount.c index 836ba132cb..015a77221a 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1054,10 +1054,8 @@ static void mount_enter_mounting(Mount *m) { r = mkdir_p_label(p->what, m->directory_mode); /* mkdir_p_label() can return -EEXIST if the target path exists and is not a directory - which is * totally OK, in case the user wants us to overmount a non-directory inode. */ - if (r < 0 && r != -EEXIST) { + if (r < 0 && r != -EEXIST) log_unit_error_errno(UNIT(m), r, "Failed to make bind mount source '%s': %m", p->what); - goto fail; - } } if (p) { From 574febda6b0e00aae164b18b70aa80744d950500 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 26 Jul 2022 23:23:01 +0900 Subject: [PATCH 2/2] core/mount: downgrade log level about several mkdir failures --- src/core/mount.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/mount.c b/src/core/mount.c index 015a77221a..d22e7dec59 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1053,9 +1053,13 @@ static void mount_enter_mounting(Mount *m) { if (p && mount_is_bind(p)) { r = mkdir_p_label(p->what, m->directory_mode); /* mkdir_p_label() can return -EEXIST if the target path exists and is not a directory - which is - * totally OK, in case the user wants us to overmount a non-directory inode. */ + * totally OK, in case the user wants us to overmount a non-directory inode. Also -EROFS can be + * returned on read-only filesystem. Moreover, -EACCES (and also maybe -EPERM?) may be returned + * when the path is on NFS. See issue #24120. All such errors will be logged in the debug level. */ if (r < 0 && r != -EEXIST) - log_unit_error_errno(UNIT(m), r, "Failed to make bind mount source '%s': %m", p->what); + log_unit_full_errno(UNIT(m), + (r == -EROFS || ERRNO_IS_PRIVILEGE(r)) ? LOG_DEBUG : LOG_WARNING, + r, "Failed to make bind mount source '%s', ignoring: %m", p->what); } if (p) {