diff --git a/pre_checkin.sh b/pre_checkin.sh
index 5cd0052..e5dafb1 100644
--- a/pre_checkin.sh
+++ b/pre_checkin.sh
@@ -1,11 +1,11 @@
 #!/bin/sh
 
-if test util-linux.spec -ot python-libmount.spec ; then
-	echo "util-linux.spec is older than python-libmount.spec. Please merge changes manually and call pre-checkin.sh again."
+if test util-linux.spec -ot python3-libmount.spec ; then
+	echo "util-linux.spec is older than python3-libmount.spec. Please merge changes manually and call pre-checkin.sh again."
 	exit 1
 fi
-if test util-linux.changes -ot python-libmount.changes ; then
-	echo "util-linux.changes is older than python-libmount.changes. Please merge changes manually and call pre-checkin.sh again."
+if test util-linux.changes -ot python3-libmount.changes ; then
+	echo "util-linux.changes is older than python3-libmount.changes. Please merge changes manually and call pre-checkin.sh again."
 	exit 1
 fi
 
@@ -19,10 +19,10 @@ if test util-linux.changes -ot util-linux-systemd.changes ; then
 fi
 
 sed '
-	s/spec file for package util-linux/spec file for package python-libmount/;
-	/^Name:/s/util-linux/python-libmount/;
+	s/spec file for package util-linux/spec file for package python3-libmount/;
+	/^Name:/s/util-linux/python3-libmount/;
 	s/WARNING: After editing this file please/WARNING: Never edit this file!!! Edit util-linux.spec and/
-' <util-linux.spec >python-libmount.spec
+' <util-linux.spec >python3-libmount.spec
 
 sed '
 	s/spec file for package util-linux/spec file for package util-linux-systemd/;
@@ -30,7 +30,7 @@ sed '
 	s/WARNING: After editing this file please/WARNING: Never edit this file!!! Edit util-linux.spec and/
 ' <util-linux.spec >util-linux-systemd.spec
 
-cp -a util-linux.changes python-libmount.changes
+cp -a util-linux.changes python3-libmount.changes
 
 cp -a util-linux.changes util-linux-systemd.changes
 
