core: add catalog entry and MESSAGE_ID for overmounting
This commit is contained in:
parent
f3ffced541
commit
20ad4cfd8e
2
TODO
2
TODO
|
@ -43,8 +43,6 @@ Features:
|
||||||
include _SYSTEMD_UNIT= fields so that "systemctl status" can show
|
include _SYSTEMD_UNIT= fields so that "systemctl status" can show
|
||||||
them along with the unit
|
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
|
* 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
|
* journal: when waiting for journal additions always sleep at least 1s or so, in order to minimize wakeups
|
||||||
|
|
|
@ -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
|
running side-by-side with journald. This usually indicates that the
|
||||||
syslog implementation has not been able to keep up with the speed of
|
syslog implementation has not been able to keep up with the speed of
|
||||||
messages queued.
|
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.
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
|
|
||||||
#include "unit.h"
|
#include "unit.h"
|
||||||
#include "automount.h"
|
#include "automount.h"
|
||||||
|
#include "mount.h"
|
||||||
#include "load-fragment.h"
|
#include "load-fragment.h"
|
||||||
#include "load-dropin.h"
|
#include "load-dropin.h"
|
||||||
#include "unit-name.h"
|
#include "unit-name.h"
|
||||||
|
@ -507,8 +508,7 @@ static void automount_enter_waiting(Automount *a) {
|
||||||
/* We knowingly ignore the results of this call */
|
/* We knowingly ignore the results of this call */
|
||||||
mkdir_p_label(a->where, 0555);
|
mkdir_p_label(a->where, 0555);
|
||||||
|
|
||||||
if (dir_is_empty(a->where) <= 0)
|
warn_if_dir_nonempty(a->meta.id, a->where);
|
||||||
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);
|
|
||||||
|
|
||||||
if (pipe2(p, O_NONBLOCK|O_CLOEXEC) < 0) {
|
if (pipe2(p, O_NONBLOCK|O_CLOEXEC) < 0) {
|
||||||
r = -errno;
|
r = -errno;
|
||||||
|
|
|
@ -50,6 +50,7 @@
|
||||||
#include "capability.h"
|
#include "capability.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "sd-messages.h"
|
||||||
#include "ioprio.h"
|
#include "ioprio.h"
|
||||||
#include "securebits.h"
|
#include "securebits.h"
|
||||||
#include "cgroup.h"
|
#include "cgroup.h"
|
||||||
|
@ -62,8 +63,6 @@
|
||||||
#include "loopback-setup.h"
|
#include "loopback-setup.h"
|
||||||
#include "path-util.h"
|
#include "path-util.h"
|
||||||
#include "syscall-list.h"
|
#include "syscall-list.h"
|
||||||
#include "sd-id128.h"
|
|
||||||
#include "sd-messages.h"
|
|
||||||
|
|
||||||
#define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC)
|
#define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC)
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "load-fragment.h"
|
#include "load-fragment.h"
|
||||||
#include "load-dropin.h"
|
#include "load-dropin.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "sd-messages.h"
|
||||||
#include "strv.h"
|
#include "strv.h"
|
||||||
#include "mkdir.h"
|
#include "mkdir.h"
|
||||||
#include "path-util.h"
|
#include "path-util.h"
|
||||||
|
@ -927,6 +928,18 @@ fail:
|
||||||
set_free(pid_set);
|
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) {
|
static void mount_enter_unmounting(Mount *m) {
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -967,8 +980,7 @@ static void mount_enter_mounting(Mount *m) {
|
||||||
|
|
||||||
mkdir_p_label(m->where, m->directory_mode);
|
mkdir_p_label(m->where, m->directory_mode);
|
||||||
|
|
||||||
if (dir_is_empty(m->where) <= 0)
|
warn_if_dir_nonempty(m->meta.id, m->where);
|
||||||
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);
|
|
||||||
|
|
||||||
/* Create the source directory for bind-mounts if needed */
|
/* Create the source directory for bind-mounts if needed */
|
||||||
p = get_mount_parameters_fragment(m);
|
p = get_mount_parameters_fragment(m);
|
||||||
|
|
|
@ -119,3 +119,5 @@ MountExecCommand mount_exec_command_from_string(const char *s);
|
||||||
|
|
||||||
const char* mount_result_to_string(MountResult i);
|
const char* mount_result_to_string(MountResult i);
|
||||||
MountResult mount_result_from_string(const char *s);
|
MountResult mount_result_from_string(const char *s);
|
||||||
|
|
||||||
|
void warn_if_dir_nonempty(const char *unit, const char* where);
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
|
#include "sd-id128.h"
|
||||||
|
|
||||||
typedef enum LogTarget{
|
typedef enum LogTarget{
|
||||||
LOG_TARGET_CONSOLE,
|
LOG_TARGET_CONSOLE,
|
||||||
|
|
|
@ -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_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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue