[openwrt/openwrt] base-files: emmc: invalidate kernel image while rootfs is being written

LEDE Commits lede-commits at lists.infradead.org
Fri Sep 27 10:25:20 PDT 2024


dangole pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/c4022e6199a3337d6e4d733106d5cf3879e0b35b

commit c4022e6199a3337d6e4d733106d5cf3879e0b35b
Author: Rodrigo Balerdi <lanchon at gmail.com>
AuthorDate: Tue Sep 24 03:51:43 2024 -0300

    base-files: emmc: invalidate kernel image while rootfs is being written
    
    Some setups have alternate boot actions in case the main OS fails to
    boot. These can include a secondary copy of the OS, a recovery OS, a
    fallback to TFTP boot, etc.
    
    This commit invalidates the kernel image while rootfs is being written
    which, if a sysupgrade is interrupted, will trigger an alternate boot
    action in devices that support it. This results in safer sysupgrades.
    
    Signed-off-by: Rodrigo Balerdi <lanchon at gmail.com>
---
 package/base-files/files/lib/upgrade/emmc.sh | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/package/base-files/files/lib/upgrade/emmc.sh b/package/base-files/files/lib/upgrade/emmc.sh
index 49cffe1c65..78e398d6d5 100644
--- a/package/base-files/files/lib/upgrade/emmc.sh
+++ b/package/base-files/files/lib/upgrade/emmc.sh
@@ -16,15 +16,22 @@ emmc_upgrade_tar() {
 	tar tf "$tar_file" ${board_dir}/kernel 1>/dev/null 2>/dev/null && has_kernel=1
 	tar tf "$tar_file" ${board_dir}/root 1>/dev/null 2>/dev/null && has_rootfs=1
 
-	[ "$has_kernel" = 1 -a "$EMMC_KERN_DEV" ] &&
-		export EMMC_KERNEL_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/kernel -O | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
-
 	[ "$has_rootfs" = 1 -a "$EMMC_ROOT_DEV" ] && {
+		# Invalidate kernel image while rootfs is being written
+		[ "$has_kernel" = 1 -a "$EMMC_KERN_DEV" ] && {
+			dd if=/dev/zero of="$EMMC_KERN_DEV" bs=512 count=8
+			sync
+		}
+
 		export EMMC_ROOTFS_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/root -O | dd of="$EMMC_ROOT_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
 		# Account for 64KiB ROOTDEV_OVERLAY_ALIGN in libfstools
 		EMMC_ROOTFS_BLOCKS=$(((EMMC_ROOTFS_BLOCKS + 127) & ~127))
+		sync
 	}
 
+	[ "$has_kernel" = 1 -a "$EMMC_KERN_DEV" ] &&
+		export EMMC_KERNEL_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/kernel -O | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
+
 	if [ -z "$UPGRADE_BACKUP" ]; then
 		if [ "$EMMC_DATA_DEV" ]; then
 			dd if=/dev/zero of="$EMMC_DATA_DEV" bs=512 count=8




More information about the lede-commits mailing list