[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