From 7fdceda2475605b383dfc7a700446030ded06667 Mon Sep 17 00:00:00 2001 From: Marcel Partap Date: Sat, 23 Jan 2021 19:16:35 +0100 Subject: [PATCH 1/2] Make unmounting of /proc and /sys more resilient .. against concurrent ephemeral accesses (f.e. by git status calls from inside ranger file manager) --- scripts/build/chroot_proc | 8 ++++---- scripts/build/chroot_sysfs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/build/chroot_proc b/scripts/build/chroot_proc index fcc866932..60317a527 100755 --- a/scripts/build/chroot_proc +++ b/scripts/build/chroot_proc @@ -63,10 +63,10 @@ case "${_ACTION}" in fi # Unmounting /proc - if [ -e chroot/proc/version ] - then - umount chroot/proc - fi + while [ -e chroot/proc/version ] && sleep 1 + do + umount -v chroot/proc || fuser --verbose --ismountpoint chroot/proc || true + done # Removing stage file Remove_stagefile diff --git a/scripts/build/chroot_sysfs b/scripts/build/chroot_sysfs index a9ac0290c..1dc9e2734 100755 --- a/scripts/build/chroot_sysfs +++ b/scripts/build/chroot_sysfs @@ -57,10 +57,10 @@ case "${_ACTION}" in Acquire_lockfile # Unmounting /sys - if [ -e chroot/sys/class ] - then - umount chroot/sys - fi + while [ -e chroot/sys/class ] && sleep 1 + do + umount -v chroot/sys || fuser --verbose --ismountpoint chroot/sys || true + done # Removing stage file Remove_stagefile From bf331e5e653f6083cbedee28013344055bf64aa3 Mon Sep 17 00:00:00 2001 From: Marcel Partap Date: Sat, 23 Jan 2021 20:42:58 +0100 Subject: [PATCH 2/2] Put a limit on chroot_proc/chroot_sysfs unmount loops (now with more counter increment and less test b0rkazoid) (morale: don't rely on the assumption that a shellcheck warning you choose to ignore could not possible mask another error) (vim expandtab!) --- scripts/build/chroot_proc | 7 +++++-- scripts/build/chroot_sysfs | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/scripts/build/chroot_proc b/scripts/build/chroot_proc index 60317a527..47c2df827 100755 --- a/scripts/build/chroot_proc +++ b/scripts/build/chroot_proc @@ -63,10 +63,13 @@ case "${_ACTION}" in fi # Unmounting /proc - while [ -e chroot/proc/version ] && sleep 1 + ATTEMPT=0 + while [ -e chroot/proc/version ] && [ ${ATTEMPT} -lt 42 ] do - umount -v chroot/proc || fuser --verbose --ismountpoint chroot/proc || true + umount -v chroot/proc && break || { fuser --verbose --ismountpoint chroot/proc && sleep 1; } + ATTEMPT=$(( ATTEMPT + 1 )) done + unset ATTEMPT # Removing stage file Remove_stagefile diff --git a/scripts/build/chroot_sysfs b/scripts/build/chroot_sysfs index 1dc9e2734..412194a19 100755 --- a/scripts/build/chroot_sysfs +++ b/scripts/build/chroot_sysfs @@ -57,10 +57,13 @@ case "${_ACTION}" in Acquire_lockfile # Unmounting /sys - while [ -e chroot/sys/class ] && sleep 1 + ATTEMPT=0 + while [ -e chroot/sys/class ] && [ ${ATTEMPT} -lt 42 ] do - umount -v chroot/sys || fuser --verbose --ismountpoint chroot/sys || true + umount -v chroot/sys && break || { fuser --verbose --ismountpoint chroot/sys && sleep 1; } + ATTEMPT=$(( ATTEMPT + 1 )) done + unset ATTEMPT # Removing stage file Remove_stagefile