diff --git a/man/systemd.path.xml b/man/systemd.path.xml
index cc2d366198..1975142d2c 100644
--- a/man/systemd.path.xml
+++ b/man/systemd.path.xml
@@ -88,16 +88,15 @@
point in the file system hierarchy, a dependency
between both units is created automatically.
- Unless DefaultDependencies=
- is set to , path units will
- implicitly have dependencies of type
- Conflicts= and
+ Unless DefaultDependencies=false
+ is used, path units will implicitly have dependencies of
+ type Conflicts= and
Before= on
shutdown.target. These ensure
that path units are terminated cleanly prior to system
shutdown. Only path units involved with early boot or
- late system shutdown should disable this
- option.
+ late system shutdown should disable this option.
+
@@ -157,7 +156,7 @@
assignments of these options will not
have any effect.
- If a path is already existing
+ If a path already exists
(in case of
PathExists= and
PathExistsGlob=) or
@@ -168,7 +167,15 @@
activated, then the configured unit is
immediately activated as
well. Something similar does not apply
- to PathChanged=.
+ to PathChanged= and
+ PathModified=.
+
+ If the path itself or any of the
+ containing directories are not
+ accessible, systemd
+ will watch for permission changes and
+ notice that conditions are satisfied
+ when permissions allow that.
diff --git a/src/core/path.c b/src/core/path.c
index dcb3b1ff60..fc101280a1 100644
--- a/src/core/path.c
+++ b/src/core/path.c
@@ -79,6 +79,11 @@ int path_spec_watch(PathSpec *s, Unit *u) {
s->primary_wd = inotify_add_watch(s->inotify_fd, k, flags_table[s->type]);
if (s->primary_wd >= 0)
exists = true;
+ else if (errno != EACCES && errno != ENOENT) {
+ log_error("Failed to add watch on %s: %m", k);
+ r = -errno;
+ goto fail;
+ }
do {
int flags;
@@ -97,8 +102,20 @@ int path_spec_watch(PathSpec *s, Unit *u) {
if (inotify_add_watch(s->inotify_fd, k, flags) >= 0)
exists = true;
+ else if (errno != EACCES && errno != ENOENT) {
+ log_error("Failed to add watch on %s: %m", k);
+ r = -errno;
+ goto fail;
+ }
} while (slash != k);
+ if (!exists) {
+ log_error("Failed to add watch on any of the components of %s: %m",
+ s->path);
+ r = -errno;
+ goto fail;
+ }
+
return 0;
fail: