Say let's add extra 20M to "2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G", add_extra_mem_to_crashkernel will cover the above string to "2G-4G:406M,4G-16G:534M,16G-64G:1046M,64G-128G:2070M,128G-:4118M"
Signed-off-by: Coiby Xu coxu@redhat.com --- kdump-lib.sh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+)
diff --git a/kdump-lib.sh b/kdump-lib.sh index 94cc8ff..5c79436 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -822,6 +822,41 @@ get_recommend_size() IFS="$OLDIFS" }
+# add memory to crashkernel string +# $1 extra memory size, unit:M +# return crashkernel string (unit=M) +add_extra_mem_to_crashkernel() +{ + local _extra_mem="$1" _ck_cmdline="$2" _new_ck_cmdline + local _range _mem _size _unit _ele _new_ele + local OLDIFS="$IFS" + + IFS=',' + for _ele in $_ck_cmdline; do + _range=$(awk -F ":" '{print $1}' <<< "$_ele") + _mem=$(awk -F ":" '{print $2}' <<< "$_ele") + _size=${_mem::-1} + _unit=${_mem: -1} + if [[ $_unit != "M" ]] && [[ $_unit != "G" ]]; then + perror_exit "can't process $_unit" + fi + + if [[ $_unit == 'G' ]]; then + _size=$((_size * 1024)) + fi + _size=$((_size + _extra_mem)) + + _new_ele="${_range}:${_size}M" + if [[ -z $_new_ck_cmdline ]]; then + _new_ck_cmdline=$_new_ele + else + _new_ck_cmdline="${_new_ck_cmdline},${_new_ele}" + fi + done + IFS="$OLDIFS" + echo -n "$_new_ck_cmdline" +} + # get default crashkernel # $1 dump mode, if not specified, dump_mode will be judged by is_fadump_capable kdump_get_arch_recommend_crashkernel()