diff --git a/python-libmount.changes b/python3-libmount.changes
similarity index 99%
rename from python-libmount.changes
rename to python3-libmount.changes
index f345599..4956a6c 100644
--- a/python-libmount.changes
+++ b/python3-libmount.changes
@@ -1,3 +1,41 @@
+-------------------------------------------------------------------
+Mon Aug  6 15:21:35 CEST 2018 - sbrabec@suse.com
+
+- Update to version 2.32.1:
+  * cal(1) has been improved and extended.
+  * libblkid has been extended to support LUKS2, Micron mpool, VDO
+    and Atari partition table.
+  * rfkill(8) has been moved to /usr/sbin.
+  * dmesg(1) provides better support for multi-line messages, new
+    command line option --force-prefix.
+  * fallocate(1) --dig-holes is faster and more effect now.
+  * fdisk(8) provides access to Protective MBR accessible from main
+    menu. Sun label support has been improved.
+  * lscpu(1) provides more details about ARM CPUs now
+    (FATE#326453).
+  * lsmem(1) supports memory zone awareness now (FATE#324252,
+    drop util-linux-lsmem-memory-zone-1.patch,
+    util-linux-lsmem-memory-zone-2.patch,
+    util-linux-lsmem-memory-zone-3.patch).
+  * lsns(8) provides netnsid and nsfs columns now.
+  * rtcwake(8) waits stdin to settle down before entering a system
+    sleep.
+  * Many fixes and improvements, see
+    https://www.kernel.org/pub/linux/utils/util-linux/v2.32/v2.32-ReleaseNotes
+    https://www.kernel.org/pub/linux/utils/util-linux/v2.32/v2.32.1-ReleaseNotes
+    (drop util_linux_bigendian.patch, util-linux-cramfs.patch,
+    util-linux-fincore-count.patch,
+    util-linux-sysfs-nvme-devno.patch, util-linux-lscpu-loop.patch,
+    util-linux-libmount-umount-a-segfault.patch,
+    util-linux-libmount-mount-a-nfs-bind-mount.patch,
+    util-linux-lscpu-chcpu-new-cpu-macros.patch,
+    util-linux-chcpu-cpu-count.patch).
+
+-------------------------------------------------------------------
+Tue Jul  3 16:27:27 CEST 2018 - sbrabec@suse.com
+
+- Switch python-libmount to python3-libmount.
+
 -------------------------------------------------------------------
 Tue May 22 11:54:13 UTC 2018 - tchvatal@suse.com
 
diff --git a/python-libmount.spec b/python3-libmount.spec
similarity index 93%
rename from python-libmount.spec
rename to python3-libmount.spec
index 584cfe7..9d2be3c 100644
--- a/python-libmount.spec
+++ b/python3-libmount.spec
@@ -1,5 +1,5 @@
 #
-# spec file for package python-libmount
+# spec file for package python3-libmount
 #
 # Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
 #
@@ -22,7 +22,7 @@
 %bcond_with     enable_last
 %endif
 
-Name:           python-libmount
+Name:           python3-libmount
 %define _name   util-linux
 # WARNING: Never edit this file!!! Edit util-linux.spec and call pre_checkin.sh to update spec files:
 %define _name util-linux
@@ -43,7 +43,7 @@ Name:           python-libmount
 %define         group_ul    System/Base
 %define         group_uls   System/Base
 %define         group_pl    Development/Languages/Python
-%if "%{name}" == "python-libmount"
+%if "%{name}" == "python3-libmount"
 %define         build_util_linux 0
 %define         build_util_linux_systemd 0
 %define         build_python_libmount 1
@@ -101,7 +101,7 @@ BuildRequires:  systemd-rpm-macros
 BuildRequires:  pkgconfig(libsystemd)
 %endif
 %if %build_python_libmount
-BuildRequires:  python-devel
+BuildRequires:  python3-devel
 %endif
 #BEGIN SECOND STAGE DEPENDENCIES
 %if !%build_util_linux
@@ -116,7 +116,7 @@ BuildRequires:  libmount-devel
 %endif
 %endif
 #END SECOND STAGE DEPENDENCIES
-Version:        2.31.1
+Version:        2.32.1
 Release:        0
 # util-linux is a base package and uuidd pre-requiring pwdutils pulls
 # that into the core build cycle.  pwdutils also pulls in the whole
@@ -125,7 +125,7 @@ Release:        0
 # these tools as well
 #!BuildIgnore:  pwdutils
 Url:            https://www.kernel.org/pub/linux/utils/util-linux/
-Source:         https://www.kernel.org/pub/linux/utils/util-linux/v2.31/util-linux-%{version}.tar.xz
+Source:         https://www.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-%{version}.tar.xz
 Source1:        util-linux-rpmlintrc
 Source4:        raw.service
 Source5:        etc.raw
@@ -135,7 +135,7 @@ Source8:        login.pamd
 Source9:        remote.pamd
 Source10:       su.pamd
 Source11:       su.default
-Source12:       https://www.kernel.org/pub/linux/utils/util-linux/v2.31/util-linux-%{version}.tar.sign
+Source12:       https://www.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-%{version}.tar.sign
 Source13:       %{_name}.keyring
 Source14:       runuser.pamd
 Source15:       runuser-l.pamd
@@ -160,30 +160,6 @@ Source51:       blkid.conf
 ##
 # PATCH-EXTEND-UPSTREAM: Let `su' handle /sbin and /usr/sbin in path
 Patch0:         make-sure-sbin-resp-usr-sbin-are-in-PATH.diff
-# PATCH-FEATURE-UPSTREAM util-linux-lsmem-memory-zone-1.patch bsc1065471 FATE324252 sbrabec@suse.com -- lsmem: Add support for zone awareness.
-Patch1:         util-linux-lsmem-memory-zone-1.patch
-# PATCH-FEATURE-UPSTREAM util-linux-lsmem-memory-zone-2.patch bsc1065471 FATE324252 sbrabec@suse.com -- lsmem: Add support for zone awareness.
-Patch2:         util-linux-lsmem-memory-zone-2.patch
-# PATCH-FEATURE-UPSTREAM util-linux-lsmem-memory-zone-3.patch bsc1065471 FATE324252 sbrabec@suse.com -- lsmem: Add support for zone awareness.
-Patch3:         util-linux-lsmem-memory-zone-3.patch
-# Add four commits from upstream to pass tests on ppc64
-Patch4:         util_linux_bigendian.patch
-# PATCH-FIX-UPSTREAM util-linux-cramfs.patch sbrabec@suse.com -- Fix fsck.cramfs failure on ppc64le.
-Patch5:         util-linux-cramfs.patch
-# PATCH-FIX-UPSTREAM util-linux-fincore-count.patch sbrabec@suse.com -- Disable bad test fincore/count.
-Patch6:         util-linux-fincore-count.patch
-# PATCH-FIX-UPSTREAM util-linux-sysfs-nvme-devno.patch bsc1078662 sbrabec@suse.com -- Fix lsblk on NVMe.
-Patch7:         util-linux-sysfs-nvme-devno.patch
-# PATCH-FIX-UPSTREAM util-linux-lscpu-loop.patch bsc1072947 sbrabec@suse.com -- Fix crash loop in lscpu.
-Patch8:         util-linux-lscpu-loop.patch
-# PATCH-FIX-UPSTREAM util-linux-libmount-umount-a-segfault.patch sbrabec@suse.com -- Fix possible segfault of umount -a.
-Patch9:         util-linux-libmount-umount-a-segfault.patch
-# PATCH-FIX-UPSTREAM util-linux-libmount-mount-a-nfs-bind-mount.patch bsc1080740 sbrabec@suse.com -- Fix mount -a on NFS bind mounts.
-Patch10:        util-linux-libmount-mount-a-nfs-bind-mount.patch
-# PATCH-FIX-UPSTREAM util-linux-lscpu-chcpu-new-cpu-macros.patch bnc1091164 sbrabec@suse.com -- Fix lscpu and chcpu on systems with >1024 cores.
-Patch11:        util-linux-lscpu-chcpu-new-cpu-macros.patch
-# PATCH-FIX-UPSTREAM util-linux-chcpu-cpu-count.patch bnc1091164 sbrabec@suse.com -- chcpu: Properly count CPUs.
-Patch12:        util-linux-chcpu-cpu-count.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 #
 %if %build_util_linux
@@ -405,11 +381,11 @@ SMP systems.
 %endif
 %if %build_python_libmount
 %if %build_util_linux
-%package -n python-libmount
+%package -n python3-libmount
 Summary:        %summary_pl
 Group:          %group_pl
 
-%description -n python-libmount
+%description -n python3-libmount
 %else
 %description
 %endif
@@ -420,18 +396,6 @@ library.
 %prep
 %setup -q -n %{_name}-%{version} -b 40
 %patch0 -p1
-%patch1 -p1
-%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
-%patch11 -p1
-%patch12 -p1
 #
 # setctsid
 cp -p %{S:22} %{S:23} .
@@ -674,7 +638,7 @@ install -Dm644 %{SOURCE42} %{buildroot}%{_unitdir}/rfkill-unblock@.service
 # util-linux install
 #
 %make_install
-rm -f %{buildroot}%{python_sitearch}/libmount/*.*a
+rm -f %{buildroot}%{python3_sitearch}/libmount/*.*a
 %if %build_util_linux
 #UsrMerge
 ln -s %{_bindir}/kill %{buildroot}/bin
@@ -1376,12 +1340,12 @@ getent passwd uuidd >/dev/null || \
 
 %if %build_python_libmount
 %if %build_util_linux
-%files -n python-libmount
+%files -n python3-libmount
 %else
 %files
 %endif
 %defattr(-, root, root)
-%{python_sitearch}/libmount
+%{python3_sitearch}/libmount
 %endif
 
 %changelog
diff --git a/util-linux-2.31.1.tar.sign b/util-linux-2.31.1.tar.sign
deleted file mode 100644
index a84d188..0000000
--- a/util-linux-2.31.1.tar.sign
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN PGP SIGNATURE-----
-
-iQIzBAABCAAdFiEEsMZNFDAcxu+u32Dk5LcdXuw5woQFAlo5LQkACgkQ5LcdXuw5
-woSyww//djBJmPc3Jvy7eJSVjC3xbFgro7wHaAM0BSFYgiW1aSsR04sSwGIEMtbv
-EMOyF83qVKSoiWb57VOeJGSCWXUPkMPaTzretEyaD5IH3rHBDp7Q5oTUMlNmLnoT
-q86oYBKNXox5bbLHPqpQaLUGGJWIjz9suRtT1Uau+ZKRudO3f9YZCJBnCkqTpqX+
-7TqPK53Gen1jw3u7kz1CRDMsTllfV1Gw+hhq8YI/xPApTLRIcBWq9DUVu9v5PHjQ
-M8rh9d3693mgkhtPQAGShKpC8nz0013AOG8bJm0yL69YWlVdhFDR2DColxZE1nEe
-3T7aZPZCseObHR1rqMUngKMD6B6D7XPfexWuWXRHgr7Aayz6S/IOYTvTjtBkgNri
-KJ+QDn/6Xs5xTsWu6wSh7wXfjtwk7NuLY1pVo9pL3r4KmfIBbODwE80FKSqCwHJm
-kI7J2QIiaKGWfry6vqrUgECGY48f1W0PNfgCbdJDW1HsVCvTaUiXfIc++HTxgxpv
-6IcU1a4ikVT9zRMVE5ypgZPIkwSaGJgeV1YwCa9qanM3dx86D/DTzLVdr/Nhvn96
-uPdp287aebllU+O1QK/79q5pf/UcBofgNc9GsVgtqlKNYN+REuoqYsDQ/Sz12kor
-SdF/tR3qtdTucdD/4fUcF2Uv8RLmc4cknZdz37ld6q0TSeyZShE=
-=uflt
------END PGP SIGNATURE-----
diff --git a/util-linux-2.31.1.tar.xz b/util-linux-2.31.1.tar.xz
deleted file mode 100644
index 005e472..0000000
--- a/util-linux-2.31.1.tar.xz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1a51b16fa9cd51d26ef9ab52d2f1de12403b810fc8252bf7d478df91b3cddf11
-size 4510096
diff --git a/util-linux-2.32.1.tar.sign b/util-linux-2.32.1.tar.sign
new file mode 100644
index 0000000..13ca0c5
--- /dev/null
+++ b/util-linux-2.32.1.tar.sign
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCAAdFiEEsMZNFDAcxu+u32Dk5LcdXuw5woQFAltMdfIACgkQ5LcdXuw5
+woRrBw//aQiUjq1kJ5ilwNxhuRHqCwltM8aIEsV5KxT2QG71ZSaAAJy/9+T9HTjW
+/Olv2jzf2dOYsY0pZ7+mhXxiMe/Oh5IQcsoeq1AwefriMNf7CMwWmOqnR/ijSF1j
+2Ij8wCpCkroqZj1o+YYX8paaDRpfany6yahSMbBCRD6SW+e1huMuSzMp2O6KRhMG
+k8xR0Oxq+Ok4R2VW9gUrHAwDIu54D48h77Pcp9hZ4Jn86ay6i3VBvJ7AsZW62lUu
+E1Qk4P/QIXk7W5PLAcbIdaznmSDfbJmnnDln9t269fq50IKyj/fp8oYkIO5VOVZL
+PJJh7cn2uAGY5C8RCmpt6f5GpDDMVyn/K/5fSgRsYge1hRJ+Z3l/buCGr5jI3vjt
+65UuFg7eKnqHLZEp7EVB7GlMjsKT83Pllz5tVvbmP/+wH4hihYEyxcmWkFvU/ZbC
+xntvp4ciSEyXJNkNyPwhprjuUx47MqipkTXDE8OSW7LhfHcrCpDKVNBljxWhTKqP
+UUGHq1nj18RtyNz9vRtwdLh0wDmyy2pNen12qcqLVRqoJAM05C1wl3eRwEKTvThz
+ZXLEQGbuf7EIDh50hg/MXn9S4bVh4S9wnWfx5qgwGBMVZzUrAWJ7c+SLWocvaEOQ
+LoYOKTVelY12+yPUNBHmNQl3e6dtFu+e9kRRc08whdNdIi6ILBw=
+=PX83
+-----END PGP SIGNATURE-----
diff --git a/util-linux-2.32.1.tar.xz b/util-linux-2.32.1.tar.xz
new file mode 100644
index 0000000..7f877ec
--- /dev/null
+++ b/util-linux-2.32.1.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86e6707a379c7ff5489c218cfaf1e3464b0b95acf7817db0bc5f179e356a67b2
+size 4561088
diff --git a/util-linux-chcpu-cpu-count.patch b/util-linux-chcpu-cpu-count.patch
deleted file mode 100644
index 31255b6..0000000
--- a/util-linux-chcpu-cpu-count.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 607274943bfd3d4856b872bc4278b36903fb2182 Mon Sep 17 00:00:00 2001
-From: Stanislav Brabec <sbrabec@suse.cz>
-Date: Wed, 9 May 2018 22:13:07 +0200
-Subject: [PATCH] chcpu: Fix maximal number of CPUs
-
-chcpu.c mixed maxcpus (number of cpus) and setsize (size of CPU bit
-mask). It effectively limits number of CPUs to 1/8 of the supported
-amount.
-
-Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
-Cc: Michael Matz <matz@suse.de>
-Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
----
- sys-utils/chcpu.c | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/sys-utils/chcpu.c b/sys-utils/chcpu.c
-index f32b7a6fc..4b5c7579a 100644
---- a/sys-utils/chcpu.c
-+++ b/sys-utils/chcpu.c
-@@ -75,12 +75,12 @@ enum {
-  */
- static int cpu_enable(cpu_set_t *cpu_set, size_t setsize, int enable)
- {
--	unsigned int cpu;
-+	int cpu;
- 	int online, rc;
- 	int configured = -1;
--	size_t fails = 0;
-+	int fails = 0;
- 
--	for (cpu = 0; cpu < setsize; cpu++) {
-+	for (cpu = 0; cpu < maxcpus; cpu++) {
- 		if (!CPU_ISSET_S(cpu, setsize, cpu_set))
- 			continue;
- 		if (!path_exist(_PATH_SYS_CPU "/cpu%d", cpu)) {
-@@ -132,7 +132,7 @@ static int cpu_enable(cpu_set_t *cpu_set, size_t setsize, int enable)
- 		}
- 	}
- 
--	return fails == 0 ? 0 : fails == setsize ? -1 : 1;
-+	return fails == 0 ? 0 : fails == maxcpus ? -1 : 1;
- }
- 
- static int cpu_rescan(void)
-@@ -168,11 +168,11 @@ static int cpu_set_dispatch(int mode)
-  */
- static int cpu_configure(cpu_set_t *cpu_set, size_t setsize, int configure)
- {
--	unsigned int cpu;
-+	int cpu;
- 	int rc, current;
--	size_t fails = 0;
-+	int fails = 0;
- 
--	for (cpu = 0; cpu < setsize; cpu++) {
-+	for (cpu = 0; cpu < maxcpus; cpu++) {
- 		if (!CPU_ISSET_S(cpu, setsize, cpu_set))
- 			continue;
- 		if (!path_exist(_PATH_SYS_CPU "/cpu%d", cpu)) {
-@@ -217,7 +217,7 @@ static int cpu_configure(cpu_set_t *cpu_set, size_t setsize, int configure)
- 		}
- 	}
- 
--	return fails == 0 ? 0 : fails == setsize ? -1 : 1;
-+	return fails == 0 ? 0 : fails == maxcpus ? -1 : 1;
- }
- 
- static void cpu_parse(char *cpu_string, cpu_set_t *cpu_set, size_t setsize)
--- 
-2.16.3
-
diff --git a/util-linux-cramfs.patch b/util-linux-cramfs.patch
deleted file mode 100644
index fd3a008..0000000
--- a/util-linux-cramfs.patch
+++ /dev/null
@@ -1,406 +0,0 @@
-commit 68ac426949170bb3802a6d610f366f24aa0bb734
-Author: Ruediger Meier <ruediger.meier@ga-group.nl>
-Date:   Tue Jan 23 16:59:25 2018 +0100
-
-    fsck.cramfs: fix error message
-    
-    errno is invalid in case that we just read(3) too short.
-    
-    Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
-
-commit c990f94cbcc68c7bab47458a09e361ce0791b6d8
-Author: Ruediger Meier <ruediger.meier@ga-group.nl>
-Date:   Tue Jan 23 16:59:24 2018 +0100
-
-    tests: rewrite fsck-bad-header
-    
-    Fix test for systems with pagesize != 4096
-    Loop over many combinations of sizes, endianness and blocksizes.
-    
-    Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
-
-commit 2374b1ab75c66c9ecea86fc97abb6d6c048bcf45
-Author: Ruediger Meier <ruediger.meier@ga-group.nl>
-Date:   Tue Jan 23 16:59:23 2018 +0100
-
-    fsck.cramfs: fix crash when superblock size is too small
-    
-    This hopefully fixes the original problem addressed by the reverted
-    patch 7cb962c7.
-    
-    The bug was introduced by myself in
-        f991dbd3 "fsck.cramfs: allow smaller superblock sizes"
-    
-    CC: Tobias Stoeckmann <tobias@stoeckmann.org>
-    Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
-
-commit 919e372da872bcc37502783e80564654569edb22
-Author: Ruediger Meier <ruediger.meier@ga-group.nl>
-Date:   Tue Jan 23 16:59:22 2018 +0100
-
-    Revert "fsck.cramfs: Fix bus error on broken file system."
-    
-    This reverts commit 7cb962c77015e9383b53eeb22ce732cb5216bbc3.
-    
-    It can't be right that we mmap (start + super.size) bytes from a file
-    which is usually only super.size bytes large. The patch "fixed" a
-    problem when super.size is bad but now it fails for the correct case:
-    
-    $ mkdir -p root/subdir
-    $ ./mkfs.cramfs -p root cramfs
-    $ ./fsck.cramfs cramfs
-    Bus error (core dumped)
-    
-    We will fix the original problem later.
-    
-    CC: Tobias Stoeckmann <tobias@stoeckmann.org>
-    Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
-
-diff -urN util-linux-2.31.1.orig/disk-utils/fsck.cramfs.c util-linux-2.31.1/disk-utils/fsck.cramfs.c
---- util-linux-2.31.1.orig/disk-utils/fsck.cramfs.c	2017-12-14 15:26:35.141144200 +0100
-+++ util-linux-2.31.1/disk-utils/fsck.cramfs.c	2018-01-26 18:41:01.001095311 +0100
-@@ -192,7 +192,7 @@
- 		errx(FSCK_EX_ERROR, _("unsupported filesystem features"));
- 
- 	/* What are valid superblock sizes? */
--	if (super.size < sizeof(struct cramfs_super))
-+	if (super.size < *start + sizeof(struct cramfs_super))
- 		errx(FSCK_EX_UNCORRECTED, _("superblock size (%d) too small"),
- 		     super.size);
- 
-@@ -220,24 +220,28 @@
- 	crc = crc32(0L, NULL, 0);
- 
- 	buf =
--	    mmap(NULL, start + super.size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
-+	    mmap(NULL, super.size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
- 	if (buf == MAP_FAILED) {
- 		buf =
--		    mmap(NULL, start + super.size, PROT_READ | PROT_WRITE,
-+		    mmap(NULL, super.size, PROT_READ | PROT_WRITE,
- 			 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- 		if (buf != MAP_FAILED) {
--			if (lseek(fd, start, SEEK_SET) == (off_t) -1)
-+			ssize_t tmp;
-+			if (lseek(fd, 0, SEEK_SET) == (off_t) -1)
- 				err(FSCK_EX_ERROR, _("seek on %s failed"), filename);
--			if (read(fd, (unsigned char *) buf + start, super.size) !=
--			    (ssize_t) super.size)
-+			tmp = read(fd, buf, super.size);
-+			if (tmp < 0)
- 				err(FSCK_EX_ERROR, _("cannot read %s"), filename);
-+			if (tmp != (ssize_t) super.size)
-+				errx(FSCK_EX_ERROR, _("failed to read %"PRIu32" bytes from file %s"),
-+					super.size, filename);
- 		}
- 	}
- 	if (buf != MAP_FAILED) {
- 		((struct cramfs_super *)((unsigned char *) buf + start))->fsid.crc =
- 		    crc32(0L, NULL, 0);
--		crc = crc32(crc, (unsigned char *) buf + start, super.size);
--		munmap(buf, start + super.size);
-+		crc = crc32(crc, (unsigned char *) buf + start, super.size - start);
-+		munmap(buf, super.size);
- 	} else {
- 		int retval;
- 		size_t length = 0;
-diff -urN util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header
---- util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header	2017-12-14 15:26:46.585066844 +0100
-+++ util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header	1970-01-01 01:00:00.000000000 +0100
-@@ -1,2 +0,0 @@
--fsck.cramfs: file extends past end of filesystem
--fsck.cramfs: crc error
-diff -urN util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-nopad-4K-be util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-nopad-4K-be
---- util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-nopad-4K-be	1970-01-01 01:00:00.000000000 +0100
-+++ util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-nopad-4K-be	2018-01-26 18:40:57.401031690 +0100
-@@ -0,0 +1,29 @@
-+## size: 0
-+fsck.cramfs: superblock size (0) too small
-+ret: 4
-+
-+## size: 75
-+fsck.cramfs: superblock size (75) too small
-+ret: 4
-+
-+## size: 76
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 4095
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 4096
-+ret: 0
-+
-+## size: 4097
-+fsck.cramfs: file length too short
-+ret: 4
-+
-+## size: 4294967295
-+fsck.cramfs: file length too short
-+ret: 4
-+
-diff -urN util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-nopad-4K-le util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-nopad-4K-le
---- util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-nopad-4K-le	1970-01-01 01:00:00.000000000 +0100
-+++ util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-nopad-4K-le	2018-01-26 18:40:57.401031690 +0100
-@@ -0,0 +1,29 @@
-+## size: 0
-+fsck.cramfs: superblock size (0) too small
-+ret: 4
-+
-+## size: 75
-+fsck.cramfs: superblock size (75) too small
-+ret: 4
-+
-+## size: 76
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 4095
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 4096
-+ret: 0
-+
-+## size: 4097
-+fsck.cramfs: file length too short
-+ret: 4
-+
-+## size: 4294967295
-+fsck.cramfs: file length too short
-+ret: 4
-+
-diff -urN util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-pad-4K-be util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-pad-4K-be
---- util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-pad-4K-be	1970-01-01 01:00:00.000000000 +0100
-+++ util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-pad-4K-be	2018-01-26 18:40:57.401031690 +0100
-@@ -0,0 +1,29 @@
-+## size: 76
-+fsck.cramfs: superblock size (76) too small
-+ret: 4
-+
-+## size: 587
-+fsck.cramfs: superblock size (587) too small
-+ret: 4
-+
-+## size: 588
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 4095
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 4096
-+ret: 0
-+
-+## size: 4097
-+fsck.cramfs: file length too short
-+ret: 4
-+
-+## size: 4294967295
-+fsck.cramfs: file length too short
-+ret: 4
-+
-diff -urN util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-pad-4K-le util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-pad-4K-le
---- util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-pad-4K-le	1970-01-01 01:00:00.000000000 +0100
-+++ util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-pad-4K-le	2018-01-26 18:40:57.401031690 +0100
-@@ -0,0 +1,29 @@
-+## size: 76
-+fsck.cramfs: superblock size (76) too small
-+ret: 4
-+
-+## size: 587
-+fsck.cramfs: superblock size (587) too small
-+ret: 4
-+
-+## size: 588
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 4095
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 4096
-+ret: 0
-+
-+## size: 4097
-+fsck.cramfs: file length too short
-+ret: 4
-+
-+## size: 4294967295
-+fsck.cramfs: file length too short
-+ret: 4
-+
-diff -urN util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-pad-64K-be util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-pad-64K-be
---- util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-pad-64K-be	1970-01-01 01:00:00.000000000 +0100
-+++ util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-pad-64K-be	2018-01-26 18:40:57.401031690 +0100
-@@ -0,0 +1,29 @@
-+## size: 76
-+fsck.cramfs: superblock size (76) too small
-+ret: 4
-+
-+## size: 587
-+fsck.cramfs: superblock size (587) too small
-+ret: 4
-+
-+## size: 588
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 65535
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 65536
-+ret: 0
-+
-+## size: 65537
-+fsck.cramfs: file length too short
-+ret: 4
-+
-+## size: 4294967295
-+fsck.cramfs: file length too short
-+ret: 4
-+
-diff -urN util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-pad-64K-le util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-pad-64K-le
---- util-linux-2.31.1.orig/tests/expected/cramfs/fsck-bad-header-pad-64K-le	1970-01-01 01:00:00.000000000 +0100
-+++ util-linux-2.31.1/tests/expected/cramfs/fsck-bad-header-pad-64K-le	2018-01-26 18:40:57.401031690 +0100
-@@ -0,0 +1,29 @@
-+## size: 76
-+fsck.cramfs: superblock size (76) too small
-+ret: 4
-+
-+## size: 587
-+fsck.cramfs: superblock size (587) too small
-+ret: 4
-+
-+## size: 588
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 65535
-+fsck.cramfs: file extends past end of filesystem
-+fsck.cramfs: crc error
-+ret: 4
-+
-+## size: 65536
-+ret: 0
-+
-+## size: 65537
-+fsck.cramfs: file length too short
-+ret: 4
-+
-+## size: 4294967295
-+fsck.cramfs: file length too short
-+ret: 4
-+
-diff -urN util-linux-2.31.1.orig/tests/ts/cramfs/fsck-bad-header util-linux-2.31.1/tests/ts/cramfs/fsck-bad-header
---- util-linux-2.31.1.orig/tests/ts/cramfs/fsck-bad-header	2017-12-14 15:26:46.585066844 +0100
-+++ util-linux-2.31.1/tests/ts/cramfs/fsck-bad-header	2018-01-26 18:40:57.401031690 +0100
-@@ -16,7 +16,7 @@
- # GNU General Public License for more details.
- #
- TS_TOPDIR="${0%/*}/../.."
--TS_DESC="fsck endianness"
-+TS_DESC="fsck bad header"
- 
- . $TS_TOPDIR/functions.sh
- ts_init "$*"
-@@ -25,14 +25,78 @@
- ts_check_test_command "$TS_CMD_FSCKCRAMFS"
- ts_check_prog "dd"
- 
--IMAGE_SOURCE="$TS_OUTDIR/${TS_TESTNAME}-data/root"
-+function num2binary()
-+{
-+	local num=$1
-+	local endian=$2
-+
-+	test "$num" -ge 0 -a "$num" -le 4294967295 || return 1
-+	test "$endian" = "be" -o "$endian" = "le" || return 1
-+
-+	# how to do that easier?
-+	if test "$endian" = "be"; then
-+		echo -en "$(printf "%08x" "$1" | sed 's/\(..\)/\\x\1/g')"
-+	else
-+		echo -en "$(printf "%08x" "$1" | sed 's/^\(..\)\(..\)\(..\)\(..\)$/\\x\4\\x\3\\x\2\\x\1/')"
-+	fi
-+}
-+
-+function fsck_loop_sizes()
-+{
-+	local endian=$1  # be, le
-+	local seek=$2    # 4 for nopad, 516 for pad
-+	shift 2          # the rest are sizes to loop over
-+
-+	for size in "$@"; do
-+		ts_log "## size: $size"
-+		cp -a "$IMAGE_FILE" "$IMAGE_FILE.tmp"
-+		num2binary "$size" $endian |
-+			dd of="$IMAGE_FILE.tmp" bs=1 seek="$seek" count=4 conv=notrunc &> /dev/null
-+		$TS_CMD_FSCKCRAMFS "$IMAGE_FILE.tmp" >> $TS_OUTPUT 2>&1
-+		ts_log "ret: $?
-+"
-+	done
-+	rm -f "$IMAGE_FILE"
-+}
-+
-+
-+IMAGE_SOURCE="$TS_OUTDIR/${TS_TESTNAME}-data"
- IMAGE_FILE="$TS_OUTDIR/${TS_TESTNAME}-cramfs.img"
- 
- mkdir -p "${IMAGE_SOURCE}/subdir" &> /dev/null
--$TS_CMD_MKCRAMFS -p -N big $IMAGE_SOURCE $IMAGE_FILE &> /dev/null
--echo -ne \\00\\x4c |
--	dd of=$IMAGE_FILE bs=1 seek=518 count=2 conv=notrunc &> /dev/null
--$TS_CMD_FSCKCRAMFS $IMAGE_FILE >> $TS_OUTPUT 2>&1
-+
-+ts_init_subtest "nopad-4K-be"
-+$TS_CMD_MKCRAMFS -N big -b 4096 $IMAGE_SOURCE $IMAGE_FILE &> /dev/null
-+fsck_loop_sizes be 4  0 75 76 4095 4096 4097 4294967295
-+rm -f "$IMAGE_FILE"
-+ts_finalize_subtest
-+
-+ts_init_subtest "nopad-4K-le"
-+$TS_CMD_MKCRAMFS -N little -b 4096 $IMAGE_SOURCE $IMAGE_FILE &> /dev/null
-+fsck_loop_sizes le 4  0 75 76 4095 4096 4097 4294967295
-+ts_finalize_subtest
-+
-+ts_init_subtest "pad-4K-be"
-+$TS_CMD_MKCRAMFS -p -N big -b 4096 $IMAGE_SOURCE $IMAGE_FILE &> /dev/null
-+fsck_loop_sizes be 516  76 587 588 4095 4096 4097 4294967295
-+ts_finalize_subtest
-+
-+ts_init_subtest "pad-4K-le"
-+$TS_CMD_MKCRAMFS -p -N little -b 4096 $IMAGE_SOURCE $IMAGE_FILE &> /dev/null
-+fsck_loop_sizes le 516  76 587 588 4095 4096 4097 4294967295
-+ts_finalize_subtest
-+
-+ts_init_subtest "pad-64K-be"
-+$TS_CMD_MKCRAMFS -p -N big -b 65536 $IMAGE_SOURCE $IMAGE_FILE &> /dev/null
-+fsck_loop_sizes be 516  76 587 588 65535 65536 65537 4294967295
-+ts_finalize_subtest
-+
-+ts_init_subtest "pad-64K-le"
-+$TS_CMD_MKCRAMFS -p -N little -b 65536 $IMAGE_SOURCE $IMAGE_FILE &> /dev/null
-+fsck_loop_sizes le 516  76 587 588 65535 65536 65537 4294967295
-+ts_finalize_subtest
-+
-+rm -rf "$IMAGE_SOURCE" "$IMAGE_FILE.tmp"
- 
- ts_finalize
- 
diff --git a/util-linux-fincore-count.patch b/util-linux-fincore-count.patch
deleted file mode 100644
index b7a79a7..0000000
--- a/util-linux-fincore-count.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-commit 839203c00ecb6b3dffd0d3eb8c77dac87584c241
-Author: Ruediger Meier <ruediger.meier@ga-group.nl>
-Date:   Tue Jan 23 16:59:27 2018 +0100
-
-    tests: fix fincore/count KNOWN_FAIL
-    
-    It has to be set after calling ts_init.
-    
-    Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
-
-commit 88e5d289d5dcec3dfb7bc8f8fac89ce789e69d3f
-Author: Karel Zak <kzak@redhat.com>
-Date:   Wed Jan 17 14:41:56 2018 +0100
-
-    tests: mark fincore/count as KNOWN_FAIL
-    
-    The test (or our expectations about Direct-IO) seems not robust
-    enough. I guess this is not fincore problem.
-    
-    Signed-off-by: Karel Zak <kzak@redhat.com>
-
-diff -urN util-linux-2.31.1.orig/tests/ts/fincore/count util-linux-2.31.1/tests/ts/fincore/count
---- util-linux-2.31.1.orig/tests/ts/fincore/count	2017-11-23 13:42:05.508423452 +0100
-+++ util-linux-2.31.1/tests/ts/fincore/count	2018-01-31 20:33:12.838715727 +0100
-@@ -8,6 +8,9 @@
- 
- ts_check_test_command "$TS_HELPER_SYSINFO"
- 
-+# Send patch if you know how to keep it portable and robust. Thanks.
-+TS_KNOWN_FAIL="yes"
-+
- function header
- {
-     echo "[" "$1" "]"
diff --git a/util-linux-libmount-mount-a-nfs-bind-mount.patch b/util-linux-libmount-mount-a-nfs-bind-mount.patch
deleted file mode 100644
index 22730b5..0000000
--- a/util-linux-libmount-mount-a-nfs-bind-mount.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 7966cbba53890e1010861b75bd9923e793bbc975 Mon Sep 17 00:00:00 2001
-From: NeilBrown <neilb@suse.com>
-Date: Wed, 18 Apr 2018 13:31:38 +1000
-Subject: [PATCH] libmount: fix mnt_table_is_fs_mounted() for NFS bind mounts.
-
-When you bind-mount a subdirectory of a local filesystem, the
-path to that subdirectory appears as the fourth field in mountinfo.
-
-For nfs mounts, the fourth field is always "/", and the subdirectory
-part is appended to the "special" (aka "device") field.  This is
-consistent with historical NFS usage which always includes a path in
-the fs_spec field.
-
-libmount needs to know about this when "mount -a" checks to see if
-a filesystem is already mounted.
-
-Without this fix, fstab lines like:
-
- server::/path /dir nfs defaults 0 0
- /dir/subdir /mnt/test none bind 0 0
-
-result in a new mount at /mnt/test every time "mount -a" is run.
-
-[kzak@redhat.com: - use strappend() rather than asprintf()]
-
-Signed-off-by: NeilBrown <neilb@suse.com>
-Signed-off-by: Karel Zak <kzak@redhat.com>
----
- libmount/src/tab.c | 13 ++++++++++++-
- 1 file changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/libmount/src/tab.c b/libmount/src/tab.c
-index 968057e42..eb61dd33e 100644
---- a/libmount/src/tab.c
-+++ b/libmount/src/tab.c
-@@ -1542,6 +1542,7 @@ int mnt_table_is_fs_mounted(struct libmnt_table *tb, struct libmnt_fs *fstab_fs)
- 	struct libmnt_fs *fs;
- 
- 	char *root = NULL;
-+	char *src2 = NULL;
- 	const char *src = NULL, *tgt = NULL;
- 	char *xtgt = NULL;
- 	int rc = 0;
-@@ -1566,8 +1567,17 @@ int mnt_table_is_fs_mounted(struct libmnt_table *tb, struct libmnt_fs *fstab_fs)
- 			flags = MS_BIND;
- 
- 		rootfs = mnt_table_get_fs_root(tb, fstab_fs, flags, &root);
--		if (rootfs)
-+		if (rootfs) {
-+			const char *fstype = mnt_fs_get_fstype(rootfs);
-+
- 			src = mnt_fs_get_srcpath(rootfs);
-+			if (fstype && strncmp(fstype, "nfs", 3) == 0 && root) {
-+				/* NFS stores the root at the end of the source */
-+				src = src2 = strappend(src, root);
-+				free(root);
-+				root = NULL;
-+			}
-+		}
- 	}
- 
- 	if (!src)
-@@ -1667,6 +1677,7 @@ done:
- 	free(root);
- 
- 	DBG(TAB, ul_debugobj(tb, "mnt_table_is_fs_mounted: %s [rc=%d]", src, rc));
-+	free(src2);
- 	return rc;
- }
- 
--- 
-2.16.3
-
diff --git a/util-linux-libmount-umount-a-segfault.patch b/util-linux-libmount-umount-a-segfault.patch
deleted file mode 100644
index c7ac007..0000000
--- a/util-linux-libmount-umount-a-segfault.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From f958101d2ea55174f8cd584efe41d4cefa9578c6 Mon Sep 17 00:00:00 2001
-From: Richard Fuchs <rfuchs@sipwise.com>
-Date: Tue, 17 Apr 2018 09:40:20 -0400
-Subject: [PATCH] bugfix: fix possible segfault during umount -a
-
-mnt_context_get_mtab() doesn't set its return **tb argument on error,
-and so in mnt_context_next_umount() mtab will remain uninitialized on
-error, later resulting in cxt->mtab containing garbage, possibly
-resulting in segfault on exit.
----
- libmount/src/context_umount.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/libmount/src/context_umount.c b/libmount/src/context_umount.c
-index 45651b58e..240ec3be6 100644
---- a/libmount/src/context_umount.c
-+++ b/libmount/src/context_umount.c
-@@ -1003,11 +1003,12 @@ int mnt_context_next_umount(struct libmnt_context *cxt,
- 	rc = mnt_context_get_mtab(cxt, &mtab);
- 	cxt->mtab = NULL;		/* do not reset mtab */
- 	mnt_reset_context(cxt);
--	cxt->mtab = mtab;
- 
- 	if (rc)
- 		return rc;
- 
-+	cxt->mtab = mtab;
-+
- 	do {
- 		rc = mnt_table_next_fs(mtab, itr, fs);
- 		if (rc != 0)
--- 
-2.16.3
-
diff --git a/util-linux-lscpu-chcpu-new-cpu-macros.patch b/util-linux-lscpu-chcpu-new-cpu-macros.patch
deleted file mode 100644
index a555cd3..0000000
--- a/util-linux-lscpu-chcpu-new-cpu-macros.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From 538b50cb0a4aac56b6b3b6e4d1e8ce886854c6d8 Mon Sep 17 00:00:00 2001
-From: Stanislav Brabec <sbrabec@suse.cz>
-Date: Wed, 9 May 2018 18:08:32 +0200
-Subject: [PATCH] lscpu, chcpu: Avoid use of the old CPU macros
-
-The old CPU macros are limited to 1024 cores. As a result, lscpu cannot
-count sockets on large systems. Use new scalable macros.
-
-Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
-Cc: Michael Matz <matz@suse.de>
----
- sys-utils/chcpu.c |  6 +++---
- sys-utils/lscpu.c | 13 +++++++++----
- 2 files changed, 12 insertions(+), 7 deletions(-)
-
-diff --git a/sys-utils/chcpu.c b/sys-utils/chcpu.c
-index 12e52d887..f32b7a6fc 100644
---- a/sys-utils/chcpu.c
-+++ b/sys-utils/chcpu.c
-@@ -81,7 +81,7 @@ static int cpu_enable(cpu_set_t *cpu_set, size_t setsize, int enable)
- 	size_t fails = 0;
- 
- 	for (cpu = 0; cpu < setsize; cpu++) {
--		if (!CPU_ISSET(cpu, cpu_set))
-+		if (!CPU_ISSET_S(cpu, setsize, cpu_set))
- 			continue;
- 		if (!path_exist(_PATH_SYS_CPU "/cpu%d", cpu)) {
- 			warnx(_("CPU %u does not exist"), cpu);
-@@ -127,7 +127,7 @@ static int cpu_enable(cpu_set_t *cpu_set, size_t setsize, int enable)
- 			} else {
- 				printf(_("CPU %u disabled\n"), cpu);
- 				if (onlinecpus)
--					CPU_CLR(cpu, onlinecpus);
-+					CPU_CLR_S(cpu, setsize, onlinecpus);
- 			}
- 		}
- 	}
-@@ -173,7 +173,7 @@ static int cpu_configure(cpu_set_t *cpu_set, size_t setsize, int configure)
- 	size_t fails = 0;
- 
- 	for (cpu = 0; cpu < setsize; cpu++) {
--		if (!CPU_ISSET(cpu, cpu_set))
-+		if (!CPU_ISSET_S(cpu, setsize, cpu_set))
- 			continue;
- 		if (!path_exist(_PATH_SYS_CPU "/cpu%d", cpu)) {
- 			warnx(_("CPU %u does not exist"), cpu);
-diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
-index 2132511a5..fd6d63bbf 100644
---- a/sys-utils/lscpu.c
-+++ b/sys-utils/lscpu.c
-@@ -478,7 +478,7 @@ read_basicinfo(struct lscpu_desc *desc, struct lscpu_modifier *mod)
- 		desc->idx2cpunum = xcalloc(desc->ncpuspos, sizeof(int));
- 
- 		for (num = 0, idx = 0; num < maxcpus; num++) {
--			if (CPU_ISSET(num, tmp))
-+			if (CPU_ISSET_S(num, setsize, tmp))
- 				desc->idx2cpunum[idx++] = num;
- 		}
- 		cpuset_free(tmp);
-@@ -1109,10 +1109,11 @@ cpu_max_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
- {
- 	int i;
- 	float cpu_freq = 0.0;
-+	size_t setsize = CPU_ALLOC_SIZE(maxcpus);
- 
- 	if (desc->present) {
- 		for (i = 0; i < desc->ncpuspos; i++) {
--			if (CPU_ISSET(real_cpu_num(desc, i), desc->present)
-+			if (CPU_ISSET_S(real_cpu_num(desc, i), setsize, desc->present)
- 			    && desc->maxmhz[i]) {
- 				float freq = atof(desc->maxmhz[i]);
- 
-@@ -1131,10 +1132,11 @@ cpu_min_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
- {
- 	int i;
- 	float cpu_freq = -1.0;
-+	size_t setsize = CPU_ALLOC_SIZE(maxcpus);
- 
- 	if (desc->present) {
- 		for (i = 0; i < desc->ncpuspos; i++) {
--			if (CPU_ISSET(real_cpu_num(desc, i), desc->present)
-+			if (CPU_ISSET_S(real_cpu_num(desc, i), setsize, desc->present)
- 			    && desc->minmhz[i]) {
- 				float freq = atof(desc->minmhz[i]);
- 
-@@ -1931,6 +1933,7 @@ int main(int argc, char *argv[])
- 	int c, i;
- 	int columns[ARRAY_SIZE(coldescs)], ncolumns = 0;
- 	int cpu_modifier_specified = 0;
-+	size_t setsize;
- 
- 	static const struct option longopts[] = {
- 		{ "all",        no_argument,       NULL, 'a' },
-@@ -2034,10 +2037,12 @@ int main(int argc, char *argv[])
- 
- 	read_basicinfo(desc, mod);
- 
-+	setsize = CPU_ALLOC_SIZE(maxcpus);
-+
- 	for (i = 0; i < desc->ncpuspos; i++) {
- 		/* only consider present CPUs */
- 		if (desc->present &&
--		    !CPU_ISSET(real_cpu_num(desc, i), desc->present))
-+		    !CPU_ISSET_S(real_cpu_num(desc, i), setsize, desc->present))
- 			continue;
- 		read_topology(desc, i);
- 		read_cache(desc, i);
--- 
-2.16.3
-
diff --git a/util-linux-lscpu-loop.patch b/util-linux-lscpu-loop.patch
deleted file mode 100644
index 116a58e..0000000
--- a/util-linux-lscpu-loop.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 95f09bc63c564c50ec2c393352801cc056faaea2 Mon Sep 17 00:00:00 2001
-From: Dirk Mueller <dmueller@suse.com>
-Date: Sat, 17 Mar 2018 13:18:38 +0100
-Subject: [PATCH] Avoid crash in min/max caculation when cpu#0 being offline
-
-When cpu#0 is offline, atof(NULL) is called which causes
-a segfault or endless loop depending on implementation
-circumstances. So instead of implicitely assumping that the
-first cpu is always available, do the presence checks for
-all including the first one.
----
- sys-utils/lscpu.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
-index 6d1fde555..2132511a5 100644
---- a/sys-utils/lscpu.c
-+++ b/sys-utils/lscpu.c
-@@ -1108,10 +1108,10 @@ static char *
- cpu_max_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
- {
- 	int i;
--	float cpu_freq = atof(desc->maxmhz[0]);
-+	float cpu_freq = 0.0;
- 
- 	if (desc->present) {
--		for (i = 1; i < desc->ncpuspos; i++) {
-+		for (i = 0; i < desc->ncpuspos; i++) {
- 			if (CPU_ISSET(real_cpu_num(desc, i), desc->present)
- 			    && desc->maxmhz[i]) {
- 				float freq = atof(desc->maxmhz[i]);
-@@ -1129,16 +1129,16 @@ cpu_max_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
- static char *
- cpu_min_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
- {
--        int i;
--        float cpu_freq = atof(desc->minmhz[0]);
-+	int i;
-+	float cpu_freq = -1.0;
- 
- 	if (desc->present) {
--		for (i = 1; i < desc->ncpuspos; i++) {
-+		for (i = 0; i < desc->ncpuspos; i++) {
- 			if (CPU_ISSET(real_cpu_num(desc, i), desc->present)
- 			    && desc->minmhz[i]) {
- 				float freq = atof(desc->minmhz[i]);
- 
--				if (freq < cpu_freq)
-+				if (cpu_freq < 0.0 || freq < cpu_freq)
- 					cpu_freq = freq;
- 			}
- 		}
--- 
-2.16.3
-
diff --git a/util-linux-lsmem-memory-zone-1.patch b/util-linux-lsmem-memory-zone-1.patch
deleted file mode 100644
index a0e2db9..0000000
--- a/util-linux-lsmem-memory-zone-1.patch
+++ /dev/null
@@ -1,536 +0,0 @@
-From 60a7e9e94e49215b1e6ac6e33b69c3bd0a426b5e Mon Sep 17 00:00:00 2001
-From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
-Date: Wed, 27 Sep 2017 19:44:44 +0200
-Subject: [PATCH 1/3] lsmem/chmem: add memory zone awareness
-
-With this patch, valid memory zones can be shown with lsmem, and chmem can
-set memory online/offline in a specific memory zone, if allowed by the
-kernel. The valid memory zones are read from the "valid_zones" sysfs
-attribute, and setting memory online to a specific zone is done by
-echoing "online_kernel" or "online_movable" to the "state" sysfs
-attribute, in addition to the previous "online".
-
-This patch also changes the default behavior of chmem, when setting memory
-online without specifying a memory zone. If valid, memory will be set
-online to the zone Movable. This zone is preferable for memory hotplug, as
-it makes memory offline much more likely to succeed.
-
-Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
----
- sys-utils/chmem.8 |  19 ++++++++
- sys-utils/chmem.c | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++----
- sys-utils/lsmem.1 |   4 +-
- sys-utils/lsmem.c |  98 ++++++++++++++++++++++++++++++++++++++-
- 4 files changed, 246 insertions(+), 11 deletions(-)
-
-diff --git a/sys-utils/chmem.8 b/sys-utils/chmem.8
-index a116bc9e7..dae7413d4 100644
---- a/sys-utils/chmem.8
-+++ b/sys-utils/chmem.8
-@@ -5,6 +5,7 @@ chmem \- configure memory
- .B chmem
- .RB [ \-h "] [" \-V "] [" \-v "] [" \-e | \-d "]"
- [\fISIZE\fP|\fIRANGE\fP|\fB\-b\fP \fIBLOCKRANGE\fP]
-+[-z ZONE]
- .SH DESCRIPTION
- The chmem command sets a particular size or range of memory online or offline.
- .
-@@ -25,6 +26,19 @@ and <last> is the number of the last memory block in the memory
- range. Alternatively a single block can be specified. \fIBLOCKRANGE\fP requires
- the \fB--blocks\fP option.
- .
-+.IP "\(hy" 2
-+Specify \fIZONE\fP as the name of a memory zone, as shown in the output of the
-+\fBlsmem -o +ZONES\fP command. The output shows one or more valid memory zones
-+for each memory range. If multiple zones are shown, then the memory range
-+currently belongs to the first zone. By default, chmem will set memory online
-+to the zone Movable, if this is among the valid zones. This default can be
-+changed by specifying the \fB--zone\fP option with another valid zone.
-+For memory ballooning, it is recommended to select the zone Movable for memory
-+online and offline, if possible. Memory in this zone is much more likely to be
-+able to be offlined again, but it cannot be used for arbitrary kernel
-+allocations, only for migratable pages (e.g. anonymous and page cache pages).
-+Use the \fB\-\-help\fR option to see all available zones.
-+.
- .PP
- \fISIZE\fP and \fIRANGE\fP must be aligned to the Linux memory block size, as
- shown in the output of the \fBlsmem\fP command.
-@@ -51,6 +65,11 @@ Set the specified \fIRANGE\fP, \fISIZE\fP, or \fIBLOCKRANGE\fP of memory offline
- .BR \-e ", " \-\-enable
- Set the specified \fIRANGE\fP, \fISIZE\fP, or \fIBLOCKRANGE\fP of memory online.
- .TP
-+.BR \-z ", " \-\-zone
-+Select the memory \fIZONE\fP where to set the specified \fIRANGE\fP, \fISIZE\fP,
-+or \fIBLOCKRANGE\fP of memory online or offline. By default, memory will be set
-+online to the zone Movable, if possible.
-+.TP
- .BR \-h ", " \-\-help
- Print a short help text, then exit.
- .TP
-diff --git a/sys-utils/chmem.c b/sys-utils/chmem.c
-index d9bc95cc1..2f0680de8 100644
---- a/sys-utils/chmem.c
-+++ b/sys-utils/chmem.c
-@@ -49,6 +49,7 @@ struct chmem_desc {
- 	unsigned int	use_blocks : 1;
- 	unsigned int	is_size	   : 1;
- 	unsigned int	verbose	   : 1;
-+	unsigned int	have_zones : 1;
- };
- 
- enum {
-@@ -57,6 +58,38 @@ enum {
- 	CMD_NONE
- };
- 
-+enum zone_id {
-+	ZONE_DMA = 0,
-+	ZONE_DMA32,
-+	ZONE_NORMAL,
-+	ZONE_HIGHMEM,
-+	ZONE_MOVABLE,
-+	ZONE_DEVICE,
-+};
-+
-+static char *zone_names[] = {
-+	[ZONE_DMA]	= "DMA",
-+	[ZONE_DMA32]	= "DMA32",
-+	[ZONE_NORMAL]	= "Normal",
-+	[ZONE_HIGHMEM]	= "Highmem",
-+	[ZONE_MOVABLE]	= "Movable",
-+	[ZONE_DEVICE]	= "Device",
-+};
-+
-+/*
-+ * name must be null-terminated
-+ */
-+static int zone_name_to_id(const char *name)
-+{
-+	size_t i;
-+
-+	for (i = 0; i < ARRAY_SIZE(zone_names); i++) {
-+		if (!strcasecmp(name, zone_names[i]))
-+			return i;
-+	}
-+	return -1;
-+}
-+
- static void idxtostr(struct chmem_desc *desc, uint64_t idx, char *buf, size_t bufsz)
- {
- 	uint64_t start, end;
-@@ -68,22 +101,49 @@ static void idxtostr(struct chmem_desc *desc, uint64_t idx, char *buf, size_t bu
- 		 idx, start, end);
- }
- 
--static int chmem_size(struct chmem_desc *desc, int enable)
-+static int chmem_size(struct chmem_desc *desc, int enable, int zone_id)
- {
- 	char *name, *onoff, line[BUFSIZ], str[BUFSIZ];
- 	uint64_t size, index;
-+	const char *zn;
- 	int i, rc;
- 
- 	size = desc->size;
- 	onoff = enable ? "online" : "offline";
- 	i = enable ? 0 : desc->ndirs - 1;
- 
-+	if (enable && zone_id >= 0) {
-+		if (zone_id == ZONE_MOVABLE)
-+			onoff = "online_movable";
-+		else
-+			onoff = "online_kernel";
-+	}
-+
- 	for (; i >= 0 && i < desc->ndirs && size; i += enable ? 1 : -1) {
- 		name = desc->dirs[i]->d_name;
- 		index = strtou64_or_err(name + 6, _("Failed to parse index"));
- 		path_read_str(line, sizeof(line), _PATH_SYS_MEMORY "/%s/state", name);
--		if (strcmp(onoff, line) == 0)
-+		if (strncmp(onoff, line, 6) == 0)
- 			continue;
-+
-+		if (desc->have_zones) {
-+			path_read_str(line, sizeof(line),
-+				      _PATH_SYS_MEMORY "/%s/valid_zones", name);
-+			if (zone_id >= 0) {
-+				zn = zone_names[zone_id];
-+				if (enable && !strcasestr(line, zn))
-+					continue;
-+				if (!enable && strncasecmp(line, zn, strlen(zn)))
-+					continue;
-+			} else if (enable) {
-+				/* By default, use zone Movable for online, if valid */
-+				if (strcasestr(line, zone_names[ZONE_MOVABLE]))
-+					onoff = "online_movable";
-+				else
-+					onoff = "online";
-+			}
-+		}
-+
- 		idxtostr(desc, index, str, sizeof(str));
- 		rc = path_write_str(onoff, _PATH_SYS_MEMORY"/%s/state", name);
- 		if (rc == -1 && desc->verbose) {
-@@ -115,15 +175,23 @@ static int chmem_size(struct chmem_desc *desc, int enable)
- 	return size == 0 ? 0 : size == desc->size ? -1 : 1;
- }
- 
--static int chmem_range(struct chmem_desc *desc, int enable)
-+static int chmem_range(struct chmem_desc *desc, int enable, int zone_id)
- {
- 	char *name, *onoff, line[BUFSIZ], str[BUFSIZ];
- 	uint64_t index, todo;
-+	const char *zn;
- 	int i, rc;
- 
- 	todo = desc->end - desc->start + 1;
- 	onoff = enable ? "online" : "offline";
- 
-+	if (enable && zone_id >= 0) {
-+		if (zone_id == ZONE_MOVABLE)
-+			onoff = "online_movable";
-+		else
-+			onoff = "online_kernel";
-+	}
-+
- 	for (i = 0; i < desc->ndirs; i++) {
- 		name = desc->dirs[i]->d_name;
- 		index = strtou64_or_err(name + 6, _("Failed to parse index"));
-@@ -133,7 +201,7 @@ static int chmem_range(struct chmem_desc *desc, int enable)
- 			break;
- 		idxtostr(desc, index, str, sizeof(str));
- 		path_read_str(line, sizeof(line), _PATH_SYS_MEMORY "/%s/state", name);
--		if (strcmp(onoff, line) == 0) {
-+		if (strncmp(onoff, line, 6) == 0) {
- 			if (desc->verbose && enable)
- 				fprintf(stdout, _("%s already enabled\n"), str);
- 			else if (desc->verbose && !enable)
-@@ -141,6 +209,29 @@ static int chmem_range(struct chmem_desc *desc, int enable)
- 			todo--;
- 			continue;
- 		}
-+
-+		if (desc->have_zones) {
-+			path_read_str(line, sizeof(line),
-+				      _PATH_SYS_MEMORY "/%s/valid_zones", name);
-+			if (zone_id >= 0) {
-+				zn = zone_names[zone_id];
-+				if (enable && !strcasestr(line, zn)) {
-+					warnx(_("%s enable failed: Zone mismatch"), str);
-+					continue;
-+				}
-+				if (!enable && strncasecmp(line, zn, strlen(zn))) {
-+					warnx(_("%s disable failed: Zone mismatch"), str);
-+					continue;
-+				}
-+			} else if (enable) {
-+				/* By default, use zone Movable for online, if valid */
-+				if (strcasestr(line, zone_names[ZONE_MOVABLE]))
-+					onoff = "online_movable";
-+				else
-+					onoff = "online";
-+			}
-+		}
-+
- 		rc = path_write_str(onoff, _PATH_SYS_MEMORY"/%s/state", name);
- 		if (rc == -1) {
- 			if (enable)
-@@ -237,6 +328,8 @@ static void parse_parameter(struct chmem_desc *desc, char *param)
- static void __attribute__((__noreturn__)) usage(void)
- {
- 	FILE *out = stdout;
-+	unsigned int i;
-+
- 	fputs(USAGE_HEADER, out);
- 	fprintf(out, _(" %s [options] [SIZE|RANGE|BLOCKRANGE]\n"), program_invocation_short_name);
- 
-@@ -247,6 +340,14 @@ static void __attribute__((__noreturn__)) usage(void)
- 	fputs(_(" -e, --enable   enable memory\n"), out);
- 	fputs(_(" -d, --disable  disable memory\n"), out);
- 	fputs(_(" -b, --blocks   use memory blocks\n"), out);
-+	fputs(_(" -z, --zone     select memory zone ("), out);
-+	for (i = 0; i < ARRAY_SIZE(zone_names); i++) {
-+		fputs(zone_names[i], out);
-+		if (i < ARRAY_SIZE(zone_names) - 1)
-+			fputc('|', out);
-+	}
-+	fputs(")\n", out);
-+
- 	fputs(_(" -v, --verbose  verbose output\n"), out);
- 	fputs(USAGE_SEPARATOR, out);
- 	printf(USAGE_HELP_OPTIONS(16));
-@@ -259,7 +360,8 @@ static void __attribute__((__noreturn__)) usage(void)
- int main(int argc, char **argv)
- {
- 	struct chmem_desc _desc = { }, *desc = &_desc;
--	int cmd = CMD_NONE;
-+	int cmd = CMD_NONE, zone_id = -1;
-+	char *zone = NULL;
- 	int c, rc;
- 
- 	static const struct option longopts[] = {
-@@ -269,6 +371,7 @@ int main(int argc, char **argv)
- 		{"help",	no_argument,		NULL, 'h'},
- 		{"verbose",	no_argument,		NULL, 'v'},
- 		{"version",	no_argument,		NULL, 'V'},
-+		{"zone",	required_argument,	NULL, 'z'},
- 		{NULL,		0,			NULL, 0}
- 	};
- 
-@@ -285,7 +388,7 @@ int main(int argc, char **argv)
- 
- 	read_info(desc);
- 
--	while ((c = getopt_long(argc, argv, "bdehvV", longopts, NULL)) != -1) {
-+	while ((c = getopt_long(argc, argv, "bdehvVz:", longopts, NULL)) != -1) {
- 
- 		err_exclusive_options(c, longopts, excl, excl_st);
- 
-@@ -308,6 +411,9 @@ int main(int argc, char **argv)
- 		case 'V':
- 			printf(UTIL_LINUX_VERSION);
- 			return EXIT_SUCCESS;
-+		case 'z':
-+			zone = xstrdup(optarg);
-+			break;
- 		default:
- 			errtryhelp(EXIT_FAILURE);
- 		}
-@@ -320,10 +426,24 @@ int main(int argc, char **argv)
- 
- 	parse_parameter(desc, argv[optind]);
- 
-+	/* The valid_zones sysfs attribute was introduced with kernel 3.18 */
-+	if (path_exist(_PATH_SYS_MEMORY "/memory0/valid_zones"))
-+		desc->have_zones = 1;
-+	else if (zone)
-+		warnx(_("zone ignored, no valid_zones sysfs attribute present"));
-+
-+	if (zone && desc->have_zones) {
-+		zone_id = zone_name_to_id(zone);
-+		if (zone_id == -1) {
-+			warnx(_("unknown memory zone: %s"), zone);
-+			errtryhelp(EXIT_FAILURE);
-+		}
-+	}
-+
- 	if (desc->is_size)
--		rc = chmem_size(desc, cmd == CMD_MEMORY_ENABLE ? 1 : 0);
-+		rc = chmem_size(desc, cmd == CMD_MEMORY_ENABLE ? 1 : 0, zone_id);
- 	else
--		rc = chmem_range(desc, cmd == CMD_MEMORY_ENABLE ? 1 : 0);
-+		rc = chmem_range(desc, cmd == CMD_MEMORY_ENABLE ? 1 : 0, zone_id);
- 
- 	return rc == 0 ? EXIT_SUCCESS :
- 		rc < 0 ? EXIT_FAILURE : CHMEM_EXIT_SOMEOK;
-diff --git a/sys-utils/lsmem.1 b/sys-utils/lsmem.1
-index be2862d94..e7df50a4e 100644
---- a/sys-utils/lsmem.1
-+++ b/sys-utils/lsmem.1
-@@ -41,12 +41,12 @@ Do not print a header line.
- .BR \-o , " \-\-output " \fIlist\fP
- Specify which output columns to print.  Use \fB\-\-help\fR
- to get a list of all supported columns.
-+The default list of columns may be extended if \fIlist\fP is
-+specified in the format \fB+\fIlist\fP (e.g. \fBlsmem \-o +NODE\fP).
- .TP
- .BR \-P , " \-\-pairs"
- Produce output in the form of key="value" pairs.
- All potentially unsafe characters are hex-escaped (\\x<code>).
--The default list of columns may be extended if \fIlist\fP is
--specified in the format \fB+\fIlist\fP (e.g. \fBlsmem \-o +NODE\fP).
- .TP
- .BR \-r , " \-\-raw"
- Produce output in raw format.  All potentially unsafe characters are hex-escaped
-diff --git a/sys-utils/lsmem.c b/sys-utils/lsmem.c
-index aeffd29dd..1d26579fd 100644
---- a/sys-utils/lsmem.c
-+++ b/sys-utils/lsmem.c
-@@ -42,11 +42,25 @@
- #define MEMORY_STATE_GOING_OFFLINE	2
- #define MEMORY_STATE_UNKNOWN		3
- 
-+enum zone_id {
-+	ZONE_DMA = 0,
-+	ZONE_DMA32,
-+	ZONE_NORMAL,
-+	ZONE_HIGHMEM,
-+	ZONE_MOVABLE,
-+	ZONE_DEVICE,
-+	ZONE_NONE,
-+	ZONE_UNKNOWN,
-+	MAX_NR_ZONES,
-+};
-+
- struct memory_block {
- 	uint64_t	index;
- 	uint64_t	count;
- 	int		state;
- 	int		node;
-+	int		nr_zones;
-+	int		zones[MAX_NR_ZONES];
- 	unsigned int	removable:1;
- };
- 
-@@ -72,7 +86,9 @@ struct lsmem {
- 				want_state : 1,
- 				want_removable : 1,
- 				want_summary : 1,
--				want_table : 1;
-+				want_table : 1,
-+				want_zones : 1,
-+				have_zones : 1;
- };
- 
- enum {
-@@ -82,6 +98,18 @@ enum {
- 	COL_REMOVABLE,
- 	COL_BLOCK,
- 	COL_NODE,
-+	COL_ZONES,
-+};
-+
-+static char *zone_names[] = {
-+	[ZONE_DMA]	= "DMA",
-+	[ZONE_DMA32]	= "DMA32",
-+	[ZONE_NORMAL]	= "Normal",
-+	[ZONE_HIGHMEM]	= "Highmem",
-+	[ZONE_MOVABLE]	= "Movable",
-+	[ZONE_DEVICE]	= "Device",
-+	[ZONE_NONE]	= "None",	/* block contains more than one zone, can't be offlined */
-+	[ZONE_UNKNOWN]	= "Unknown",
- };
- 
- /* column names */
-@@ -102,6 +130,7 @@ static struct coldesc coldescs[] = {
- 	[COL_REMOVABLE]	= { "REMOVABLE", 0, SCOLS_FL_RIGHT, N_("memory is removable")},
- 	[COL_BLOCK]	= { "BLOCK", 0, SCOLS_FL_RIGHT, N_("memory block number or blocks range")},
- 	[COL_NODE]	= { "NODE", 0, SCOLS_FL_RIGHT, N_("numa node of memory")},
-+	[COL_ZONES]	= { "ZONES", 0, SCOLS_FL_RIGHT, N_("valid zones for the memory range")},
- };
- 
- /* columns[] array specifies all currently wanted output column. The columns
-@@ -120,6 +149,20 @@ static inline size_t err_columns_index(size_t arysz, size_t idx)
- 	return idx;
- }
- 
-+/*
-+ * name must be null-terminated
-+ */
-+static int zone_name_to_id(const char *name)
-+{
-+	size_t i;
-+
-+	for (i = 0; i < ARRAY_SIZE(zone_names); i++) {
-+		if (!strcasecmp(name, zone_names[i]))
-+			return i;
-+	}
-+	return ZONE_UNKNOWN;
-+}
-+
- #define add_column(ary, n, id)	\
- 		((ary)[ err_columns_index(ARRAY_SIZE(ary), (n)) ] = (id))
- 
-@@ -214,6 +257,25 @@ static void add_scols_line(struct lsmem *lsmem, struct memory_block *blk)
- 			else
- 				str = xstrdup("-");
- 			break;
-+		case COL_ZONES:
-+			if (lsmem->have_zones) {
-+				char valid_zones[BUFSIZ];
-+				int j, zone_id;
-+
-+				valid_zones[0] = '\0';
-+				for (j = 0; j < blk->nr_zones; j++) {
-+					zone_id = blk->zones[j];
-+					if (strlen(valid_zones) +
-+					    strlen(zone_names[zone_id]) > BUFSIZ - 2)
-+						break;
-+					strcat(valid_zones, zone_names[zone_id]);
-+					if (j + 1 < blk->nr_zones)
-+						strcat(valid_zones, "/");
-+				}
-+				str = xstrdup(valid_zones);
-+			} else
-+				str = xstrdup("-");
-+			break;
- 		}
- 
- 		if (str && scols_line_refer_data(line, i, str) != 0)
-@@ -272,7 +334,9 @@ static int memory_block_get_node(char *name)
- static void memory_block_read_attrs(struct lsmem *lsmem, char *name,
- 				    struct memory_block *blk)
- {
-+	char *token = NULL;
- 	char line[BUFSIZ];
-+	int i;
- 
- 	blk->count = 1;
- 	blk->index = strtoumax(name + 6, NULL, 10); /* get <num> of "memory<num>" */
-@@ -287,11 +351,26 @@ static void memory_block_read_attrs(struct lsmem *lsmem, char *name,
- 		blk->state = MEMORY_STATE_GOING_OFFLINE;
- 	if (lsmem->have_nodes)
- 		blk->node = memory_block_get_node(name);
-+
-+	blk->nr_zones = 0;
-+	if (lsmem->have_zones) {
-+		path_read_str(line, sizeof(line), _PATH_SYS_MEMORY"/%s/%s", name,
-+			      "valid_zones");
-+		token = strtok(line, " ");
-+	}
-+	for (i = 0; i < MAX_NR_ZONES; i++) {
-+		if (token) {
-+			blk->zones[i] = zone_name_to_id(token);
-+			blk->nr_zones++;
-+			token = strtok(NULL, " ");
-+		}
-+	}
- }
- 
- static int is_mergeable(struct lsmem *lsmem, struct memory_block *blk)
- {
- 	struct memory_block *curr;
-+	int i;
- 
- 	if (!lsmem->nblocks)
- 		return 0;
-@@ -308,6 +387,15 @@ static int is_mergeable(struct lsmem *lsmem, struct memory_block *blk)
- 		if (curr->node != blk->node)
- 			return 0;
- 	}
-+	if (lsmem->want_zones && lsmem->have_zones) {
-+		if (curr->nr_zones != blk->nr_zones)
-+			return 0;
-+		for (i = 0; i < curr->nr_zones; i++) {
-+			if (curr->zones[i] == ZONE_UNKNOWN ||
-+			    curr->zones[i] != blk->zones[i])
-+				return 0;
-+		}
-+	}
- 	return 1;
- }
- 
-@@ -362,6 +450,12 @@ static void read_basic_info(struct lsmem *lsmem)
- 
- 	if (memory_block_get_node(lsmem->dirs[0]->d_name) != -1)
- 		lsmem->have_nodes = 1;
-+
-+	/* The valid_zones sysfs attribute was introduced with kernel 3.18 */
-+	if (path_exist(_PATH_SYS_MEMORY "/memory0/valid_zones"))
-+		lsmem->have_zones = 1;
-+	else if (lsmem->want_zones)
-+		warnx(_("Cannot read zones, no valid_zones sysfs attribute present"));
- }
- 
- static void __attribute__((__noreturn__)) usage(void)
-@@ -553,6 +647,8 @@ int main(int argc, char **argv)
- 		lsmem->want_node = 1;
- 	if (has_column(COL_REMOVABLE))
- 		lsmem->want_removable = 1;
-+	if (has_column(COL_ZONES))
-+		lsmem->want_zones = 1;
- 
- 	/*
- 	 * Read data and print output
--- 
-2.15.0
-
diff --git a/util-linux-lsmem-memory-zone-2.patch b/util-linux-lsmem-memory-zone-2.patch
deleted file mode 100644
index db965b4..0000000
--- a/util-linux-lsmem-memory-zone-2.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 0a4320f5e785e82337c3a657c55651004e3fd08d Mon Sep 17 00:00:00 2001
-From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
-Date: Wed, 27 Sep 2017 19:44:45 +0200
-Subject: [PATCH 2/3] tests/lsmem: update lsmem test with ZONES column
-
-The existing s390 and x86_64 dumps already contain the valid_zones sysfs
-attribute, so just add a new "lsmem -o +ZONES" test command and update
-the expected results.
-
-Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
----
- tests/expected/lsmem/lsmem-s390-zvm-6g | 21 ++++++++++++++++++
- tests/expected/lsmem/lsmem-x86_64-16g  | 39 ++++++++++++++++++++++++++++++++++
- tests/ts/lsmem/lsmem                   |  1 +
- 3 files changed, 61 insertions(+)
-
-diff --git a/tests/expected/lsmem/lsmem-s390-zvm-6g b/tests/expected/lsmem/lsmem-s390-zvm-6g
-index 05af40d4d..9f4c805ad 100644
---- a/tests/expected/lsmem/lsmem-s390-zvm-6g
-+++ b/tests/expected/lsmem/lsmem-s390-zvm-6g
-@@ -106,3 +106,24 @@ $ lsmem --json --output RANGE,SIZE,STATE,REMOVABLE,BLOCK,NODE
-       {"range": "0x0000000140000000-0x000000017fffffff", "size": "1G", "state": "offline", "removable": "-", "block": "20-23", "node": "0"}
-    ]
- }
-+
-+---
-+
-+$ lsmem -o +ZONES
-+RANGE                                  SIZE   STATE REMOVABLE BLOCK          ZONES
-+0x0000000000000000-0x000000006fffffff  1.8G  online       yes   0-6            DMA
-+0x0000000070000000-0x000000007fffffff  256M  online        no     7     DMA/Normal
-+0x0000000080000000-0x000000009fffffff  512M  online       yes   8-9         Normal
-+0x00000000a0000000-0x00000000bfffffff  512M  online        no 10-11         Normal
-+0x00000000c0000000-0x00000000dfffffff  512M  online       yes 12-13         Normal
-+0x00000000e0000000-0x00000000efffffff  256M offline         -    14         Normal
-+0x00000000f0000000-0x00000000ffffffff  256M  online       yes    15         Normal
-+0x0000000100000000-0x000000010fffffff  256M  online        no    16         Normal
-+0x0000000110000000-0x000000011fffffff  256M  online        no    17 Normal/Movable
-+0x0000000120000000-0x000000012fffffff  256M  online       yes    18 Movable/Normal
-+0x0000000130000000-0x000000013fffffff  256M  online       yes    19        Movable
-+0x0000000140000000-0x000000017fffffff    1G offline         - 20-23        Movable
-+
-+Memory block size:       256M
-+Total online memory:     4.8G
-+Total offline memory:    1.3G
-diff --git a/tests/expected/lsmem/lsmem-x86_64-16g b/tests/expected/lsmem/lsmem-x86_64-16g
-index 14d7d84f6..40316a584 100644
---- a/tests/expected/lsmem/lsmem-x86_64-16g
-+++ b/tests/expected/lsmem/lsmem-x86_64-16g
-@@ -269,3 +269,42 @@ $ lsmem --json --output RANGE,SIZE,STATE,REMOVABLE,BLOCK,NODE
-       {"range": "0x0000000438000000-0x000000043fffffff", "size": "128M", "state": "online", "removable": "no", "block": "135", "node": "0"}
-    ]
- }
-+
-+---
-+
-+$ lsmem -o +ZONES
-+RANGE                                  SIZE  STATE REMOVABLE   BLOCK  ZONES
-+0x0000000000000000-0x0000000007ffffff  128M online        no       0   None
-+0x0000000008000000-0x0000000037ffffff  768M online       yes     1-6  DMA32
-+0x0000000038000000-0x000000003fffffff  128M online        no       7  DMA32
-+0x0000000040000000-0x0000000077ffffff  896M online       yes    8-14  DMA32
-+0x0000000078000000-0x000000007fffffff  128M online        no      15  DMA32
-+0x0000000080000000-0x00000000afffffff  768M online       yes   16-21  DMA32
-+0x00000000b0000000-0x00000000bfffffff  256M online        no   22-23  DMA32
-+0x0000000100000000-0x00000001a7ffffff  2.6G online        no   32-52 Normal
-+0x00000001a8000000-0x00000001afffffff  128M online       yes      53 Normal
-+0x00000001b0000000-0x00000001bfffffff  256M online        no   54-55 Normal
-+0x00000001c0000000-0x00000001ffffffff    1G online       yes   56-63 Normal
-+0x0000000200000000-0x0000000207ffffff  128M online        no      64 Normal
-+0x0000000208000000-0x000000021fffffff  384M online       yes   65-67 Normal
-+0x0000000220000000-0x0000000237ffffff  384M online        no   68-70 Normal
-+0x0000000238000000-0x0000000277ffffff    1G online       yes   71-78 Normal
-+0x0000000278000000-0x000000028fffffff  384M online        no   79-81 Normal
-+0x0000000290000000-0x0000000297ffffff  128M online       yes      82 Normal
-+0x0000000298000000-0x00000002a7ffffff  256M online        no   83-84 Normal
-+0x00000002a8000000-0x00000002c7ffffff  512M online       yes   85-88 Normal
-+0x00000002c8000000-0x00000002dfffffff  384M online        no   89-91 Normal
-+0x00000002e0000000-0x00000002efffffff  256M online       yes   92-93 Normal
-+0x00000002f0000000-0x000000034fffffff  1.5G online        no  94-105 Normal
-+0x0000000350000000-0x0000000357ffffff  128M online       yes     106 Normal
-+0x0000000358000000-0x000000036fffffff  384M online        no 107-109 Normal
-+0x0000000370000000-0x0000000377ffffff  128M online       yes     110 Normal
-+0x0000000378000000-0x00000003c7ffffff  1.3G online        no 111-120 Normal
-+0x00000003c8000000-0x00000003e7ffffff  512M online       yes 121-124 Normal
-+0x00000003e8000000-0x000000042fffffff  1.1G online        no 125-133 Normal
-+0x0000000430000000-0x0000000437ffffff  128M online       yes     134 Normal
-+0x0000000438000000-0x000000043fffffff  128M online        no     135   None
-+
-+Memory block size:       128M
-+Total online memory:      16G
-+Total offline memory:      0B
-diff --git a/tests/ts/lsmem/lsmem b/tests/ts/lsmem/lsmem
-index 79c0523b9..b1313773e 100755
---- a/tests/ts/lsmem/lsmem
-+++ b/tests/ts/lsmem/lsmem
-@@ -49,6 +49,7 @@ for dump in $(ls $TS_SELF/dumps/*.tar.bz2 | sort); do
- 	do_lsmem --all --output $LSCOLUMNS
- 	do_lsmem --raw --output $LSCOLUMNS
- 	do_lsmem --json --output $LSCOLUMNS
-+	do_lsmem -o +ZONES
- 
- 	ts_finalize_subtest
- done
--- 
-2.15.0
-
diff --git a/util-linux-lsmem-memory-zone-3.patch b/util-linux-lsmem-memory-zone-3.patch
deleted file mode 100644
index 7f35038..0000000
--- a/util-linux-lsmem-memory-zone-3.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From afee3f204247fbc8e4cfaa1698f3d98762544dd8 Mon Sep 17 00:00:00 2001
-From: Andre Wild <wild@linux.vnet.ibm.com>
-Date: Wed, 27 Sep 2017 19:44:46 +0200
-Subject: [PATCH 3/3] lsmem/chmem: add memory zone awareness to bash-completion
-
-This patch extends the valid --output values with ZONES for the
-lsmem bash-completion, and adds the --zone option for the chmem
-bash-completion.
-
-Signed-off-by: Andre Wild <wild@linux.vnet.ibm.com>
-Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
----
- bash-completion/chmem | 1 +
- bash-completion/lsmem | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/bash-completion/chmem b/bash-completion/chmem
-index 00b870dbd..3e3af87ac 100644
---- a/bash-completion/chmem
-+++ b/bash-completion/chmem
-@@ -16,6 +16,7 @@ _chmem_module()
- 				--disable
- 				--blocks
- 				--verbose
-+				--zone
- 				--help
- 				--version
- 			"
-diff --git a/bash-completion/lsmem b/bash-completion/lsmem
-index 8f7a46ec3..9aa124569 100644
---- a/bash-completion/lsmem
-+++ b/bash-completion/lsmem
-@@ -9,7 +9,7 @@ _lsmem_module()
- 			local prefix realcur OUTPUT_ALL OUTPUT
- 			realcur="${cur##*,}"
- 			prefix="${cur%$realcur}"
--			OUTPUT_ALL='RANGE SIZE STATE REMOVABLE BLOCK NODE'
-+			OUTPUT_ALL='RANGE SIZE STATE REMOVABLE BLOCK NODE ZONES'
- 			for WORD in $OUTPUT_ALL; do
- 				if ! [[ $prefix == *"$WORD"* ]]; then
- 					OUTPUT="$WORD ${OUTPUT:-""}"
--- 
-2.15.0
-
diff --git a/util-linux-sysfs-nvme-devno.patch b/util-linux-sysfs-nvme-devno.patch
deleted file mode 100644
index 2f27cd0..0000000
--- a/util-linux-sysfs-nvme-devno.patch
+++ /dev/null
@@ -1,157 +0,0 @@
-From d51f05bfecb299a830897106460bf395be440c0a Mon Sep 17 00:00:00 2001
-From: Karel Zak <kzak@redhat.com>
-Date: Fri, 9 Feb 2018 14:18:18 +0100
-Subject: [PATCH] lsblk: try device/dev to read devno
-
-Now sysfs_devname_to_devno() reads devno from /dev or
-/sys/block/<name>/dev, but it seems that NVME uses
-/sys/block/<name>/device/dev.
-
-Reported-by: Potnuri Bharat Teja <bharat@chelsio.com>
-Signed-off-by: Karel Zak <kzak@redhat.com>
----
- lib/sysfs.c | 97 ++++++++++++++++++++++++++++++++++---------------------------
- 1 file changed, 54 insertions(+), 43 deletions(-)
-
-diff --git a/lib/sysfs.c b/lib/sysfs.c
-index e8125e511..b1b67c59f 100644
---- a/lib/sysfs.c
-+++ b/lib/sysfs.c
-@@ -48,10 +48,28 @@ char *sysfs_devno_path(dev_t devno, char *buf, size_t bufsiz)
- 	return sysfs_devno_attribute_path(devno, buf, bufsiz, NULL);
- }
- 
-+static dev_t read_devno(const char *path)
-+{
-+	FILE *f;
-+	int maj = 0, min = 0;
-+	dev_t dev = 0;
-+
-+	f = fopen(path, "r" UL_CLOEXECSTR);
-+	if (!f)
-+		return 0;
-+
-+	if (fscanf(f, "%d:%d", &maj, &min) == 2)
-+		dev = makedev(maj, min);
-+	fclose(f);
-+	return dev;
-+}
-+
- dev_t sysfs_devname_to_devno(const char *name, const char *parent)
- {
--	char buf[PATH_MAX], *path = NULL;
-+	char buf[PATH_MAX];
-+	char *_name = NULL;	/* name as encoded in sysfs */
- 	dev_t dev = 0;
-+	int len;
- 
- 	if (strncmp("/dev/", name, 5) == 0) {
- 		/*
-@@ -59,69 +77,62 @@ dev_t sysfs_devname_to_devno(const char *name, const char *parent)
- 		 */
- 		struct stat st;
- 
--		if (stat(name, &st) == 0)
-+		if (stat(name, &st) == 0) {
- 			dev = st.st_rdev;
--		else
--			name += 5;	/* unaccesible, or not node in /dev */
-+			goto done;
-+		}
-+		name += 5;	/* unaccesible, or not node in /dev */
- 	}
- 
--	if (!dev && parent && strncmp("dm-", name, 3)) {
-+	_name = strdup(name);
-+	if (!_name)
-+		goto done;
-+	sysfs_devname_dev_to_sys(_name);
-+
-+	if (parent && strncmp("dm-", name, 3)) {
- 		/*
- 		 * Create path to /sys/block/<parent>/<name>/dev
- 		 */
--		char *_name = strdup(name), *_parent = strdup(parent);
--		int len;
-+		char *_parent = strdup(parent);
- 
--		if (!_name || !_parent) {
--			free(_name);
-+		if (!_parent) {
- 			free(_parent);
--			return 0;
-+			goto done;
- 		}
--		sysfs_devname_dev_to_sys(_name);
- 		sysfs_devname_dev_to_sys(_parent);
- 
- 		len = snprintf(buf, sizeof(buf),
- 				_PATH_SYS_BLOCK "/%s/%s/dev", _parent, _name);
--		free(_name);
- 		free(_parent);
- 		if (len < 0 || (size_t) len >= sizeof(buf))
--			return 0;
--		path = buf;
-+			goto done;
- 
--	} else if (!dev) {
--		/*
--		 * Create path to /sys/block/<sysname>/dev
--		 */
--		char *_name = strdup(name);
--		int len;
--
--		if (!_name)
--			return 0;
--
--		sysfs_devname_dev_to_sys(_name);
--		len = snprintf(buf, sizeof(buf),
--				_PATH_SYS_BLOCK "/%s/dev", _name);
--		free(_name);
--		if (len < 0 || (size_t) len >= sizeof(buf))
--			return 0;
--		path = buf;
-+		/* don't try anything else for dm-* */
-+		dev = read_devno(buf);
-+		goto done;
- 	}
- 
--	if (path) {
-+	/*
-+	 * Read from /sys/block/<sysname>/dev
-+	 */
-+	len = snprintf(buf, sizeof(buf),
-+			_PATH_SYS_BLOCK "/%s/dev", _name);
-+	if (len < 0 || (size_t) len >= sizeof(buf))
-+		goto done;
-+	dev = read_devno(buf);
-+
-+	if (!dev) {
- 		/*
--		 * read devno from sysfs
-+		 * Read from /sys/block/<sysname>/device/dev
- 		 */
--		FILE *f;
--		int maj = 0, min = 0;
--
--		f = fopen(path, "r" UL_CLOEXECSTR);
--		if (!f)
--			return 0;
--
--		if (fscanf(f, "%d:%d", &maj, &min) == 2)
--			dev = makedev(maj, min);
--		fclose(f);
-+		len = snprintf(buf, sizeof(buf),
-+				_PATH_SYS_BLOCK "/%s/device/dev", _name);
-+		if (len < 0 || (size_t) len >= sizeof(buf))
-+			goto done;
-+		dev = read_devno(buf);
- 	}
-+done:
-+	free(_name);
- 	return dev;
- }
- 
--- 
-2.16.1
-
diff --git a/util-linux-systemd.changes b/util-linux-systemd.changes
index f345599..4956a6c 100644
--- a/util-linux-systemd.changes
+++ b/util-linux-systemd.changes
@@ -1,3 +1,41 @@
+-------------------------------------------------------------------
+Mon Aug  6 15:21:35 CEST 2018 - sbrabec@suse.com
+
+- Update to version 2.32.1:
+  * cal(1) has been improved and extended.
+  * libblkid has been extended to support LUKS2, Micron mpool, VDO
+    and Atari partition table.
+  * rfkill(8) has been moved to /usr/sbin.
+  * dmesg(1) provides better support for multi-line messages, new
+    command line option --force-prefix.
+  * fallocate(1) --dig-holes is faster and more effect now.
+  * fdisk(8) provides access to Protective MBR accessible from main
+    menu. Sun label support has been improved.
+  * lscpu(1) provides more details about ARM CPUs now
+    (FATE#326453).
+  * lsmem(1) supports memory zone awareness now (FATE#324252,
+    drop util-linux-lsmem-memory-zone-1.patch,
+    util-linux-lsmem-memory-zone-2.patch,
+    util-linux-lsmem-memory-zone-3.patch).
+  * lsns(8) provides netnsid and nsfs columns now.
+  * rtcwake(8) waits stdin to settle down before entering a system
+    sleep.
+  * Many fixes and improvements, see
+    https://www.kernel.org/pub/linux/utils/util-linux/v2.32/v2.32-ReleaseNotes
+    https://www.kernel.org/pub/linux/utils/util-linux/v2.32/v2.32.1-ReleaseNotes
+    (drop util_linux_bigendian.patch, util-linux-cramfs.patch,
+    util-linux-fincore-count.patch,
+    util-linux-sysfs-nvme-devno.patch, util-linux-lscpu-loop.patch,
+    util-linux-libmount-umount-a-segfault.patch,
+    util-linux-libmount-mount-a-nfs-bind-mount.patch,
+    util-linux-lscpu-chcpu-new-cpu-macros.patch,
+    util-linux-chcpu-cpu-count.patch).
+
+-------------------------------------------------------------------
+Tue Jul  3 16:27:27 CEST 2018 - sbrabec@suse.com
+
+- Switch python-libmount to python3-libmount.
+
 -------------------------------------------------------------------
 Tue May 22 11:54:13 UTC 2018 - tchvatal@suse.com
 
diff --git a/util-linux-systemd.spec b/util-linux-systemd.spec
index 77593f0..e6ef424 100644
--- a/util-linux-systemd.spec
+++ b/util-linux-systemd.spec
@@ -43,7 +43,7 @@ Name:           util-linux-systemd
 %define         group_ul    System/Base
 %define         group_uls   System/Base
 %define         group_pl    Development/Languages/Python
-%if "%{name}" == "python-libmount"
+%if "%{name}" == "python3-libmount"
 %define         build_util_linux 0
 %define         build_util_linux_systemd 0
 %define         build_python_libmount 1
@@ -101,7 +101,7 @@ BuildRequires:  systemd-rpm-macros
 BuildRequires:  pkgconfig(libsystemd)
 %endif
 %if %build_python_libmount
-BuildRequires:  python-devel
+BuildRequires:  python3-devel
 %endif
 #BEGIN SECOND STAGE DEPENDENCIES
 %if !%build_util_linux
@@ -116,7 +116,7 @@ BuildRequires:  libmount-devel
 %endif
 %endif
 #END SECOND STAGE DEPENDENCIES
-Version:        2.31.1
+Version:        2.32.1
 Release:        0
 # util-linux is a base package and uuidd pre-requiring pwdutils pulls
 # that into the core build cycle.  pwdutils also pulls in the whole
@@ -125,7 +125,7 @@ Release:        0
 # these tools as well
 #!BuildIgnore:  pwdutils
 Url:            https://www.kernel.org/pub/linux/utils/util-linux/
-Source:         https://www.kernel.org/pub/linux/utils/util-linux/v2.31/util-linux-%{version}.tar.xz
+Source:         https://www.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-%{version}.tar.xz
 Source1:        util-linux-rpmlintrc
 Source4:        raw.service
 Source5:        etc.raw
@@ -135,7 +135,7 @@ Source8:        login.pamd
 Source9:        remote.pamd
 Source10:       su.pamd
 Source11:       su.default
-Source12:       https://www.kernel.org/pub/linux/utils/util-linux/v2.31/util-linux-%{version}.tar.sign
+Source12:       https://www.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-%{version}.tar.sign
 Source13:       %{_name}.keyring
 Source14:       runuser.pamd
 Source15:       runuser-l.pamd
@@ -160,30 +160,6 @@ Source51:       blkid.conf
 ##
 # PATCH-EXTEND-UPSTREAM: Let `su' handle /sbin and /usr/sbin in path
 Patch0:         make-sure-sbin-resp-usr-sbin-are-in-PATH.diff
-# PATCH-FEATURE-UPSTREAM util-linux-lsmem-memory-zone-1.patch bsc1065471 FATE324252 sbrabec@suse.com -- lsmem: Add support for zone awareness.
-Patch1:         util-linux-lsmem-memory-zone-1.patch
-# PATCH-FEATURE-UPSTREAM util-linux-lsmem-memory-zone-2.patch bsc1065471 FATE324252 sbrabec@suse.com -- lsmem: Add support for zone awareness.
-Patch2:         util-linux-lsmem-memory-zone-2.patch
-# PATCH-FEATURE-UPSTREAM util-linux-lsmem-memory-zone-3.patch bsc1065471 FATE324252 sbrabec@suse.com -- lsmem: Add support for zone awareness.
-Patch3:         util-linux-lsmem-memory-zone-3.patch
-# Add four commits from upstream to pass tests on ppc64
-Patch4:         util_linux_bigendian.patch
-# PATCH-FIX-UPSTREAM util-linux-cramfs.patch sbrabec@suse.com -- Fix fsck.cramfs failure on ppc64le.
-Patch5:         util-linux-cramfs.patch
-# PATCH-FIX-UPSTREAM util-linux-fincore-count.patch sbrabec@suse.com -- Disable bad test fincore/count.
-Patch6:         util-linux-fincore-count.patch
-# PATCH-FIX-UPSTREAM util-linux-sysfs-nvme-devno.patch bsc1078662 sbrabec@suse.com -- Fix lsblk on NVMe.
-Patch7:         util-linux-sysfs-nvme-devno.patch
-# PATCH-FIX-UPSTREAM util-linux-lscpu-loop.patch bsc1072947 sbrabec@suse.com -- Fix crash loop in lscpu.
-Patch8:         util-linux-lscpu-loop.patch
-# PATCH-FIX-UPSTREAM util-linux-libmount-umount-a-segfault.patch sbrabec@suse.com -- Fix possible segfault of umount -a.
-Patch9:         util-linux-libmount-umount-a-segfault.patch
-# PATCH-FIX-UPSTREAM util-linux-libmount-mount-a-nfs-bind-mount.patch bsc1080740 sbrabec@suse.com -- Fix mount -a on NFS bind mounts.
-Patch10:        util-linux-libmount-mount-a-nfs-bind-mount.patch
-# PATCH-FIX-UPSTREAM util-linux-lscpu-chcpu-new-cpu-macros.patch bnc1091164 sbrabec@suse.com -- Fix lscpu and chcpu on systems with >1024 cores.
-Patch11:        util-linux-lscpu-chcpu-new-cpu-macros.patch
-# PATCH-FIX-UPSTREAM util-linux-chcpu-cpu-count.patch bnc1091164 sbrabec@suse.com -- chcpu: Properly count CPUs.
-Patch12:        util-linux-chcpu-cpu-count.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 #
 %if %build_util_linux
@@ -405,11 +381,11 @@ SMP systems.
 %endif
 %if %build_python_libmount
 %if %build_util_linux
-%package -n python-libmount
+%package -n python3-libmount
 Summary:        %summary_pl
 Group:          %group_pl
 
-%description -n python-libmount
+%description -n python3-libmount
 %else
 %description
 %endif
@@ -420,18 +396,6 @@ library.
 %prep
 %setup -q -n %{_name}-%{version} -b 40
 %patch0 -p1
-%patch1 -p1
-%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
-%patch11 -p1
-%patch12 -p1
 #
 # setctsid
 cp -p %{S:22} %{S:23} .
@@ -674,7 +638,7 @@ install -Dm644 %{SOURCE42} %{buildroot}%{_unitdir}/rfkill-unblock@.service
 # util-linux install
 #
 %make_install
-rm -f %{buildroot}%{python_sitearch}/libmount/*.*a
+rm -f %{buildroot}%{python3_sitearch}/libmount/*.*a
 %if %build_util_linux
 #UsrMerge
 ln -s %{_bindir}/kill %{buildroot}/bin
@@ -1376,12 +1340,12 @@ getent passwd uuidd >/dev/null || \
 
 %if %build_python_libmount
 %if %build_util_linux
-%files -n python-libmount
+%files -n python3-libmount
 %else
 %files
 %endif
 %defattr(-, root, root)
-%{python_sitearch}/libmount
+%{python3_sitearch}/libmount
 %endif
 
 %changelog
diff --git a/util-linux.changes b/util-linux.changes
index f345599..4956a6c 100644
--- a/util-linux.changes
+++ b/util-linux.changes
@@ -1,3 +1,41 @@
+-------------------------------------------------------------------
+Mon Aug  6 15:21:35 CEST 2018 - sbrabec@suse.com
+
+- Update to version 2.32.1:
+  * cal(1) has been improved and extended.
+  * libblkid has been extended to support LUKS2, Micron mpool, VDO
+    and Atari partition table.
+  * rfkill(8) has been moved to /usr/sbin.
+  * dmesg(1) provides better support for multi-line messages, new
+    command line option --force-prefix.
+  * fallocate(1) --dig-holes is faster and more effect now.
+  * fdisk(8) provides access to Protective MBR accessible from main
+    menu. Sun label support has been improved.
+  * lscpu(1) provides more details about ARM CPUs now
+    (FATE#326453).
+  * lsmem(1) supports memory zone awareness now (FATE#324252,
+    drop util-linux-lsmem-memory-zone-1.patch,
+    util-linux-lsmem-memory-zone-2.patch,
+    util-linux-lsmem-memory-zone-3.patch).
+  * lsns(8) provides netnsid and nsfs columns now.
+  * rtcwake(8) waits stdin to settle down before entering a system
+    sleep.
+  * Many fixes and improvements, see
+    https://www.kernel.org/pub/linux/utils/util-linux/v2.32/v2.32-ReleaseNotes
+    https://www.kernel.org/pub/linux/utils/util-linux/v2.32/v2.32.1-ReleaseNotes
+    (drop util_linux_bigendian.patch, util-linux-cramfs.patch,
+    util-linux-fincore-count.patch,
+    util-linux-sysfs-nvme-devno.patch, util-linux-lscpu-loop.patch,
+    util-linux-libmount-umount-a-segfault.patch,
+    util-linux-libmount-mount-a-nfs-bind-mount.patch,
+    util-linux-lscpu-chcpu-new-cpu-macros.patch,
+    util-linux-chcpu-cpu-count.patch).
+
+-------------------------------------------------------------------
+Tue Jul  3 16:27:27 CEST 2018 - sbrabec@suse.com
+
+- Switch python-libmount to python3-libmount.
+
 -------------------------------------------------------------------
 Tue May 22 11:54:13 UTC 2018 - tchvatal@suse.com
 
diff --git a/util-linux.spec b/util-linux.spec
index dbfc102..44e9c2f 100644
--- a/util-linux.spec
+++ b/util-linux.spec
@@ -43,7 +43,7 @@ Name:           util-linux
 %define         group_ul    System/Base
 %define         group_uls   System/Base
 %define         group_pl    Development/Languages/Python
-%if "%{name}" == "python-libmount"
+%if "%{name}" == "python3-libmount"
 %define         build_util_linux 0
 %define         build_util_linux_systemd 0
 %define         build_python_libmount 1
@@ -101,7 +101,7 @@ BuildRequires:  systemd-rpm-macros
 BuildRequires:  pkgconfig(libsystemd)
 %endif
 %if %build_python_libmount
-BuildRequires:  python-devel
+BuildRequires:  python3-devel
 %endif
 #BEGIN SECOND STAGE DEPENDENCIES
 %if !%build_util_linux
@@ -116,7 +116,7 @@ BuildRequires:  libmount-devel
 %endif
 %endif
 #END SECOND STAGE DEPENDENCIES
-Version:        2.31.1
+Version:        2.32.1
 Release:        0
 # util-linux is a base package and uuidd pre-requiring pwdutils pulls
 # that into the core build cycle.  pwdutils also pulls in the whole
@@ -125,7 +125,7 @@ Release:        0
 # these tools as well
 #!BuildIgnore:  pwdutils
 Url:            https://www.kernel.org/pub/linux/utils/util-linux/
-Source:         https://www.kernel.org/pub/linux/utils/util-linux/v2.31/util-linux-%{version}.tar.xz
+Source:         https://www.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-%{version}.tar.xz
 Source1:        util-linux-rpmlintrc
 Source4:        raw.service
 Source5:        etc.raw
@@ -135,7 +135,7 @@ Source8:        login.pamd
 Source9:        remote.pamd
 Source10:       su.pamd
 Source11:       su.default
-Source12:       https://www.kernel.org/pub/linux/utils/util-linux/v2.31/util-linux-%{version}.tar.sign
+Source12:       https://www.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-%{version}.tar.sign
 Source13:       %{_name}.keyring
 Source14:       runuser.pamd
 Source15:       runuser-l.pamd
@@ -160,30 +160,6 @@ Source51:       blkid.conf
 ##
 # PATCH-EXTEND-UPSTREAM: Let `su' handle /sbin and /usr/sbin in path
 Patch0:         make-sure-sbin-resp-usr-sbin-are-in-PATH.diff
-# PATCH-FEATURE-UPSTREAM util-linux-lsmem-memory-zone-1.patch bsc1065471 FATE324252 sbrabec@suse.com -- lsmem: Add support for zone awareness.
-Patch1:         util-linux-lsmem-memory-zone-1.patch
-# PATCH-FEATURE-UPSTREAM util-linux-lsmem-memory-zone-2.patch bsc1065471 FATE324252 sbrabec@suse.com -- lsmem: Add support for zone awareness.
-Patch2:         util-linux-lsmem-memory-zone-2.patch
-# PATCH-FEATURE-UPSTREAM util-linux-lsmem-memory-zone-3.patch bsc1065471 FATE324252 sbrabec@suse.com -- lsmem: Add support for zone awareness.
-Patch3:         util-linux-lsmem-memory-zone-3.patch
-# Add four commits from upstream to pass tests on ppc64
-Patch4:         util_linux_bigendian.patch
-# PATCH-FIX-UPSTREAM util-linux-cramfs.patch sbrabec@suse.com -- Fix fsck.cramfs failure on ppc64le.
-Patch5:         util-linux-cramfs.patch
-# PATCH-FIX-UPSTREAM util-linux-fincore-count.patch sbrabec@suse.com -- Disable bad test fincore/count.
-Patch6:         util-linux-fincore-count.patch
-# PATCH-FIX-UPSTREAM util-linux-sysfs-nvme-devno.patch bsc1078662 sbrabec@suse.com -- Fix lsblk on NVMe.
-Patch7:         util-linux-sysfs-nvme-devno.patch
-# PATCH-FIX-UPSTREAM util-linux-lscpu-loop.patch bsc1072947 sbrabec@suse.com -- Fix crash loop in lscpu.
-Patch8:         util-linux-lscpu-loop.patch
-# PATCH-FIX-UPSTREAM util-linux-libmount-umount-a-segfault.patch sbrabec@suse.com -- Fix possible segfault of umount -a.
-Patch9:         util-linux-libmount-umount-a-segfault.patch
-# PATCH-FIX-UPSTREAM util-linux-libmount-mount-a-nfs-bind-mount.patch bsc1080740 sbrabec@suse.com -- Fix mount -a on NFS bind mounts.
-Patch10:        util-linux-libmount-mount-a-nfs-bind-mount.patch
-# PATCH-FIX-UPSTREAM util-linux-lscpu-chcpu-new-cpu-macros.patch bnc1091164 sbrabec@suse.com -- Fix lscpu and chcpu on systems with >1024 cores.
-Patch11:        util-linux-lscpu-chcpu-new-cpu-macros.patch
-# PATCH-FIX-UPSTREAM util-linux-chcpu-cpu-count.patch bnc1091164 sbrabec@suse.com -- chcpu: Properly count CPUs.
-Patch12:        util-linux-chcpu-cpu-count.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 #
 %if %build_util_linux
@@ -405,11 +381,11 @@ SMP systems.
 %endif
 %if %build_python_libmount
 %if %build_util_linux
-%package -n python-libmount
+%package -n python3-libmount
 Summary:        %summary_pl
 Group:          %group_pl
 
-%description -n python-libmount
+%description -n python3-libmount
 %else
 %description
 %endif
@@ -420,18 +396,6 @@ library.
 %prep
 %setup -q -n %{_name}-%{version} -b 40
 %patch0 -p1
-%patch1 -p1
-%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
-%patch11 -p1
-%patch12 -p1
 #
 # setctsid
 cp -p %{S:22} %{S:23} .
@@ -674,7 +638,7 @@ install -Dm644 %{SOURCE42} %{buildroot}%{_unitdir}/rfkill-unblock@.service
 # util-linux install
 #
 %make_install
-rm -f %{buildroot}%{python_sitearch}/libmount/*.*a
+rm -f %{buildroot}%{python3_sitearch}/libmount/*.*a
 %if %build_util_linux
 #UsrMerge
 ln -s %{_bindir}/kill %{buildroot}/bin
@@ -1376,12 +1340,12 @@ getent passwd uuidd >/dev/null || \
 
 %if %build_python_libmount
 %if %build_util_linux
-%files -n python-libmount
+%files -n python3-libmount
 %else
 %files
 %endif
 %defattr(-, root, root)
-%{python_sitearch}/libmount
+%{python3_sitearch}/libmount
 %endif
 
 %changelog
diff --git a/util_linux_bigendian.patch b/util_linux_bigendian.patch
deleted file mode 100644
index dd052bd..0000000
--- a/util_linux_bigendian.patch
+++ /dev/null
@@ -1,512 +0,0 @@
-commit 3ae2cb49d9a8c20de1892c691b7cc86f4deb280c
-Author: Karel Zak <kzak@redhat.com>
-Date: Tue Dec 12 11:42:28 2017 +0100
-
-    lib/sha1: fix indention
-    
-    * indent -linux -psl -blf  lib/sha1.c
-    * manually fix comments
-    
-    Signed-off-by: Karel Zak <kzak@redhat.com>
-
-commit 4ff4b1106e8c6a71cce59ca40a2019342a92d47d
-Author: Karel Zak <kzak@redhat.com>
-Date: Tue Jan 2 11:08:03 2018 +0100
-
-    lib/sha1: use proper WORDS_BIGENDIAN macro
-    
-    The original code uses BYTE_ORDER, but we use WORDS_BIGENDIAN in
-    utl-linux.
-    
-    Reported-by: Andreas Schwab <schwab@linux-m68k.org>
-    Signed-off-by: Karel Zak <kzak@redhat.com>
-
---- util-linux-2.31.1/lib/sha1.c	2017-12-19 13:52:18.459949048 +0100
-+++ util-linux-2.31.1/lib/sha1.c	2018-01-26 17:51:47.456559746 +0100
-@@ -1,43 +1,31 @@
- /*
--SHA-1 in C
--By Steve Reid <steve@edmweb.com>
--100% Public Domain
--
--Test Vectors (from FIPS PUB 180-1)
--"abc"
--  A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
--"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
--  84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
--A million repetitions of "a"
--  34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
--*/
-+ * SHA-1 in C by Steve Reid <steve@edmweb.com>
-+ * 100% Public Domain
-+ *
-+ * Test Vectors (from FIPS PUB 180-1)
-+ * 1) "abc": A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
-+ * 2) "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq":  84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
-+ * 3) A million repetitions of "a":  34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
-+ */
- 
--/* #define LITTLE_ENDIAN * This should be #define'd already, if true. */
--/* #define SHA1HANDSOFF * Copies data before messing with it. */
--
--#define SHA1HANDSOFF
-+#define UL_SHA1HANDSOFF
- 
- #include <stdio.h>
- #include <string.h>
--
--/* for uint32_t */
- #include <stdint.h>
- 
- #include "sha1.h"
- 
--
- #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
- 
- /* blk0() and blk() perform the initial expand. */
--/* I got the idea of expanding during the round function from SSLeay */
--#if BYTE_ORDER == LITTLE_ENDIAN
--#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
--    |(rol(block->l[i],8)&0x00FF00FF))
--#elif BYTE_ORDER == BIG_ENDIAN
--#define blk0(i) block->l[i]
-+#ifdef WORDS_BIGENDIAN
-+# define blk0(i) block->l[i]
- #else
--#error "Endianness not defined!"
-+# define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
-+    |(rol(block->l[i],8)&0x00FF00FF))
- #endif
-+
- #define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
-     ^block->l[(i+2)&15]^block->l[i&15],1))
- 
-@@ -48,249 +36,221 @@
- #define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
- #define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
- 
--
- /* Hash a single 512-bit block. This is the core of the algorithm. */
- 
--void ul_SHA1Transform(
--    uint32_t state[5],
--    const unsigned char buffer[64]
--)
-+void ul_SHA1Transform(uint32_t state[5], const unsigned char buffer[64])
- {
--    uint32_t a, b, c, d, e;
-+	uint32_t a, b, c, d, e;
- 
--    typedef union
--    {
--        unsigned char c[64];
--        uint32_t l[16];
--    } CHAR64LONG16;
-+	typedef union {
-+		unsigned char c[64];
-+		uint32_t l[16];
-+	} CHAR64LONG16;
- 
--#ifdef SHA1HANDSOFF
--    CHAR64LONG16 block[1];      /* use array to appear as a pointer */
-+#ifdef UL_SHA1HANDSOFF
-+	CHAR64LONG16 block[1];	/* use array to appear as a pointer */
- 
--    memcpy(block, buffer, 64);
-+	memcpy(block, buffer, 64);
- #else
--    /* The following had better never be used because it causes the
--     * pointer-to-const buffer to be cast into a pointer to non-const.
--     * And the result is written through.  I threw a "const" in, hoping
--     * this will cause a diagnostic.
--     */
--    CHAR64LONG16 *block = (const CHAR64LONG16 *) buffer;
-+	/* The following had better never be used because it causes the
-+	 * pointer-to-const buffer to be cast into a pointer to non-const.
-+	 * And the result is written through.  I threw a "const" in, hoping
-+	 * this will cause a diagnostic.
-+	 */
-+	CHAR64LONG16 *block = (const CHAR64LONG16 *)buffer;
- #endif
--    /* Copy context->state[] to working vars */
--    a = state[0];
--    b = state[1];
--    c = state[2];
--    d = state[3];
--    e = state[4];
--    /* 4 rounds of 20 operations each. Loop unrolled. */
--    R0(a, b, c, d, e, 0);
--    R0(e, a, b, c, d, 1);
--    R0(d, e, a, b, c, 2);
--    R0(c, d, e, a, b, 3);
--    R0(b, c, d, e, a, 4);
--    R0(a, b, c, d, e, 5);
--    R0(e, a, b, c, d, 6);
--    R0(d, e, a, b, c, 7);
--    R0(c, d, e, a, b, 8);
--    R0(b, c, d, e, a, 9);
--    R0(a, b, c, d, e, 10);
--    R0(e, a, b, c, d, 11);
--    R0(d, e, a, b, c, 12);
--    R0(c, d, e, a, b, 13);
--    R0(b, c, d, e, a, 14);
--    R0(a, b, c, d, e, 15);
--    R1(e, a, b, c, d, 16);
--    R1(d, e, a, b, c, 17);
--    R1(c, d, e, a, b, 18);
--    R1(b, c, d, e, a, 19);
--    R2(a, b, c, d, e, 20);
--    R2(e, a, b, c, d, 21);
--    R2(d, e, a, b, c, 22);
--    R2(c, d, e, a, b, 23);
--    R2(b, c, d, e, a, 24);
--    R2(a, b, c, d, e, 25);
--    R2(e, a, b, c, d, 26);
--    R2(d, e, a, b, c, 27);
--    R2(c, d, e, a, b, 28);
--    R2(b, c, d, e, a, 29);
--    R2(a, b, c, d, e, 30);
--    R2(e, a, b, c, d, 31);
--    R2(d, e, a, b, c, 32);
--    R2(c, d, e, a, b, 33);
--    R2(b, c, d, e, a, 34);
--    R2(a, b, c, d, e, 35);
--    R2(e, a, b, c, d, 36);
--    R2(d, e, a, b, c, 37);
--    R2(c, d, e, a, b, 38);
--    R2(b, c, d, e, a, 39);
--    R3(a, b, c, d, e, 40);
--    R3(e, a, b, c, d, 41);
--    R3(d, e, a, b, c, 42);
--    R3(c, d, e, a, b, 43);
--    R3(b, c, d, e, a, 44);
--    R3(a, b, c, d, e, 45);
--    R3(e, a, b, c, d, 46);
--    R3(d, e, a, b, c, 47);
--    R3(c, d, e, a, b, 48);
--    R3(b, c, d, e, a, 49);
--    R3(a, b, c, d, e, 50);
--    R3(e, a, b, c, d, 51);
--    R3(d, e, a, b, c, 52);
--    R3(c, d, e, a, b, 53);
--    R3(b, c, d, e, a, 54);
--    R3(a, b, c, d, e, 55);
--    R3(e, a, b, c, d, 56);
--    R3(d, e, a, b, c, 57);
--    R3(c, d, e, a, b, 58);
--    R3(b, c, d, e, a, 59);
--    R4(a, b, c, d, e, 60);
--    R4(e, a, b, c, d, 61);
--    R4(d, e, a, b, c, 62);
--    R4(c, d, e, a, b, 63);
--    R4(b, c, d, e, a, 64);
--    R4(a, b, c, d, e, 65);
--    R4(e, a, b, c, d, 66);
--    R4(d, e, a, b, c, 67);
--    R4(c, d, e, a, b, 68);
--    R4(b, c, d, e, a, 69);
--    R4(a, b, c, d, e, 70);
--    R4(e, a, b, c, d, 71);
--    R4(d, e, a, b, c, 72);
--    R4(c, d, e, a, b, 73);
--    R4(b, c, d, e, a, 74);
--    R4(a, b, c, d, e, 75);
--    R4(e, a, b, c, d, 76);
--    R4(d, e, a, b, c, 77);
--    R4(c, d, e, a, b, 78);
--    R4(b, c, d, e, a, 79);
--    /* Add the working vars back into context.state[] */
--    state[0] += a;
--    state[1] += b;
--    state[2] += c;
--    state[3] += d;
--    state[4] += e;
--    /* Wipe variables */
--    a = b = c = d = e = 0;
--#ifdef SHA1HANDSOFF
--    memset(block, '\0', sizeof(block));
-+	/* Copy context->state[] to working vars */
-+	a = state[0];
-+	b = state[1];
-+	c = state[2];
-+	d = state[3];
-+	e = state[4];
-+	/* 4 rounds of 20 operations each. Loop unrolled. */
-+	R0(a, b, c, d, e, 0);
-+	R0(e, a, b, c, d, 1);
-+	R0(d, e, a, b, c, 2);
-+	R0(c, d, e, a, b, 3);
-+	R0(b, c, d, e, a, 4);
-+	R0(a, b, c, d, e, 5);
-+	R0(e, a, b, c, d, 6);
-+	R0(d, e, a, b, c, 7);
-+	R0(c, d, e, a, b, 8);
-+	R0(b, c, d, e, a, 9);
-+	R0(a, b, c, d, e, 10);
-+	R0(e, a, b, c, d, 11);
-+	R0(d, e, a, b, c, 12);
-+	R0(c, d, e, a, b, 13);
-+	R0(b, c, d, e, a, 14);
-+	R0(a, b, c, d, e, 15);
-+	R1(e, a, b, c, d, 16);
-+	R1(d, e, a, b, c, 17);
-+	R1(c, d, e, a, b, 18);
-+	R1(b, c, d, e, a, 19);
-+	R2(a, b, c, d, e, 20);
-+	R2(e, a, b, c, d, 21);
-+	R2(d, e, a, b, c, 22);
-+	R2(c, d, e, a, b, 23);
-+	R2(b, c, d, e, a, 24);
-+	R2(a, b, c, d, e, 25);
-+	R2(e, a, b, c, d, 26);
-+	R2(d, e, a, b, c, 27);
-+	R2(c, d, e, a, b, 28);
-+	R2(b, c, d, e, a, 29);
-+	R2(a, b, c, d, e, 30);
-+	R2(e, a, b, c, d, 31);
-+	R2(d, e, a, b, c, 32);
-+	R2(c, d, e, a, b, 33);
-+	R2(b, c, d, e, a, 34);
-+	R2(a, b, c, d, e, 35);
-+	R2(e, a, b, c, d, 36);
-+	R2(d, e, a, b, c, 37);
-+	R2(c, d, e, a, b, 38);
-+	R2(b, c, d, e, a, 39);
-+	R3(a, b, c, d, e, 40);
-+	R3(e, a, b, c, d, 41);
-+	R3(d, e, a, b, c, 42);
-+	R3(c, d, e, a, b, 43);
-+	R3(b, c, d, e, a, 44);
-+	R3(a, b, c, d, e, 45);
-+	R3(e, a, b, c, d, 46);
-+	R3(d, e, a, b, c, 47);
-+	R3(c, d, e, a, b, 48);
-+	R3(b, c, d, e, a, 49);
-+	R3(a, b, c, d, e, 50);
-+	R3(e, a, b, c, d, 51);
-+	R3(d, e, a, b, c, 52);
-+	R3(c, d, e, a, b, 53);
-+	R3(b, c, d, e, a, 54);
-+	R3(a, b, c, d, e, 55);
-+	R3(e, a, b, c, d, 56);
-+	R3(d, e, a, b, c, 57);
-+	R3(c, d, e, a, b, 58);
-+	R3(b, c, d, e, a, 59);
-+	R4(a, b, c, d, e, 60);
-+	R4(e, a, b, c, d, 61);
-+	R4(d, e, a, b, c, 62);
-+	R4(c, d, e, a, b, 63);
-+	R4(b, c, d, e, a, 64);
-+	R4(a, b, c, d, e, 65);
-+	R4(e, a, b, c, d, 66);
-+	R4(d, e, a, b, c, 67);
-+	R4(c, d, e, a, b, 68);
-+	R4(b, c, d, e, a, 69);
-+	R4(a, b, c, d, e, 70);
-+	R4(e, a, b, c, d, 71);
-+	R4(d, e, a, b, c, 72);
-+	R4(c, d, e, a, b, 73);
-+	R4(b, c, d, e, a, 74);
-+	R4(a, b, c, d, e, 75);
-+	R4(e, a, b, c, d, 76);
-+	R4(d, e, a, b, c, 77);
-+	R4(c, d, e, a, b, 78);
-+	R4(b, c, d, e, a, 79);
-+	/* Add the working vars back into context.state[] */
-+	state[0] += a;
-+	state[1] += b;
-+	state[2] += c;
-+	state[3] += d;
-+	state[4] += e;
-+	/* Wipe variables */
-+	a = b = c = d = e = 0;
-+#ifdef UL_SHA1HANDSOFF
-+	memset(block, '\0', sizeof(block));
- #endif
- }
- 
--
- /* SHA1Init - Initialize new context */
- 
--void ul_SHA1Init(
--    UL_SHA1_CTX * context
--)
-+void ul_SHA1Init(UL_SHA1_CTX *context)
- {
--    /* SHA1 initialization constants */
--    context->state[0] = 0x67452301;
--    context->state[1] = 0xEFCDAB89;
--    context->state[2] = 0x98BADCFE;
--    context->state[3] = 0x10325476;
--    context->state[4] = 0xC3D2E1F0;
--    context->count[0] = context->count[1] = 0;
-+	/* SHA1 initialization constants */
-+	context->state[0] = 0x67452301;
-+	context->state[1] = 0xEFCDAB89;
-+	context->state[2] = 0x98BADCFE;
-+	context->state[3] = 0x10325476;
-+	context->state[4] = 0xC3D2E1F0;
-+	context->count[0] = context->count[1] = 0;
- }
- 
--
- /* Run your data through this. */
- 
--void ul_SHA1Update(
--    UL_SHA1_CTX * context,
--    const unsigned char *data,
--    uint32_t len
--)
-+void ul_SHA1Update(UL_SHA1_CTX *context, const unsigned char *data, uint32_t len)
- {
--    uint32_t i;
-+	uint32_t i;
- 
--    uint32_t j;
-+	uint32_t j;
- 
--    j = context->count[0];
--    if ((context->count[0] += len << 3) < j)
--        context->count[1]++;
--    context->count[1] += (len >> 29);
--    j = (j >> 3) & 63;
--    if ((j + len) > 63)
--    {
--        memcpy(&context->buffer[j], data, (i = 64 - j));
--        ul_SHA1Transform(context->state, context->buffer);
--        for (; i + 63 < len; i += 64)
--        {
--            ul_SHA1Transform(context->state, &data[i]);
--        }
--        j = 0;
--    }
--    else
--        i = 0;
--    memcpy(&context->buffer[j], &data[i], len - i);
-+	j = context->count[0];
-+	if ((context->count[0] += len << 3) < j)
-+		context->count[1]++;
-+	context->count[1] += (len >> 29);
-+	j = (j >> 3) & 63;
-+	if ((j + len) > 63) {
-+		memcpy(&context->buffer[j], data, (i = 64 - j));
-+		ul_SHA1Transform(context->state, context->buffer);
-+		for (; i + 63 < len; i += 64) {
-+			ul_SHA1Transform(context->state, &data[i]);
-+		}
-+		j = 0;
-+	} else
-+		i = 0;
-+	memcpy(&context->buffer[j], &data[i], len - i);
- }
- 
--
- /* Add padding and return the message digest. */
- 
--void ul_SHA1Final(
--    unsigned char digest[20],
--    UL_SHA1_CTX * context
--)
-+void ul_SHA1Final(unsigned char digest[20], UL_SHA1_CTX *context)
- {
--    unsigned i;
-+	unsigned i;
- 
--    unsigned char finalcount[8];
-+	unsigned char finalcount[8];
- 
--    unsigned char c;
-+	unsigned char c;
- 
--#if 0    /* untested "improvement" by DHR */
--    /* Convert context->count to a sequence of bytes
--     * in finalcount.  Second element first, but
--     * big-endian order within element.
--     * But we do it all backwards.
--     */
--    unsigned char *fcp = &finalcount[8];
-+#if 0				/* untested "improvement" by DHR */
-+	/* Convert context->count to a sequence of bytes
-+	 * in finalcount.  Second element first, but
-+	 * big-endian order within element.
-+	 * But we do it all backwards.
-+	 */
-+	unsigned char *fcp = &finalcount[8];
- 
--    for (i = 0; i < 2; i++)
--    {
--        uint32_t t = context->count[i];
-+	for (i = 0; i < 2; i++) {
-+		uint32_t t = context->count[i];
- 
--        int j;
-+		int j;
- 
--        for (j = 0; j < 4; t >>= 8, j++)
--            *--fcp = (unsigned char) t}
-+		for (j = 0; j < 4; t >>= 8, j++)
-+			*--fcp = (unsigned char)t}
- #else
--    for (i = 0; i < 8; i++)
--    {
--        finalcount[i] = (unsigned char) ((context->count[(i >= 4 ? 0 : 1)] >> ((3 - (i & 3)) * 8)) & 255);      /* Endian independent */
--    }
-+	for (i = 0; i < 8; i++) {
-+		finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] >> ((3 - (i & 3)) * 8)) & 255);	/* Endian independent */
-+	}
- #endif
--    c = 0200;
--    ul_SHA1Update(context, &c, 1);
--    while ((context->count[0] & 504) != 448)
--    {
--        c = 0000;
--        ul_SHA1Update(context, &c, 1);
--    }
--    ul_SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
--    for (i = 0; i < 20; i++)
--    {
--        digest[i] = (unsigned char)
--            ((context->state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255);
--    }
--    /* Wipe variables */
--    memset(context, '\0', sizeof(*context));
--    memset(&finalcount, '\0', sizeof(finalcount));
-+	c = 0200;
-+	ul_SHA1Update(context, &c, 1);
-+	while ((context->count[0] & 504) != 448) {
-+		c = 0000;
-+		ul_SHA1Update(context, &c, 1);
-+	}
-+	ul_SHA1Update(context, finalcount, 8);	/* Should cause a SHA1Transform() */
-+	for (i = 0; i < 20; i++) {
-+		digest[i] = (unsigned char)
-+		    ((context->state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255);
-+	}
-+	/* Wipe variables */
-+	memset(context, '\0', sizeof(*context));
-+	memset(&finalcount, '\0', sizeof(finalcount));
- }
- 
--void ul_SHA1(
--    char *hash_out,
--    const char *str,
--    unsigned len)
-+void ul_SHA1(char *hash_out, const char *str, unsigned len)
- {
--    UL_SHA1_CTX ctx;
--    unsigned int ii;
-+	UL_SHA1_CTX ctx;
-+	unsigned int ii;
- 
--    ul_SHA1Init(&ctx);
--    for (ii=0; ii<len; ii+=1)
--        ul_SHA1Update(&ctx, (const unsigned char*)str + ii, 1);
--    ul_SHA1Final((unsigned char *)hash_out, &ctx);
--    hash_out[20] = '\0';
-+	ul_SHA1Init(&ctx);
-+	for (ii = 0; ii < len; ii += 1)
-+		ul_SHA1Update(&ctx, (const unsigned char *)str + ii, 1);
-+	ul_SHA1Final((unsigned char *)hash_out, &ctx);
-+	hash_out[20] = '\0';
- }
--