diff options
author | Milton Miller <miltonm@us.ibm.com> | 2016-05-23 19:17:55 -0500 |
---|---|---|
committer | Milton Miller <miltonm@us.ibm.com> | 2016-06-30 14:46:43 -0500 |
commit | aa42dfda27582483ccf907720d4bb2e386b6d761 (patch) | |
tree | b25ae141e4fac5c7d588d66e825747515989582b /meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs | |
parent | 694e44e047a6272f75d29171c9be847b0fbce659 (diff) | |
download | talos-openbmc-aa42dfda27582483ccf907720d4bb2e386b6d761.tar.gz talos-openbmc-aa42dfda27582483ccf907720d4bb2e386b6d761.zip |
initfs: update: check individual mtd partitions for mounts
Instead of checking for any mtd device, only check mtd devices
that are to be updated. Include child mtd devices when looking
for mounted filesystems.
If this check is suppressed flash updates are suppressed.
Suppressing the check may be useful to verify a update could
succeed at shutdown.
Signed-off-by: Milton Miller <miltonm@us.ibm.com>
Diffstat (limited to 'meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs')
-rwxr-xr-x | meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-update.sh | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-update.sh b/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-update.sh index 9f5bede43..9d3c81276 100755 --- a/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-update.sh +++ b/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-update.sh @@ -23,11 +23,34 @@ then mount -t devtmpfs dev dev fi -if grep mtd /proc/mounts -then - echoerr "A mtd device is mounted." - exit 1 -fi +# mtd number N with mtd name Name can be mounted via mtdN, or mtd:Name +# (with a mtd aware fs) or by /dev/mtdblockN (with a mtd or block fs). +mtdismounted() { + m=${1##mtd} + if grep -s "mtdblock$m " /proc/mounts || grep -s "mtd$m " /proc/mounts + then + return 0 + fi + n=$(cat /sys/class/mtd/mtd$m/name) + if test -n "$n" && grep -s "mtd:$n " /proc/mounts + then + return 0 + fi + return 1 +} + +# Detect child partitions when the whole flash is to be updated. +# Ignore mtdNro and mtdblockN names in the class subsystem directory. +childmtds() { + for m in /sys/class/mtd/$1/mtd* + do + m=${m##*/} + if test "${m%ro}" = "${m#mtdblock}" + then + echo $m + fi + done +} findmtd() { m=$(grep -xl "$1" /sys/class/mtd/*/name) @@ -66,6 +89,7 @@ doclean= dosave=y dorestore=y toram= +checkmount=y whitelist=/run/initramfs/whitelist image=/run/initramfs/image- @@ -94,6 +118,10 @@ do --no-flash) doflash= shift ;; + --ignore-mount) + checkmount= + doflash= + shift ;; --copy-files) toram=y shift ;; @@ -137,6 +165,14 @@ do echoerr "Unable to find mtd partiton for ${f##*/}." exit 1 fi + for s in $m $(childmtds $m) + do + if test -n "$checkmount" && mtdismounted $s + then + echoerr "Device $s is mounted, ${f##*/} is busy." + exit 1 + fi + done done if test -n "$doflash" |