Martin Pitt [2015-05-19 15:17 +0200]: > My first hunch is that this is caused by calling > mount_load_proc_self_mountinfo() in mount_dispatch_io() > (src/core/mount.c:1682) *before* it goes through that new > SET_FOREACH() loop. That call will already see the removed mount and > call device_found_node() with the removal.
That was a red herring. Turns out that your patch only added devices to "around" which had "mount->just_mounted || mount->just_changed", which is obviously not the case for mounts which have been around for a while (and these are the ones we need to keep!). This patch fixes that; although I'm unsure yet whether we *also* need to record the ones with "mount->just_mounted || mount->just_changed"; my gut feeling says yes, and we need to restructure this a bit to run the set_put(around, ...) for all mount->is_mounted Mount units. WDYT? Anyway, with this it behaves as it should. Martin -- Martin Pitt | http://www.piware.de Ubuntu Developer (www.ubuntu.com) | Debian Developer (www.debian.org)
From fb089bb6dfccd63b395fbda8461bba6ad3541827 Mon Sep 17 00:00:00 2001 From: Martin Pitt <martin.p...@ubuntu.com> Date: Tue, 19 May 2015 15:55:23 +0200 Subject: [PATCH] mount: Fix mountinfo check for devices which are still around Fix commit fcd8b266: For recording the devices for which there are still mounts around in mountinfo we need to consider the mounts which did *not* just get mounted or changed, but actually have existed for a longer time. TODO: check if we *also* need to consider mounts with just_{mounted,changed} --- src/core/mount.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/core/mount.c b/src/core/mount.c index c1a9ea5..06e0807 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1751,12 +1751,11 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, break; } - if (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(); - } + } else if (mount->state != MOUNT_DEAD && mount->state != MOUNT_FAILED && + 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(); } /* Reset the flags for later calls */ -- 2.1.4
signature.asc
Description: Digital signature
_______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel