From 5729ae8029f9b19438f210f3e3ead326cf252645 Mon Sep 17 00:00:00 2001 From: Lukas Wunner Date: Tue, 3 Feb 2015 19:32:55 +0100 Subject: [PATCH] 90dm/dm-shutdown.sh: dmsetup remove_all -> dmsetup remove The function 99shutdown/shutdown.sh:_check_shutdown() assumes that shutdown scripts report success or failure via their return value. However, "dmsetup remove_all" always reports success, even if some of the device mappings could not be removed. I submitted a patch for dmsetup but the lvm2 folks rejected it, asserting that its behaviour is correct, that "remove_all" should only be used by developers and that the proper solution would be to invoke "dmsetup remove" on each device. This does report success or failure via the return value. Apart from fixing that issue, this commit also adds the dmsetup option "--noudevsync". Without it, dmsetup would hang after removal of a device while trying to communicate with systemd-udevd, which is no longer running at this shutdown stage. [harald: replaces backticks with $() ] --- modules.d/90dm/dm-shutdown.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules.d/90dm/dm-shutdown.sh b/modules.d/90dm/dm-shutdown.sh index dfdb48b..04c89be 100755 --- a/modules.d/90dm/dm-shutdown.sh +++ b/modules.d/90dm/dm-shutdown.sh @@ -1,11 +1,12 @@ #!/bin/sh _do_dm_shutdown() { - local ret + local ret=0 local final=$1 info "Disassembling device-mapper devices" - dmsetup -v remove_all - ret=$? + for dev in $(dmsetup info -c --noheadings -o name) ; do + dmsetup -v --noudevsync remove "$dev" || ret=$? + done if [ "x$final" != "x" ]; then info "dmsetup ls --tree" dmsetup ls --tree 2>&1 | vinfo