diff --git a/dracut-kdump.sh b/dracut-kdump.sh
index c2627c2..370d217 100755
--- a/dracut-kdump.sh
+++ b/dracut-kdump.sh
@@ -105,10 +105,12 @@ dump_raw()
 
 dump_ssh()
 {
-    local ret
+    local _ret=0
+    local _exitcode=0 _exitcode2=0
     local _opt="-i $1 -o BatchMode=yes -o StrictHostKeyChecking=yes"
     local _dir="$KDUMP_PATH/$HOST_IP-$DATEDIR"
     local _host=$2
+    local _vmcore="vmcore"
 
     dinfo "saving to $_host:$_dir"
 
@@ -122,25 +124,36 @@ dump_ssh()
 
     if [ "${CORE_COLLECTOR%%[[:blank:]]*}" = "scp" ]; then
         scp -q $_opt /proc/vmcore "$_host:$_dir/vmcore-incomplete"
-        ret=$?
-        save_log
-        scp -q $_opt $KDUMP_LOG_FILE "$_host:$_dir/"
-        if [ $ret -ne 0 ]; then
-            return 1
-        fi
-        ssh $_opt $_host "mv $_dir/vmcore-incomplete $_dir/vmcore" || return 1
+        _exitcode=$?
     else
         $CORE_COLLECTOR /proc/vmcore | ssh $_opt $_host "dd bs=512 of=$_dir/vmcore-incomplete"
-        ret=$?
-        save_log
-        scp -q $_opt $KDUMP_LOG_FILE "$_host:$_dir/"
-        if [ $ret -ne 0 ]; then
-            return 1
+        _exitcode=$?
+        _vmcore="vmcore.flat"
+    fi
+
+    if [ $_exitcode -eq 0 ]; then
+        ssh $_opt $_host "mv $_dir/vmcore-incomplete $_dir/$_vmcore"
+        _exitcode2=$?
+        if [ $_exitcode2 -ne 0 ]; then
+            derror "moving vmcore failed, _exitcode:$_exitcode2"
+        else
+            dinfo "saving vmcore complete"
         fi
-        ssh $_opt $_host "mv $_dir/vmcore-incomplete $_dir/vmcore.flat" || return 1
+    else
+        derror "saving vmcore failed, _exitcode:$_exitcode"
+    fi
+
+    save_log
+    scp -q $_opt $KDUMP_LOG_FILE "$_host:$_dir/"
+    _ret=$?
+    if [ $_ret -ne 0 ]; then
+        derror "saving log file failed, _exitcode:$_ret"
+    fi
+
+    if [ $_exitcode -ne 0 ] || [ $_exitcode2 -ne 0 ];then
+        return 1
     fi
 
-    dinfo "saving vmcore complete"
     return 0
 }
 
diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh
index 791d141..e766f95 100755
--- a/kdump-lib-initramfs.sh
+++ b/kdump-lib-initramfs.sh
@@ -115,7 +115,7 @@ save_log()
 # dump_fs <mount point>
 dump_fs()
 {
-    local ret
+    local _exitcode
     local _mp=$1
     local _dev=$(get_mount_info SOURCE target $_mp -f)
     local _op=$(get_mount_info OPTIONS target $_mp -f)
@@ -159,16 +159,20 @@ dump_fs()
 
     dinfo "saving vmcore"
     $CORE_COLLECTOR /proc/vmcore $_dump_path/vmcore-incomplete
-    ret=$?
+    _exitcode=$?
+    if [ $_exitcode -eq 0 ]; then
+        mv $_dump_path/vmcore-incomplete $_dump_path/vmcore
+        sync
+        dinfo "saving vmcore complete"
+    else
+        derror "saving vmcore failed, _exitcode:$_exitcode"
+    fi
+
     save_log
     mv $KDUMP_LOG_FILE $_dump_path/
-    if [ $ret -ne 0 ]; then
-	    return 1
+    if [ $_exitcode -ne 0 ]; then
+        return 1
     fi
-    mv $_dump_path/vmcore-incomplete $_dump_path/vmcore
-    sync
-
-    dinfo "saving vmcore complete"
 
     # improper kernel cmdline can cause the failure of echo, we can ignore this kind of failure
     return 0
diff --git a/kdumpctl b/kdumpctl
index 3f6a9be..2e7f842 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -944,7 +944,7 @@ check_fence_kdump_config()
 			return 1
 		fi
 		# node can be ipaddr
-		echo $ipaddrs | grep $node > /dev/null
+		echo "$ipaddrs " | grep "$node " > /dev/null
 		if [ $? -eq 0 ]; then
 			derror "Option fence_kdump_nodes cannot contain $node"
 			return 1
diff --git a/kexec-tools-2.0.21-makedumpfile-make-use-of-uts_namespace.name-offset-in-VMCOR.patch b/kexec-tools-2.0.21-makedumpfile-make-use-of-uts_namespace.name-offset-in-VMCOR.patch
new file mode 100644
index 0000000..0c29723
--- /dev/null
+++ b/kexec-tools-2.0.21-makedumpfile-make-use-of-uts_namespace.name-offset-in-VMCOR.patch
@@ -0,0 +1,101 @@
+From 54aec3878b3f91341e6bc735eda158cca5c54ec9 Mon Sep 17 00:00:00 2001
+From: Alexander Egorenkov <egorenar@linux.ibm.com>
+Date: Fri, 18 Sep 2020 13:55:56 +0200
+Subject: [PATCH] [PATCH] make use of 'uts_namespace.name' offset in VMCOREINFO
+
+* Required for kernel 5.11
+
+The offset of the field 'init_uts_ns.name' has changed since
+kernel commit 9a56493f6942 ("uts: Use generic ns_common::count").
+Make use of the offset 'uts_namespace.name' if available in
+VMCOREINFO.
+
+Signed-off-by: Alexander Egorenkov <egorenar@linux.ibm.com>
+---
+ makedumpfile.c | 17 +++++++++++++++--
+ makedumpfile.h |  6 ++++++
+ 2 files changed, 21 insertions(+), 2 deletions(-)
+
+diff --git a/makedumpfile.c b/makedumpfile.c
+index 061741f..ecd63fa 100644
+--- a/makedumpfile-1.6.8/makedumpfile.c
++++ b/makedumpfile-1.6.8/makedumpfile.c
+@@ -1159,7 +1159,10 @@ check_release(void)
+ 	if (SYMBOL(system_utsname) != NOT_FOUND_SYMBOL) {
+ 		utsname = SYMBOL(system_utsname);
+ 	} else if (SYMBOL(init_uts_ns) != NOT_FOUND_SYMBOL) {
+-		utsname = SYMBOL(init_uts_ns) + sizeof(int);
++		if (OFFSET(uts_namespace.name) != NOT_FOUND_STRUCTURE)
++			utsname = SYMBOL(init_uts_ns) + OFFSET(uts_namespace.name);
++		else
++			utsname = SYMBOL(init_uts_ns) + sizeof(int);
+ 	} else {
+ 		ERRMSG("Can't get the symbol of system_utsname.\n");
+ 		return FALSE;
+@@ -2040,6 +2043,11 @@ get_structure_info(void)
+ 	SIZE_INIT(cpu_spec, "cpu_spec");
+ 	OFFSET_INIT(cpu_spec.mmu_features, "cpu_spec", "mmu_features");
+ 
++	/*
++	 * Get offsets of the uts_namespace's members.
++	 */
++	OFFSET_INIT(uts_namespace.name, "uts_namespace", "name");
++
+ 	return TRUE;
+ }
+ 
+@@ -2109,7 +2117,10 @@ get_str_osrelease_from_vmlinux(void)
+ 	if (SYMBOL(system_utsname) != NOT_FOUND_SYMBOL) {
+ 		utsname = SYMBOL(system_utsname);
+ 	} else if (SYMBOL(init_uts_ns) != NOT_FOUND_SYMBOL) {
+-		utsname = SYMBOL(init_uts_ns) + sizeof(int);
++		if (OFFSET(uts_namespace.name) != NOT_FOUND_STRUCTURE)
++			utsname = SYMBOL(init_uts_ns) + OFFSET(uts_namespace.name);
++		else
++			utsname = SYMBOL(init_uts_ns) + sizeof(int);
+ 	} else {
+ 		ERRMSG("Can't get the symbol of system_utsname.\n");
+ 		return FALSE;
+@@ -2344,6 +2355,7 @@ write_vmcoreinfo_data(void)
+ 	WRITE_MEMBER_OFFSET("vmemmap_backing.list", vmemmap_backing.list);
+ 	WRITE_MEMBER_OFFSET("mmu_psize_def.shift", mmu_psize_def.shift);
+ 	WRITE_MEMBER_OFFSET("cpu_spec.mmu_features", cpu_spec.mmu_features);
++	WRITE_MEMBER_OFFSET("uts_namespace.name", uts_namespace.name);
+ 
+ 	if (SYMBOL(node_data) != NOT_FOUND_SYMBOL)
+ 		WRITE_ARRAY_LENGTH("node_data", node_data);
+@@ -2743,6 +2755,7 @@ read_vmcoreinfo(void)
+ 	READ_MEMBER_OFFSET("vmemmap_backing.list", vmemmap_backing.list);
+ 	READ_MEMBER_OFFSET("mmu_psize_def.shift", mmu_psize_def.shift);
+ 	READ_MEMBER_OFFSET("cpu_spec.mmu_features", cpu_spec.mmu_features);
++	READ_MEMBER_OFFSET("uts_namespace.name", uts_namespace.name);
+ 
+ 	READ_STRUCTURE_SIZE("printk_log", printk_log);
+ 	READ_STRUCTURE_SIZE("printk_ringbuffer", printk_ringbuffer);
+diff --git a/makedumpfile.h b/makedumpfile.h
+index 47f7e79..5f50080 100644
+--- a/makedumpfile-1.6.8/makedumpfile.h
++++ b/makedumpfile-1.6.8/makedumpfile.h
+@@ -1728,6 +1728,8 @@ struct size_table {
+ 	long	cpu_spec;
+ 
+ 	long	pageflags;
++
++	long	uts_namespace;
+ };
+ 
+ struct offset_table {
+@@ -1935,6 +1937,10 @@ struct offset_table {
+ 	struct cpu_spec_s {
+ 		long	mmu_features;
+ 	} cpu_spec;
++
++	struct uts_namespace_s {
++		long	name;
++	} uts_namespace;
+ };
+ 
+ /*
+-- 
+2.29.2
+
diff --git a/kexec-tools.spec b/kexec-tools.spec
index 3f94bcb..d7497e0 100644
--- a/kexec-tools.spec
+++ b/kexec-tools.spec
@@ -5,7 +5,7 @@
 
 Name: kexec-tools
 Version: 2.0.21
-Release: 1%{?dist}
+Release: 2%{?dist}
 License: GPLv2
 Summary: The kexec/kdump userspace component
 
@@ -63,6 +63,7 @@ Requires: dracut >= 050
 Requires: dracut-network >= 050
 Requires: dracut-squash >= 050
 Requires: ethtool
+BuildRequires: make
 BuildRequires: zlib-devel elfutils-devel glib2-devel bzip2-devel ncurses-devel bison flex lzo-devel snappy-devel
 BuildRequires: pkgconfig intltool gettext
 BuildRequires: systemd-units
@@ -102,6 +103,7 @@ Requires:       systemd-udev%{?_isa}
 Patch601: ./kexec-tools-2.0.20-eppic-Remove-duplicated-variable-declaration.patch
 Patch603: ./kexec-tools-2.0.20-makedumpfile-printk-add-support-for-lockless-ringbuffer.patch
 Patch604: ./kexec-tools-2.0.20-makedumpfile-printk-use-committed-finalized-state-value.patch
+Patch605: ./kexec-tools-2.0.21-makedumpfile-make-use-of-uts_namespace.name-offset-in-VMCOR.patch
 
 %description
 kexec-tools provides /sbin/kexec binary that facilitates a new
@@ -120,6 +122,7 @@ tar -z -x -v -f %{SOURCE19}
 %patch601 -p1
 %patch603 -p1
 %patch604 -p1
+%patch605 -p1
 
 %ifarch ppc
 %define archdef ARCH=ppc
@@ -358,6 +361,12 @@ done
 %endif
 
 %changelog
+* Fri Jan 08 2021 Kairui Song <kasong@redhat.com> - 2.0.21-2
+- makedumpfile: make use of 'uts_namespace.name' offset in VMCOREINFO
+- kdumpctl: fix a variable expansion in check_fence_kdump_config()
+- Add BuildRequires: make
+- Save the final failure information to log file if saving vmcore failed
+
 * Wed Dec 23 2020 Kairui Song <kasong@redhat.com> - 2.0.21-1
 - makedumpfile: printk: use committed/finalized state values
 - makedumpfile: printk: add support for lockless ringbuffer