summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørnar Ness <bjornar.ness@gmail.com>2016-04-01 17:31:55 +0200
committerBjørnar Ness <bjornar.ness@gmail.com>2016-04-01 17:31:55 +0200
commitb97e83cb52d63600921ceb30f15c1ff349790841 (patch)
treef9a849a25ba861d8f65aba245fa2820b9f5c7a73
parent1db30aeab10ca716aae877b298289fe1765f14fb (diff)
prevent systemd-nspawn from trying to create target
for bind-mounts when they already exist. This allows bind-mounting over read-only files.
-rw-r--r--src/nspawn/nspawn-mount.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c
index 64cb6b3ce3..8e2d2d543c 100644
--- a/src/nspawn/nspawn-mount.c
+++ b/src/nspawn/nspawn-mount.c
@@ -438,21 +438,22 @@ static int mount_bind(const char *dest, CustomMount *m) {
r = mkdir_parents_label(where, 0755);
if (r < 0)
return log_error_errno(r, "Failed to make parents of %s: %m", where);
+
+ /* Create the mount point. Any non-directory file can be
+ * mounted on any non-directory file (regular, fifo, socket,
+ * char, block).
+ */
+ if (S_ISDIR(source_st.st_mode))
+ r = mkdir_label(where, 0755);
+ else
+ r = touch(where);
+ if (r < 0)
+ return log_error_errno(r, "Failed to create mount point %s: %m", where);
+
} else {
return log_error_errno(errno, "Failed to stat %s: %m", where);
}
- /* Create the mount point. Any non-directory file can be
- * mounted on any non-directory file (regular, fifo, socket,
- * char, block).
- */
- if (S_ISDIR(source_st.st_mode))
- r = mkdir_label(where, 0755);
- else
- r = touch(where);
- if (r < 0 && r != -EEXIST)
- return log_error_errno(r, "Failed to create mount point %s: %m", where);
-
if (mount(m->source, where, NULL, mount_flags, mount_opts) < 0)
return log_error_errno(errno, "mount(%s) failed: %m", where);