Accepting request 627729 from home:sbrabec:branches:util-linux-python3

- Update to version 2.32.1...
- Switch python-libmount to python3-libmount.

OBS-URL: https://build.opensuse.org/request/show/627729
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=378
This commit is contained in:
Stanislav Brabec 2018-08-07 23:53:11 +00:00 committed by Git OBS Bridge
parent 2bf68516b3
commit 7bfb1c344a
23 changed files with 173 additions and 2307 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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-----

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1a51b16fa9cd51d26ef9ab52d2f1de12403b810fc8252bf7d478df91b3cddf11
size 4510096

View File

@ -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-----

3
util-linux-2.32.1.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:86e6707a379c7ff5489c218cfaf1e3464b0b95acf7817db0bc5f179e356a67b2
size 4561088

View File

@ -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

View File

@ -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

View File

@ -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" "]"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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';
}
-