[systemd-commits] catalog/systemd.catalog src/core src/shared src/systemd TODO

Zbigniew Jędrzejewski-Szmek zbyszek at kemper.freedesktop.org
Wed Dec 5 03:27:30 PST 2012


 TODO                      |    2 --
 catalog/systemd.catalog   |   13 +++++++++++++
 src/core/automount.c      |    4 ++--
 src/core/execute.c        |    3 +--
 src/core/mount.c          |   16 ++++++++++++++--
 src/core/mount.h          |    2 ++
 src/shared/log.h          |    1 +
 src/systemd/sd-messages.h |    2 ++
 8 files changed, 35 insertions(+), 8 deletions(-)

New commits:
commit 20ad4cfd8e5592f634f20468798cbc1055ab9faf
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Wed Dec 5 11:59:05 2012 +0100

    core: add catalog entry and MESSAGE_ID for overmounting

diff --git a/TODO b/TODO
index c99ab6d..9ddfb5c 100644
--- a/TODO
+++ b/TODO
@@ -43,8 +43,6 @@ Features:
   include _SYSTEMD_UNIT= fields so that "systemctl status" can show
   them along with the unit
 
-* define a message ID for "overmounting non-empty directory" and write message catalog entry for it
-
 * use polkit "imply" for binding hostname actions together
 
 * journal: when waiting for journal additions always sleep at least 1s or so, in order to minimize wakeups
diff --git a/catalog/systemd.catalog b/catalog/systemd.catalog
index c2f38a3..5dcbd46 100644
--- a/catalog/systemd.catalog
+++ b/catalog/systemd.catalog
@@ -276,3 +276,16 @@ One or more messages could not be forwarded to the syslog service
 running side-by-side with journald. This usually indicates that the
 syslog implementation has not been able to keep up with the speed of
 messages queued.
+
+-- 1dee0369c7fc4736b7099b38ecb46ee7
+Subject: Mount point is not empty
+Defined-By: systemd
+Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+
+The directory @WHERE@ is specified as the mount point (second field in
+/etc/fstab or Where= field in systemd unit file) and is not empty.
+This does not interfere with mounting, but the pre-exisiting files in
+this directory become inaccessible. To see those over-mounted files,
+please manually mount the underlying file system to a secondary
+location.
diff --git a/src/core/automount.c b/src/core/automount.c
index 5bf59df..7477664 100644
--- a/src/core/automount.c
+++ b/src/core/automount.c
@@ -31,6 +31,7 @@
 
 #include "unit.h"
 #include "automount.h"
+#include "mount.h"
 #include "load-fragment.h"
 #include "load-dropin.h"
 #include "unit-name.h"
@@ -507,8 +508,7 @@ static void automount_enter_waiting(Automount *a) {
         /* We knowingly ignore the results of this call */
         mkdir_p_label(a->where, 0555);
 
-        if (dir_is_empty(a->where) <= 0)
-                log_notice("%s: Directory %s to mount over is not empty, mounting anyway. (To see the over-mounted files, please manually mount the underlying file system to a secondary location.)", a->meta.id, a->where);
+        warn_if_dir_nonempty(a->meta.id, a->where);
 
         if (pipe2(p, O_NONBLOCK|O_CLOEXEC) < 0) {
                 r = -errno;
diff --git a/src/core/execute.c b/src/core/execute.c
index e236d38..7628470 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -50,6 +50,7 @@
 #include "capability.h"
 #include "util.h"
 #include "log.h"
+#include "sd-messages.h"
 #include "ioprio.h"
 #include "securebits.h"
 #include "cgroup.h"
@@ -62,8 +63,6 @@
 #include "loopback-setup.h"
 #include "path-util.h"
 #include "syscall-list.h"
-#include "sd-id128.h"
-#include "sd-messages.h"
 
 #define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC)
 
diff --git a/src/core/mount.c b/src/core/mount.c
index 09a5d28..f263d9b 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -30,6 +30,7 @@
 #include "load-fragment.h"
 #include "load-dropin.h"
 #include "log.h"
+#include "sd-messages.h"
 #include "strv.h"
 #include "mkdir.h"
 #include "path-util.h"
@@ -927,6 +928,18 @@ fail:
                 set_free(pid_set);
 }
 
+void warn_if_dir_nonempty(const char *unit, const char* where) {
+        if (dir_is_empty(where) > 0)
+                return;
+        log_struct(LOG_NOTICE,
+                   "MESSAGE=%s: Directory %s to mount over is not empty, mounting anyway.",
+                   unit, where,
+                   "WHERE=%s", where,
+                   "_SYSTEMD_UNIT=%s", unit,
+                   MESSAGE_ID(SD_MESSAGE_OVERMOUNTING),
+                   NULL);
+}
+
 static void mount_enter_unmounting(Mount *m) {
         int r;
 
@@ -967,8 +980,7 @@ static void mount_enter_mounting(Mount *m) {
 
         mkdir_p_label(m->where, m->directory_mode);
 
-        if (dir_is_empty(m->where) <= 0)
-                log_notice("%s: Directory %s to mount over is not empty, mounting anyway. (To see the over-mounted files, please manually mount the underlying file system to a secondary location.)", m->meta.id, m->where);
+        warn_if_dir_nonempty(m->meta.id, m->where);
 
         /* Create the source directory for bind-mounts if needed */
         p = get_mount_parameters_fragment(m);
diff --git a/src/core/mount.h b/src/core/mount.h
index 67d6132..30c6d9b 100644
--- a/src/core/mount.h
+++ b/src/core/mount.h
@@ -119,3 +119,5 @@ MountExecCommand mount_exec_command_from_string(const char *s);
 
 const char* mount_result_to_string(MountResult i);
 MountResult mount_result_from_string(const char *s);
+
+void warn_if_dir_nonempty(const char *unit, const char* where);
diff --git a/src/shared/log.h b/src/shared/log.h
index 1bd9dbf..5c946fa 100644
--- a/src/shared/log.h
+++ b/src/shared/log.h
@@ -27,6 +27,7 @@
 #include <errno.h>
 
 #include "macro.h"
+#include "sd-id128.h"
 
 typedef enum LogTarget{
         LOG_TARGET_CONSOLE,
diff --git a/src/systemd/sd-messages.h b/src/systemd/sd-messages.h
index b8b78d1..bc56094 100644
--- a/src/systemd/sd-messages.h
+++ b/src/systemd/sd-messages.h
@@ -65,6 +65,8 @@ extern "C" {
 
 #define SD_MESSAGE_FORWARD_SYSLOG_MISSED SD_ID128_MAKE(00,27,22,9c,a0,64,41,81,a7,6c,4e,92,45,8a,fa,2e)
 
+#define SD_MESSAGE_OVERMOUNTING     SD_ID128_MAKE(1d,ee,03,69,c7,fc,47,36,b7,09,9b,38,ec,b4,6e,e7)
+
 #ifdef __cplusplus
 }
 #endif



More information about the systemd-commits mailing list