summaryrefslogtreecommitdiff
path: root/initramfs/script
diff options
context:
space:
mode:
authorTim Schlueter <schlueter.tim@linux.com>2018-02-25 16:56:04 -0800
committerTim Schlueter <schlueter.tim@linux.com>2018-02-25 17:22:39 -0800
commitc3b8d74200c0060678aa05bafe8ef2dadb25bdba (patch)
tree0a9c59146033c3181b08766663048da72860bea5 /initramfs/script
parentcdf17bffadb3346ea4424357b5bb85de852231e9 (diff)
Initramfs script improvements
- Resolve the root device, so it can be specified by UUID, etc. - Exit immediately if the ROOTFSTYPE is set and not bcachefs - Only try to unlock the device 3 times before opening a shell or rebooting (depending on kernel cmdline)
Diffstat (limited to 'initramfs/script')
-rwxr-xr-xinitramfs/script39
1 files changed, 34 insertions, 5 deletions
diff --git a/initramfs/script b/initramfs/script
index bd64b41f..e22ace9c 100755
--- a/initramfs/script
+++ b/initramfs/script
@@ -15,11 +15,40 @@ prereqs)
;;
esac
-# Check if it needs unlocking:
-if bcachefs unlock -c $ROOT >/dev/null 2>&1; then
- echo "Unlocking $ROOT:"
+# Nothing to do if ROOTFSTYPE is set to something other than bcachefs
+if [ -n "$ROOTFSTYPE" -a "$ROOTFSTYPE" != bcachefs ]; then
+ exit 0
+fi
+
+# source for resolve_device() and panic() functions
+. /scripts/functions
+
+# Resolve the root device (e.g. if root is specified by UUID)
+DEV=$(resolve_device "$ROOT")
- while true; do
- bcachefs unlock $ROOT && break
+# Check if the root device needs unlocking:
+if bcachefs unlock -c $DEV >/dev/null 2>&1; then
+ if [ "$DEV" == "$ROOT" ]; then
+ echo "Please unlock $DEV:"
+ else
+ echo "Please unlock $DEV ($ROOT):"
+ fi
+
+ count=0
+ tries=3
+ while [ $tries -le 0 -o $count -lt $tries ]; do
+ if bcachefs unlock "$DEV"; then
+ echo "Bcachefs: $DEV successfully unlocked"
+ break
+ fi
+
+ let count++
done
+
+ if [ $tries -gt 0 -a $count -ge $tries ]; then
+ panic "Bcachefs: maximum number of tries exceeded for $DEV"
+ exit 1
+ fi
fi
+
+exit 0