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 <behlendorf1@llnl.gov>
Reviewed-by: Richard Laager <rlaager@wiktel.com>
Co-authored-by: Didier Roche <didrocks@ubuntu.com>
Signed-off-by: Didier Roche <didrocks@ubuntu.com>
Closes #10477
This commit is contained in:
Jean-Baptiste Lallement 2020-06-18 19:15:10 +02:00 committed by Brian Behlendorf
parent b717f9b95e
commit ceadc0dbbd

View File

@ -173,6 +173,12 @@ set -eu;\
keystatus=\"\$\$(@sbindir@/zfs get -H -o value keystatus \"${dataset}\")\";\ keystatus=\"\$\$(@sbindir@/zfs get -H -o value keystatus \"${dataset}\")\";\
[ \"\$\$keystatus\" = \"unavailable\" ] || exit 0;\ [ \"\$\$keystatus\" = \"unavailable\" ] || exit 0;\
${keyloadscript}'" ${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 Type=oneshot
RemainAfterExit=yes RemainAfterExit=yes
ExecStart=${keyloadcmd} ExecStart=${keyloadcmd}
ExecStop=@sbindir@/zfs unload-key '${dataset}'" > "${dest_norm}/${keyloadunit}" ExecStop=${keyunloadcmd}" > "${dest_norm}/${keyloadunit}"
fi fi
# Update the dependencies for the mount file to want the # Update the dependencies for the mount file to want the
# key-loading unit. # key-loading unit.