summaryrefslogtreecommitdiffstats
path: root/meta-phosphor/common
diff options
context:
space:
mode:
authorMilton Miller <miltonm@us.ibm.com>2016-05-23 19:17:55 -0500
committerMilton Miller <miltonm@us.ibm.com>2016-06-25 17:55:45 -0500
commit810dc707814e454807cd4ea6b52583b4d49b041c (patch)
tree9b3d49210632eb56cb14dae99cd896256bf396c4 /meta-phosphor/common
parent4015b7a34bbb563975e5c8bde04dff911071a71d (diff)
downloadtalos-openbmc-810dc707814e454807cd4ea6b52583b4d49b041c.tar.gz
talos-openbmc-810dc707814e454807cd4ea6b52583b4d49b041c.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')
-rwxr-xr-xmeta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-update.sh46
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"
OpenPOWER on IntegriCloud