kdumpctl: force rebuild in case of watchdog state change
If state of a watchdog device is changed by an user after kdumpctl restart then initramfs must be rebuilt on the basis of new watchdog status. Testing: ------------------------------------------------------- Initramfs wdt state Prev Current Result ------------------------------------------------------- Not Exist NA X Rebuild Exist Inact Inact No Rebuild Exist Inact Act Force Rebuild Exist Act Inact Force Rebuild Exist Act Act(Same wdt) No Rebuild Exist Act Act(Diff wdt) Force Rebuild Exist Act Module Removed Force Rebuild Signed-off-by: Pratyush Anand <panand@redhat.com> Acked-by: Dave Young <dyoung@redhat.com>
This commit is contained in:
parent
3095c3741f
commit
6a2b39b96e
40
kdumpctl
40
kdumpctl
@ -427,6 +427,40 @@ check_dump_fs_modified()
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_wdt_modified()
|
||||||
|
{
|
||||||
|
is_wdt_mod_omitted
|
||||||
|
[[ $? -eq 0 ]] && return 0
|
||||||
|
[[ -d /sys/class/watchdog/ ]] || return 0
|
||||||
|
|
||||||
|
for dir in /sys/class/watchdog/*; do
|
||||||
|
[[ -d "$dir" ]] || continue
|
||||||
|
[[ -f "$dir/state" ]] || continue
|
||||||
|
wdtdrv=$(< "$dir/device/modalias")
|
||||||
|
wdtdrv=$(modinfo $wdtdrv | grep filename | awk -F"kernel/" '{print $2}')
|
||||||
|
active=$(< "$dir/state")
|
||||||
|
# rebuild when:
|
||||||
|
# module for this watchdog is not found and watchdog is active
|
||||||
|
# module for this watchdog is found and watchdog is inactive
|
||||||
|
lsinitrd $TARGET_INITRD | grep $wdtdrv &> /dev/null
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
[[ "$active" = "active" ]] && return 1
|
||||||
|
else
|
||||||
|
[[ "$active" = "inactive" ]] && return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# check if watchdog kernel module unloaded.
|
||||||
|
loaded_mods=$(lsinitrd $TARGET_INITRD -f etc/cmdline.d/00-watchdog.conf)
|
||||||
|
[[ -n $loaded_mods ]] && loaded_mods=$(echo $loaded_mods | awk -F"rd.driver.pre=" '{print $2}' | sed "s/,/ /g")
|
||||||
|
for mod in $loaded_mods ; do
|
||||||
|
lsmod | grep $mod &> /dev/null
|
||||||
|
[[ $? != 0 ]] && return 1
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# returns 0 if system is not modified
|
# returns 0 if system is not modified
|
||||||
# returns 1 if system is modified
|
# returns 1 if system is modified
|
||||||
# returns 2 if system modification is invalid
|
# returns 2 if system modification is invalid
|
||||||
@ -448,6 +482,12 @@ check_system_modified()
|
|||||||
return $ret
|
return $ret
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
check_wdt_modified
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Detected change in watchdog state"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user