summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine Jacoutot <ajacoutot@cvs.openbsd.org>2017-08-17 20:18:03 +0000
committerAntoine Jacoutot <ajacoutot@cvs.openbsd.org>2017-08-17 20:18:03 +0000
commit5560ef8e56e18f011d80b45f3cdd0beb3fa6b369 (patch)
treede493a8f75d1c58cfe59fb5b769859e6c2418492
parente22eb9cf1a892bfbb0a7523bf0c3616b110f9fd1 (diff)
Fix checkfs() when running an MP kernel.
-rw-r--r--usr.sbin/syspatch/syspatch.sh18
1 files changed, 11 insertions, 7 deletions
diff --git a/usr.sbin/syspatch/syspatch.sh b/usr.sbin/syspatch/syspatch.sh
index 463f1531b1d..c5fc53866db 100644
--- a/usr.sbin/syspatch/syspatch.sh
+++ b/usr.sbin/syspatch/syspatch.sh
@@ -1,6 +1,6 @@
#!/bin/ksh
#
-# $OpenBSD: syspatch.sh,v 1.121 2017/08/17 07:35:19 ajacoutot Exp $
+# $OpenBSD: syspatch.sh,v 1.122 2017/08/17 20:18:02 ajacoutot Exp $
#
# Copyright (c) 2016, 2017 Antoine Jacoutot <ajacoutot@openbsd.org>
#
@@ -75,20 +75,24 @@ missing patches" 2
# - ignore new (nonexistent) files
# - ignore rollback tarball: create_rollback() will handle the failure
# - compute total size of all files per fs, simpler and less margin for error
-# - if we install a kernel, double /bsd size (duplicate it in the list) when
-# /bsd.syspatchXX is not present (create_rollback will copy it from /bsd)
+# (instead of computing before installing each file)
+# - if we install a kernel, double /bsd size (duplicate it in the list) when:
+# - we are on an MP system (to check /bsd size instead of nonexistent /bsd.mp)
+# - /bsd.syspatchXX is not present (create_rollback will copy it from /bsd)
checkfs()
{
local _d _dev _df _files="${@}" _ret _sz
[[ -n ${_files} ]]
- if echo "${_files}" | grep -Eq '(^|[[:blank:]]+)bsd([[:blank:]]+|$)'
- then
- [[ -f /bsd.syspatch${_OSrev} ]] || _files="bsd ${_files}"
+ # XXX use shell substitution when available: bsd.mp -> bsd
+ if echo "${_files}" |
+ grep -Eq '(^|[[:blank:]]+)bs(d|d.mp)([[:blank:]]+|$)'; then
+ ${_BSDMP} || [[ ! -f /bsd.syspatch${_OSrev} ]] &&
+ _files="bsd ${_files}"
fi
set +e # ignore errors due to:
- # - nonexistent files (i.e. syspatch is installing new files)
+ # - nonexistent files (e.g. /bsd.mp or syspatch is installing new files)
# - broken interpolation due to bogus devices like remote filesystems
eval $(cd / &&
stat -qf "_dev=\"\${_dev} %Sd\" %Sd=\"\${%Sd:+\${%Sd}\+}%Uz\"" \