diff --git a/dracut-kdump.sh b/dracut-kdump.sh
index b69bc98..2a33c5a 100755
--- a/dracut-kdump.sh
+++ b/dracut-kdump.sh
@@ -515,7 +515,7 @@ read_kdump_confs()
 				DUMP_INSTRUCTION="dump_fs $config_val"
 			fi
 			;;
-		ext[234] | xfs | btrfs | minix | nfs)
+		ext[234] | xfs | btrfs | minix | nfs | virtiofs)
 			config_val=$(get_mntpoint_from_target "$config_val")
 			DUMP_INSTRUCTION="dump_fs $config_val"
 			;;
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index c319fc2..a3cbbe8 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -673,7 +673,7 @@ kdump_install_conf() {
                 _pdev=$(persistent_policy="by-id" kdump_get_persistent_dev "$_val")
                 sed -i -e "s#^${_opt}[[:space:]]\+$_val#$_opt $_pdev#" "${initdir}/tmp/$$-kdump.conf"
                 ;;
-            ext[234] | xfs | btrfs | minix)
+            ext[234] | xfs | btrfs | minix | virtiofs)
                 _pdev=$(kdump_get_persistent_dev "$_val")
                 sed -i -e "s#^${_opt}[[:space:]]\+$_val#$_opt $_pdev#" "${initdir}/tmp/$$-kdump.conf"
                 ;;
diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh
index 9be0fe9..cd34162 100755
--- a/kdump-lib-initramfs.sh
+++ b/kdump-lib-initramfs.sh
@@ -54,6 +54,11 @@ is_fs_type_nfs()
 	[ "$1" = "nfs" ] || [ "$1" = "nfs4" ]
 }
 
+is_fs_type_virtiofs()
+{
+	[ "$1" = "virtiofs" ]
+}
+
 # If $1 contains dracut_args "--mount", return <filesystem type>
 get_dracut_args_fstype()
 {
@@ -109,6 +114,23 @@ is_raw_dump_target()
 	[ -n "$(kdump_get_conf_val raw)" ]
 }
 
