From ceadc0dbbd5594db153a61c3d82a6d98e1adca7d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lallement Date: Thu, 18 Jun 2020 19:15:10 +0200 Subject: [PATCH] Make unloading the key more robust The unit was failing instead of stopping if someone manually unloaded the key before stopping the unit (zfs unload-key is failing on an unavailable key). Follow a similar logic than for loading the key, checking for the key status before unloading it. Reviewed-by: Brian Behlendorf Reviewed-by: Richard Laager Co-authored-by: Didier Roche Signed-off-by: Didier Roche Closes #10477 --- etc/systemd/system-generators/zfs-mount-generator.in | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/etc/systemd/system-generators/zfs-mount-generator.in b/etc/systemd/system-generators/zfs-mount-generator.in index f7a5161ec3..fdef13cfa9 100755 --- a/etc/systemd/system-generators/zfs-mount-generator.in +++ b/etc/systemd/system-generators/zfs-mount-generator.in @@ -173,6 +173,12 @@ set -eu;\ keystatus=\"\$\$(@sbindir@/zfs get -H -o value keystatus \"${dataset}\")\";\ [ \"\$\$keystatus\" = \"unavailable\" ] || exit 0;\ ${keyloadscript}'" + keyunloadcmd="\ +/bin/sh -c '\ +set -eu;\ +keystatus=\"\$\$(@sbindir@/zfs get -H -o value keystatus \"${dataset}\")\";\ +[ \"\$\$keystatus\" = \"available\" ] || exit 0;\ +@sbindir@/zfs unload-key \"${dataset}\"'" @@ -199,7 +205,7 @@ ${keymountdep} Type=oneshot RemainAfterExit=yes ExecStart=${keyloadcmd} -ExecStop=@sbindir@/zfs unload-key '${dataset}'" > "${dest_norm}/${keyloadunit}" +ExecStop=${keyunloadcmd}" > "${dest_norm}/${keyloadunit}" fi # Update the dependencies for the mount file to want the # key-loading unit.