On Wed, Jan 28, 2015 at 02:09:37PM +0100, Martin Pitt wrote: > Lennart Poettering [2015-01-28 13:33 +0100]: > > Hmm, yeah, we apparently only add that for file systems listed in > > /etc/fstab... > > > > If you change the "get_mount_parameters_fragment()" invocation at the > > beginning of mount_add_device_links() in src/core/mount.c to > > "get_mount_parameters()", does this make things work for you? > > > > This change might have more effects than just making this work, but I > > think it's the right thing to do. Could you test please? > > BAZINGA! Thanks for this, now it works perfectly! Now the mount unit > looks like this: > > | Where=/media/martin/Ubuntu 15.04 amd64 > | What=/dev/sr0 > | [...] > | Id=media-martin-Ubuntu\x5cx2015.04\x5cx20amd64.mount > | Names=media-martin-Ubuntu\x5cx2015.04\x5cx20amd64.mount > | Requires=-.mount > | Wants=system.slice > | BindsTo=dev-sr0.device > | WantedBy=dev-sr0.device > | Conflicts=umount.target > | Before=local-fs.target umount.target This looks wrong. It should have no relation to local-fs.target, which is only for things from /etc/fstab (and manually created .mount units).
Zbyszek > | After=system.slice -.mount local-fs-pre.target systemd-journald.socket > dev-sr0.device > | [...] > > and requesting the CD eject causes cdrom_id --eject, which triggers > the new DISK_MEDIA_CHANGE rule, which stops the .device unit, which in > turn stops the .mount unit. > > Patches attached for both parts of the issue. The first one is really > "your" patch, so please do commit yourself if you prefer (feel free to > steal any or all of my patch description, of course). > > I'll also adjust the fd.o bug report accordingly. > > Thanks, > > Martin > -- > Martin Pitt | http://www.piware.de > Ubuntu Developer (www.ubuntu.com) | Debian Developer (www.debian.org) > From 0e7493429c017d8a74a299a3e60278c4f68af430 Mon Sep 17 00:00:00 2001 > From: Martin Pitt <[email protected]> > Date: Wed, 28 Jan 2015 13:53:25 +0100 > Subject: [PATCH 1/2] core/mount: add dependencies to dynamically mounted > mounts too > > Add unit dependencies for dynamic (i. e. not from fstab) mounts. With that, > mount units properly bind to their underlying device, and thus get > automatically stopped/unmounted when the underlying device goes away. > > This cleans up stale mounts from unplugged devices. > > Thanks to Lennart Poettering for pointing out the fix! > --- > src/core/mount.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/core/mount.c b/src/core/mount.c > index f944c02..b13712f 100644 > --- a/src/core/mount.c > +++ b/src/core/mount.c > @@ -300,7 +300,7 @@ static int mount_add_device_links(Mount *m) { > > assert(m); > > - p = get_mount_parameters_fragment(m); > + p = get_mount_parameters(m); > if (!p) > return 0; > > -- > 2.1.4 > > From 0cc891bcd8d3fa9967dd733292caf86a43dd3503 Mon Sep 17 00:00:00 2001 > From: Martin Pitt <[email protected]> > Date: Wed, 28 Jan 2015 13:57:47 +0100 > Subject: [PATCH 2/2] rules: clean up stale CD drive mounts after ejection > > Ejecting a CD with the hardware drive button only causes a change uevent, but > the device node stays around (just without a medium). Pick up these uevents > and > mark the device as SYSTEMD_READY=0 on ejection, so that systemd stops the > device unit and consequently all mount units on it. > > On media insertion, mark the device as SYSTEMD_READY=1 again. > > https://bugs.freedesktop.org/show_bug.cgi?id=72206 > https://bugzilla.opensuse.org/show_bug.cgi?id=909418 > https://bugs.archlinux.org/task/42071 > https://bugs.launchpad.net/bugs/1168742 > --- > rules/60-cdrom_id.rules | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/rules/60-cdrom_id.rules b/rules/60-cdrom_id.rules > index 6eaf76a..7bfb12e 100644 > --- a/rules/60-cdrom_id.rules > +++ b/rules/60-cdrom_id.rules > @@ -15,6 +15,12 @@ ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id > --eject-media $devnode", GOTO="cdr > # enable the receiving of media eject button events > IMPORT{program}="cdrom_id --lock-media $devnode" > > +# ejecting a CD does not remove the device node, so mark the systemd device > +# unit as inactive while there is no medium; this automatically cleans up of > +# stale mounts after ejecting > +ENV{DISK_MEDIA_CHANGE}=="?*", ENV{ID_CDROM_MEDIA}!="?*", > ENV{SYSTEMD_READY}="0" > +ENV{DISK_MEDIA_CHANGE}=="?*", ENV{ID_CDROM_MEDIA}=="?*", > ENV{SYSTEMD_READY}="1" > + > KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100" > > LABEL="cdrom_end" > -- > 2.1.4 > > _______________________________________________ > systemd-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/systemd-devel _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
