[systemd-devel] [PATCH] systemd-udevd.service: restore mount propagation
Zbigniew Jędrzejewski-Szmek
zbyszek at in.waw.pl
Wed Jan 28 07:29:03 PST 2015
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 <martin.pitt at ubuntu.com>
> 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 <martin.pitt at ubuntu.com>
> 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
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel
More information about the systemd-devel
mailing list