+is_virtiofs_dump_target()
+{
+	if [ -n "$(kdump_get_conf_val virtiofs)" ]; then
+		return 0
+	fi
+
+	if is_fs_type_virtiofs "$(get_dracut_args_fstype "$(kdump_get_conf_val dracut_args)")"; then
+		return 0
+	fi
+
+	if is_fs_type_virtiofs "$(get_fs_type_from_target "$(get_target_from_path "$(get_save_path)")")"; then
+		return 0
+	fi
+
+	return 1
+}
+
 is_nfs_dump_target()
 {
 	if [ -n "$(kdump_get_conf_val nfs)" ]; then
@@ -128,5 +150,5 @@ is_nfs_dump_target()
 
 is_fs_dump_target()
 {
-	[ -n "$(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix")" ]
+	[ -n "$(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|virtiofs")" ]
 }
diff --git a/kdump-lib.sh b/kdump-lib.sh
index 9a64f50..0e89268 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -84,35 +84,31 @@ to_dev_name()
 
 is_user_configured_dump_target()
 {
-	[[ $(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|raw\|nfs\|ssh") ]] || is_mount_in_dracut_args
-}
-
-get_user_configured_dump_disk()
-{
-	local _target
-
-	_target=$(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|raw")
-	[[ -n $_target ]] && echo "$_target" && return
-
-	_target=$(get_dracut_args_target "$(kdump_get_conf_val "dracut_args")")
-	[[ -b $_target ]] && echo "$_target"
+	[[ $(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|raw\|nfs\|ssh\|virtiofs") ]] || is_mount_in_dracut_args
 }
 
 get_block_dump_target()
 {
-	local _target _path
+	local _target _fstype
 
 	if is_ssh_dump_target || is_nfs_dump_target; then
 		return
 	fi
 
-	_target=$(get_user_configured_dump_disk)
+	_target=$(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|raw\|virtiofs")
 	[[ -n $_target ]] && to_dev_name "$_target" && return
 
-	# Get block device name from local save path
-	_path=$(get_save_path)
-	_target=$(get_target_from_path "$_path")
-	[[ -b $_target ]] && to_dev_name "$_target"
+	_target=$(get_dracut_args_target "$(kdump_get_conf_val "dracut_args")")
+	[[ -b $_target ]] && to_dev_name "$_target" && return
+
+	_fstype=$(get_dracut_args_fstype "$(kdump_get_conf_val "dracut_args")")
+	is_fs_type_virtiofs "$_fstype" && echo "$_target" && return
+
+	_target=$(get_target_from_path "$(get_save_path)")
+	[[ -b $_target ]] && to_dev_name "$_target" && return
+
+	_fstype=$(get_fs_type_from_target "$_target")
+	is_fs_type_virtiofs "$_fstype" && echo "$_target" && return
 }
 
 is_dump_to_rootfs()
@@ -128,6 +124,7 @@ get_failure_action_target()
 		# Get rootfs device name
 		_target=$(get_root_fs_device)
 		[[ -b $_target ]] && to_dev_name "$_target" && return
+		is_fs_type_virtiofs "$(get_fs_type_from_target "$_target")" && echo "$_target" && return
 		# Then, must be nfs root
 		echo "nfs"
 	fi
diff --git a/kdump.conf b/kdump.conf
index d4fc78b..e598a49 100644
--- a/kdump.conf
+++ b/kdump.conf
@@ -43,6 +43,7 @@
 #             It's recommended to use persistent device names
 #             such as /dev/vg/<devname>.
 #             Otherwise it's suggested to use label or uuid.
+#             Supported fs types: ext[234], xfs, btrfs, minix, virtiofs
 #
 # path <path>
 #           - "path" represents the file system path in which vmcore
@@ -171,6 +172,7 @@
 #ext4 /dev/vg/lv_kdump
 #ext4 LABEL=/boot
 #ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
+#virtiofs myfs
 #nfs my.server.com:/export/tmp
 #nfs [2001:db8::1:2:3:4]:/export/tmp
 #ssh user@my.server.com
diff --git a/kdumpctl b/kdumpctl
index 84841bd..7a2e3e8 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -239,7 +239,7 @@ check_config()
 			fi
 			config_opt=_target
 			;;
-		ext[234] | minix | btrfs | xfs | nfs | ssh)
+		ext[234] | minix | btrfs | xfs | nfs | ssh | virtiofs)
 			config_opt=_target
 			;;
 		sshkey | path | core_collector | kdump_post | kdump_pre | extra_bins | extra_modules | failure_action | default | final_action | force_rebuild | force_no_rebuild | fence_kdump_args | fence_kdump_nodes | auto_reset_crashkernel) ;;
@@ -475,8 +475,8 @@ check_fs_modified()
 	fi
 
 	# No need to check in case of raw target.
-	# Currently we do not check also if ssh/nfs target is specified
-	if is_ssh_dump_target || is_nfs_dump_target || is_raw_dump_target; then
+	# Currently we do not check also if ssh/nfs/virtiofs target is specified
+	if is_ssh_dump_target || is_nfs_dump_target || is_raw_dump_target || is_virtiofs_dump_target; then
 		return 0
 	fi
 
diff --git a/mkdumprd b/mkdumprd
index 8550961..98a7b9a 100644
--- a/mkdumprd
+++ b/mkdumprd
@@ -391,7 +391,7 @@ while read -r config_opt config_val; do
 	extra_modules)
 		extra_modules="$extra_modules $config_val"
 		;;
-	ext[234] | xfs | btrfs | minix | nfs)
+	ext[234] | xfs | btrfs | minix | nfs | virtiofs)
 		check_user_configured_target "$config_val" "$config_opt"
 		add_mount "$config_val" "$config_opt"
 		;;