Use get_mount_info so that fstab is used as a failback when look for
mount info.
Signed-off-by: Kairui Song <kasong(a)redhat.com>
---
kdump-lib-initramfs.sh | 40 +++++++++++++++++-----------------------
kdump-lib.sh | 1 -
kdumpctl | 4 ++--
mkdumprd | 42 +++++++++++++++---------------------------
4 files changed, 34 insertions(+), 53 deletions(-)
diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh
index 83fb4c9..e9f07d3 100755
--- a/kdump-lib-initramfs.sh
+++ b/kdump-lib-initramfs.sh
@@ -94,32 +94,25 @@ get_kdump_confs()
fi
}
-# dump_fs <mount point| device>
+# dump_fs <mount point>
dump_fs()
{
- local _do_umount=""
- local _dev=$(findmnt -k -f -n -r -o SOURCE $1)
- local _mp=$(findmnt -k -f -n -r -o TARGET $1)
- local _op=$(findmnt -k -f -n -r -o OPTIONS $1)
-
- if ! is_mounted "$_mp"; then
- _dev=$(findmnt -s -f -n -r -o SOURCE $1)
- _mp=$(findmnt -s -f -n -r -o TARGET $1)
- _op=$(findmnt -s -f -n -r -o OPTIONS $1)
-
- if [ -n "$_dev" ] && [ -n "$_mp" ]; then
- echo "kdump: dump target $_dev is not mounted, trying to mount..."
- mkdir -p $_mp
- mount -o $_op $_dev $_mp
-
- if [ $? -ne 0 ]; then
- echo "kdump: mounting failed (mount point: $_mp, option:
$_op)"
- return 1
- fi
- _do_umount=1
- else
- echo "kdump: error: Dump target $_dev is not usable"
+ local _do_umount
+ local _mp=$1
+ local _dev=$(get_mount_info SOURCE target $_mp -f)
+ local _op=$(get_mount_info OPTIONS target $_mp -f)
+
+ # If dump path have a corresponding device entry but not mounted, mount it.
+ if [ -n "$_dev" ] && ! is_mounted "$_mp"; then
+ echo "kdump: dump target $_dev is not mounted, trying to mount..."
+ mkdir -p $_mp
+ mount -o $_op $_dev $_mp
+
+ if [ $? -ne 0 ]; then
+ echo "kdump: mounting failed (mount point: $_mp, option: $_op)"
+ return 1
fi
+ _do_umount=1
else
echo "kdump: dump target is $_dev"
fi
@@ -266,6 +259,7 @@ read_kdump_conf()
[ -n "$config_val" ] && add_dump_code "dump_fs
$config_val"
;;
ext[234]|xfs|btrfs|minix|nfs)
+ config_val=$(get_mntpoint_from_target "$config_val")
add_dump_code "dump_fs $config_val"
;;
raw)
diff --git a/kdump-lib.sh b/kdump-lib.sh
index e10a64d..8411d22 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -270,7 +270,6 @@ get_mntopt_from_target()
{
get_mount_info OPTIONS source $1 -f
}
-
# Find the general mount point of a dump target, not the bind mount point
get_mntpoint_from_target()
{
diff --git a/kdumpctl b/kdumpctl
index 3d64675..0bf5c20 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -907,8 +907,8 @@ path_to_be_relabeled()
_target=$(local_fs_dump_target)
if [[ -n "$_target" ]]; then
- _mnt=$(findmnt -k -f -n -r -o TARGET $_target)
- if [ -z "$_mnt" ]; then
+ _mnt=$(get_mntpoint_from_target $_target)
+ if ! is_mounted "$_mnt"; then
return
fi
else
diff --git a/mkdumprd b/mkdumprd
index 16d9c4a..a4e3d1e 100644
--- a/mkdumprd
+++ b/mkdumprd
@@ -51,21 +51,18 @@ add_dracut_sshkey() {
# caller should ensure $1 is valid and mounted in 1st kernel
to_mount() {
- local _dev=$1 _source _new_mntpoint _fstype _options _mntopts _pdev
-
- _source=$(findmnt -k -f -n -r -o SOURCE $_dev)
- _fstype=$(findmnt -k -f -n -r -o FSTYPE $_dev)
- _new_mntpoint=$(get_kdump_path_from_target $_dev)
-
- [[ -e /etc/fstab ]] && _options=$(findmnt --fstab -f -n -r -o OPTIONS $_dev)
- if [ -z "$_options" ]; then
- _options=$(findmnt -k -f -n -r -o OPTIONS $_dev)
- if [[ $_fstype == "nfs"* ]]; then
- _options=$(echo $_options | sed 's/,addr=[^,]*//')
- _options=$(echo $_options | sed 's/,proto=[^,]*//')
- _options=$(echo $_options | sed 's/,clientaddr=[^,]*//')
- fi
+ local _target=$1 _new_mntpoint _fstype _options _mntopts _pdev
+
+ _fstype=$(get_fs_type_from_target $_target)
+ _options=$(get_mntopt_from_target $_target)
+ _new_mntpoint=$(get_kdump_path_from_target $_target)
+
+ if [[ "$_fstype" == "nfs"* ]]; then
+ _options=$(echo $_options | sed 's/,addr=[^,]*//')
+ _options=$(echo $_options | sed 's/,proto=[^,]*//')
+ _options=$(echo $_options | sed 's/,clientaddr=[^,]*//')
fi
+
# mount fs target as rw in 2nd kernel
_options=$(echo $_options | sed 's/\(^\|,\)ro\($\|,\)/\1rw\2/g')
# filter out 'noauto' here, it will be force appended later, avoid
duplication
@@ -77,28 +74,19 @@ to_mount() {
_options="$_options,noauto"
_mntopts="$_new_mntpoint $_fstype $_options"
- # for non-nfs _dev converting to use udev persistent name
- if [ -b "$_source" ]; then
- _pdev="$(get_persistent_dev $_source)"
+ # for non-nfs _target converting to use udev persistent name
+ if [ -b "$_target" ]; then
+ _pdev="$(get_persistent_dev $_target)"
if [ -z "$_pdev" ]; then
return 1
fi
else
- _pdev=$_dev
+ _pdev=$_target
fi
echo "$_pdev $_mntopts"
}
-is_readonly_mount() {
- local _mnt
- _mnt=$(findmnt -k -f -n -r -o OPTIONS $1)
-
- #fs/proc_namespace.c: show_mountinfo():
- #seq_puts(m, mnt->mnt_flags & MNT_READONLY ? " ro" : "
rw");
- [[ "$_mnt" =~ ^ro ]]
-}
-
#Function: get_ssh_size
#$1=dump target
#called from while loop and shouldn't read from stdin, so we're using "ssh
-n"
--
2.24.1