summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-05-19 17:19:27 +0200
committerLennart Poettering <lennart@poettering.net>2015-05-19 17:19:27 +0200
commit394763f63c1941cafd9d3bf81e8151a2206474a7 (patch)
treedb09def8045fbf573af58948473bf2cafa4b481f /src/core
parent711e02cb47c7a26f6936ca1b3e49e93ad9cb7696 (diff)
mount: properly check for mounts currently in /proc/self/mountinfo
http://lists.freedesktop.org/archives/systemd-devel/2015-May/032059.html
Diffstat (limited to 'src/core')
-rw-r--r--src/core/mount.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/src/core/mount.c b/src/core/mount.c
index c1a9ea5fa0..ba1dcf1e85 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -1698,7 +1698,18 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents,
if (!mount->is_mounted) {
- /* A mount point is gone */
+ /* A mount point is not around right now. It
+ * might be gone, or might never have
+ * existed. */
+
+ if (mount->from_proc_self_mountinfo &&
+ mount->parameters_proc_self_mountinfo.what) {
+
+ /* Remember that this device might just have disappeared */
+ if (set_ensure_allocated(&gone, &string_hash_ops) < 0 ||
+ set_put(gone, mount->parameters_proc_self_mountinfo.what) < 0)
+ log_oom(); /* we don't care too much about OOM here... */
+ }
mount->from_proc_self_mountinfo = false;
@@ -1715,14 +1726,6 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents,
break;
}
- /* Remember that this device might just have disappeared */
- if (mount->parameters_proc_self_mountinfo.what) {
-
- if (set_ensure_allocated(&gone, &string_hash_ops) < 0 ||
- set_put(gone, mount->parameters_proc_self_mountinfo.what) < 0)
- log_oom(); /* we don't care too much about OOM here... */
- }
-
} else if (mount->just_mounted || mount->just_changed) {
/* A mount point was added or changed */
@@ -1750,13 +1753,15 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents,
mount_set_state(mount, mount->state);
break;
}
+ }
- if (mount->parameters_proc_self_mountinfo.what) {
+ if (mount->is_mounted &&
+ mount->from_proc_self_mountinfo &&
+ mount->parameters_proc_self_mountinfo.what) {
- if (set_ensure_allocated(&around, &string_hash_ops) < 0 ||
- set_put(around, mount->parameters_proc_self_mountinfo.what) < 0)
- log_oom();
- }
+ if (set_ensure_allocated(&around, &string_hash_ops) < 0 ||
+ set_put(around, mount->parameters_proc_self_mountinfo.what) < 0)
+ log_oom();
}
/* Reset the flags for later calls */