diff --git a/SOURCES/0029-lscpu-use-the-first-VM-from-proc-sysinfo.patch b/SOURCES/0029-lscpu-use-the-first-VM-from-proc-sysinfo.patch
new file mode 100644
index 0000000..9552768
--- /dev/null
+++ b/SOURCES/0029-lscpu-use-the-first-VM-from-proc-sysinfo.patch
@@ -0,0 +1,28 @@
+From 6f16035b81cd7feca02d6df8eff1bb954ed7e58d Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Tue, 4 Sep 2018 14:30:37 +0200
+Subject: [PATCH 29/32] lscpu: use the first VM from /proc/sysinfo
+
+Addresses: https://github.com/karelzak/util-linux/issues/685
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1739443
+Upstream: http://github.com/karelzak/util-linux/commit/350f5c8df2cb6edbfb5bae95f00a9fff446d236c
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ sys-utils/lscpu.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
+index fd6d63bbf..1aa7bff4d 100644
+--- a/sys-utils/lscpu.c
++++ b/sys-utils/lscpu.c
+@@ -866,6 +866,7 @@ read_hypervisor(struct lscpu_desc *desc, struct lscpu_modifier *mod)
+ 				*(str--) = '\0';
+ 			while ((str = strstr(desc->hypervisor, "  ")))
+ 				memmove(str, str + 1, strlen(str));
++			break;
+ 		}
+ 		fclose(fd);
+ 	}
+-- 
+2.21.0
+
diff --git a/SOURCES/0030-tests-lscpu-s390-nested-virtualization.patch b/SOURCES/0030-tests-lscpu-s390-nested-virtualization.patch
new file mode 100644
index 0000000..fa71cbc
--- /dev/null
+++ b/SOURCES/0030-tests-lscpu-s390-nested-virtualization.patch
@@ -0,0 +1,206 @@
+From e10bdfc6cd623f02740cf2bcfd9867c56534c5e5 Mon Sep 17 00:00:00 2001
+From: Radka Skvarilova <rskvaril@redhat.com>
+Date: Sun, 22 Sep 2019 13:49:45 +0200
+Subject: [PATCH 30/32] tests: lscpu s390 nested virtualization
+
+Signed-off-by: Radka Skvarilova <rskvaril@redhat.com>
+Addresses:https://bugzilla.redhat.com/show_bug.cgi?id=1739443
+Upstream: http://github.com/karelzak/util-linux/commit/2062164894fffa314ecb7ac99dc6c98062484389
+---
+ tests/expected/lscpu/lscpu-s390-nested-virt  |  45 +++++++++++++++++++
+ tests/ts/lscpu/dumps/s390-nested-virt.tar.gz | Bin 0 -> 7199 bytes
+ 2 files changed, 45 insertions(+)
+ create mode 100644 tests/expected/lscpu/lscpu-s390-nested-virt
+ create mode 100644 tests/ts/lscpu/dumps/s390-nested-virt.tar.gz
+
+diff --git a/tests/expected/lscpu/lscpu-s390-nested-virt b/tests/expected/lscpu/lscpu-s390-nested-virt
+new file mode 100644
+index 000000000..2665fd8dc
+--- /dev/null
++++ b/tests/expected/lscpu/lscpu-s390-nested-virt
+@@ -0,0 +1,45 @@
++CPU op-mode(s):                  32-bit, 64-bit
++CPU(s):                          2
++On-line CPU(s) list:             0,1
++Thread(s) per core:              1
++Core(s) per socket:              1
++Socket(s) per book:              1
++Book(s) per drawer:              1
++Drawer(s):                       2
++NUMA node(s):                    1
++Vendor ID:                       IBM/S390
++Machine type:                    2964
++CPU dynamic MHz:                 5000
++CPU static MHz:                  5000
++BogoMIPS:                        3033.00
++Hypervisor:                      KVM/Linux
++Hypervisor vendor:               KVM
++Virtualization type:             full
++Dispatching mode:                horizontal
++L1d cache:                       256 KiB
++L1i cache:                       192 KiB
++L2d cache:                       4 MiB
++L2i cache:                       4 MiB
++L3 cache:                        64 MiB
++L4 cache:                        480 MiB
++NUMA node0 CPU(s):               0,1
++Vulnerability L1tf:              Not affected
++Vulnerability Meltdown:          Not affected
++Vulnerability Spec store bypass: Not affected
++Vulnerability Spectre v1:        Mitigation; __user pointer sanitization
++Vulnerability Spectre v2:        Mitigation; execute trampolines
++Flags:                           esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te vx
++
++# The following is the parsable format, which can be fed to other
++# programs. Each different item in every column has an unique ID
++# starting from zero.
++# CPU,Core,Socket,Node,,L1d,L1i,L2d,L2i
++0,0,0,0,,0,0,0,0
++1,1,1,0,,1,1,1,1
++
++# The following is the parsable format, which can be fed to other
++# programs. Each different item in every column has an unique ID
++# starting from zero.
++# CPU,Core,Socket,Node,,L1d,L1i,L2d,L2i
++0,0,0,0,,0,0,0,0
++1,1,1,0,,1,1,1,1
+diff --git a/tests/ts/lscpu/dumps/s390-nested-virt.tar.gz b/tests/ts/lscpu/dumps/s390-nested-virt.tar.gz
+new file mode 100644
+index 0000000000000000000000000000000000000000..7992699925395ed8d33b1e1466b74fc1aa235268
+GIT binary patch
+literal 7199
+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
+L#Syu9MY;b1+Xr6l
+
+literal 0
+HcmV?d00001
+
+-- 
+2.21.0
+
diff --git a/SOURCES/0031-chfn-don-t-append-extra-tailing-commas.patch b/SOURCES/0031-chfn-don-t-append-extra-tailing-commas.patch
new file mode 100644
index 0000000..256b95f
--- /dev/null
+++ b/SOURCES/0031-chfn-don-t-append-extra-tailing-commas.patch
@@ -0,0 +1,43 @@
+From 90d4faece26c328c40336a0e02b875515c503e30 Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Mon, 19 Aug 2019 14:03:07 +0200
+Subject: [PATCH 31/32] chfn: don't append extra tailing commas
+
+ # grep kzak /etc/passwd
+ kzak:x:1000:1000::/home/kzak:/bin/bash
+
+ # chfn kzak
+ ...
+ grep kzak /etc/passwd
+
+old version:
+ kzak:x:1000:1000:Karel Zak,,,,:/home/kzak:/bin/bash
+
+fixed version:
+ kzak:x:1000:1000:Karel Zak:/home/kzak:/bin/bash
+
+Reported-by: Filip Dvorak <fdvorak@redhat.com>
+References: f723cbf544a7eac2927634f2cb6d802437a2d519
+Upstream: http://github.com/karelzak/util-linux/commit/9210c0d225fd808da451d86055bf243a8b47a525
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1743555
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ login-utils/chfn.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/login-utils/chfn.c b/login-utils/chfn.c
+index c5312fa0c..4f32604c5 100644
+--- a/login-utils/chfn.c
++++ b/login-utils/chfn.c
+@@ -377,7 +377,7 @@ static int save_new_data(struct chfn_control *ctl)
+ 			ctl->newf.other);
+ 
+ 	/* remove trailing empty fields (but not subfields of ctl->newf.other) */
+-	if (!ctl->newf.other) {
++	if (!ctl->newf.other || !*ctl->newf.other) {
+ 		while (len > 0 && gecos[len - 1] == ',')
+ 			len--;
+ 		gecos[len] = 0;
+-- 
+2.21.0
+
diff --git a/SOURCES/0032-tests-add-new-test-for-chfn-gecos.patch b/SOURCES/0032-tests-add-new-test-for-chfn-gecos.patch
new file mode 100644
index 0000000..646efc0
--- /dev/null
+++ b/SOURCES/0032-tests-add-new-test-for-chfn-gecos.patch
@@ -0,0 +1,83 @@
+From 447b7d7222bf8cb3591d611aa51917bd4453f8d6 Mon Sep 17 00:00:00 2001
+From: Radka Skvarilova <rskvaril@redhat.com>
+Date: Mon, 16 Dec 2019 10:57:32 +0100
+Subject: [PATCH 32/32] tests: add new test for chfn gecos
+
+Addresses: http://bugzilla.redhat.com/show_bug.cgi?id=1743555
+Upstream: http://github.com/karelzak/util-linux/commit/02238bff663ce5fe823980d8119f3871cc348764
+Upstream: http://github.com/karelzak/util-linux/commit/b2ef43864f24b1a9c0c67fe2a7177a5110da1b6e
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ tests/commands.sh         |  1 +
+ tests/expected/chfn/gecos |  6 ++++++
+ tests/ts/chfn/gecos       | 36 ++++++++++++++++++++++++++++++++++++
+ 3 files changed, 43 insertions(+)
+ create mode 100644 tests/expected/chfn/gecos
+ create mode 100755 tests/ts/chfn/gecos
+
+diff --git a/tests/commands.sh b/tests/commands.sh
+index 93100caf6..b56381c9e 100644
+--- a/tests/commands.sh
++++ b/tests/commands.sh
+@@ -104,3 +104,4 @@ TS_CMD_UUIDPARSE=${TS_CMD_UUIDPARSE-"${ts_commandsdir}uuidparse"}
+ TS_CMD_WHEREIS=${TS_CMD_WHEREIS-"${ts_commandsdir}whereis"}
+ TS_CMD_WIPEFS=${TS_CMD_WIPEFS-"${ts_commandsdir}wipefs"}
+ TS_CMD_CHRT=${TS_CMD_CHRT-"${ts_commandsdir}chrt"}
++TS_CMD_CHFN=${TS_CMD_CHFN-"${ts_commandsdir}chfn"}
+diff --git a/tests/expected/chfn/gecos b/tests/expected/chfn/gecos
+new file mode 100644
+index 000000000..af7b81b6c
+--- /dev/null
++++ b/tests/expected/chfn/gecos
+@@ -0,0 +1,6 @@
++Initialize user
++testuser_chfn_test:x:9899:9899::/home/testuser_chfn_test:/bin/bash
++Changing finger information for testuser_chfn_test.
++
++Finger information changed.
++testuser_chfn_test:x:9899:9899:test_gecos:/home/testuser_chfn_test:/bin/bash
+diff --git a/tests/ts/chfn/gecos b/tests/ts/chfn/gecos
+new file mode 100755
+index 000000000..aad27d40a
+--- /dev/null
++++ b/tests/ts/chfn/gecos
+@@ -0,0 +1,36 @@
++#!/bin/bash
++
++#
++# Copyright (C) 2019 Radka Skvarilova <rskvaril@redhat.com>
++#
++# This file is part of util-linux.
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This file is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++
++TS_TOPDIR="${0%/*}/../.."
++TS_DESC="gecos"
++
++. $TS_TOPDIR/functions.sh
++ts_init "$*"
++
++ts_skip_nonroot
++ts_check_test_command "$TS_CMD_CHFN"
++ts_check_prog "useradd"
++ts_check_prog "userdel"
++
++ts_log "Initialize user"
++useradd -u 9899 --shell /bin/bash testuser_chfn_test
++grep testuser /etc/passwd >> $TS_OUTPUT
++$TS_CMD_CHFN -f test_gecos testuser_chfn_test >>$TS_OUTPUT
++grep testuser /etc/passwd >> $TS_OUTPUT
++userdel --remove testuser_chfn_test &> /dev/null
++ts_finalize
+-- 
+2.21.0
+
diff --git a/SOURCES/0033-tests-update-lscpu-test-for-RHEL8.patch b/SOURCES/0033-tests-update-lscpu-test-for-RHEL8.patch
new file mode 100644
index 0000000..8ba4702
--- /dev/null
+++ b/SOURCES/0033-tests-update-lscpu-test-for-RHEL8.patch
@@ -0,0 +1,83 @@
+From b30f84e240bd60a23508797e33a4777cbaa50949 Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Tue, 17 Dec 2019 10:53:47 +0100
+Subject: [PATCH] tests: update lscpu test for RHEL8
+
+The test is originally from upstream (~v2.35), but RHEL-8 uses older
+version with a little different output -- RHEL-8 has no vulnerability
+fields and it counts cache sizes  in different way.
+
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1739443
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ tests/expected/lscpu/lscpu-s390-nested-virt | 57 ++++++++++-----------
+ 1 file changed, 26 insertions(+), 31 deletions(-)
+
+diff --git a/tests/expected/lscpu/lscpu-s390-nested-virt b/tests/expected/lscpu/lscpu-s390-nested-virt
+index 2665fd8dc..a6ab04f0b 100644
+--- a/tests/expected/lscpu/lscpu-s390-nested-virt
++++ b/tests/expected/lscpu/lscpu-s390-nested-virt
+@@ -1,34 +1,29 @@
+-CPU op-mode(s):                  32-bit, 64-bit
+-CPU(s):                          2
+-On-line CPU(s) list:             0,1
+-Thread(s) per core:              1
+-Core(s) per socket:              1
+-Socket(s) per book:              1
+-Book(s) per drawer:              1
+-Drawer(s):                       2
+-NUMA node(s):                    1
+-Vendor ID:                       IBM/S390
+-Machine type:                    2964
+-CPU dynamic MHz:                 5000
+-CPU static MHz:                  5000
+-BogoMIPS:                        3033.00
+-Hypervisor:                      KVM/Linux
+-Hypervisor vendor:               KVM
+-Virtualization type:             full
+-Dispatching mode:                horizontal
+-L1d cache:                       256 KiB
+-L1i cache:                       192 KiB
+-L2d cache:                       4 MiB
+-L2i cache:                       4 MiB
+-L3 cache:                        64 MiB
+-L4 cache:                        480 MiB
+-NUMA node0 CPU(s):               0,1
+-Vulnerability L1tf:              Not affected
+-Vulnerability Meltdown:          Not affected
+-Vulnerability Spec store bypass: Not affected
+-Vulnerability Spectre v1:        Mitigation; __user pointer sanitization
+-Vulnerability Spectre v2:        Mitigation; execute trampolines
+-Flags:                           esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te vx
++CPU op-mode(s):      32-bit, 64-bit
++CPU(s):              2
++On-line CPU(s) list: 0,1
++Thread(s) per core:  1
++Core(s) per socket:  1
++Socket(s) per book:  1
++Book(s) per drawer:  1
++Drawer(s):           2
++NUMA node(s):        1
++Vendor ID:           IBM/S390
++Machine type:        2964
++CPU dynamic MHz:     5000
++CPU static MHz:      5000
++BogoMIPS:            3033.00
++Hypervisor:          KVM/Linux
++Hypervisor vendor:   KVM
++Virtualization type: full
++Dispatching mode:    horizontal
++L1d cache:           128K
++L1i cache:           96K
++L2d cache:           2048K
++L2i cache:           2048K
++L3 cache:            65536K
++L4 cache:            491520K
++NUMA node0 CPU(s):   0,1
++Flags:               esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te vx
+ 
+ # The following is the parsable format, which can be fed to other
+ # programs. Each different item in every column has an unique ID
+-- 
+2.21.0
+
diff --git a/SOURCES/0034-tests-fdisk-make-sure-we-use-the-same-sizes-for-MD-d.patch b/SOURCES/0034-tests-fdisk-make-sure-we-use-the-same-sizes-for-MD-d.patch
new file mode 100644
index 0000000..99cdd50
--- /dev/null
+++ b/SOURCES/0034-tests-fdisk-make-sure-we-use-the-same-sizes-for-MD-d.patch
@@ -0,0 +1,91 @@
+From 60f97394878d8b540ee6a4fb9c9edaae2f90d0d0 Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Tue, 17 Dec 2019 18:10:31 +0100
+Subject: [PATCH] tests: (fdisk) make sure we use the same sizes for MD devices
+
+It seems on some kernels MD can return error if the devices in RAID
+have different size
+
+ # mdadm -q --create /dev/md8 --chunk=64 --level=0 --raid-devices=2 /dev/sda1 /dev/sda2
+ mdadm: RUN_ARRAY failed: Unknown error 524
+
+ # dmesg
+ ...
+ [ 1485.148435] md/raid0:md8: cannot assemble multi-zone RAID0 with default_layout setting
+ [ 1485.152306] md/raid0: please set raid.default_layout to 1 or 2
+ [ 1485.154050] md: pers->run() failed ...
+ [ 1485.154104] md: md8 stopped.
+
+Reference: https://bugzilla.redhat.com/show_bug.cgi?id=1784534
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ tests/expected/fdisk/align-512-4K-md | 12 ++++++------
+ tests/ts/fdisk/align-512-4K-md       |  4 ++--
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/tests/expected/fdisk/align-512-4K-md b/tests/expected/fdisk/align-512-4K-md
+index caca03154..3690c04c2 100644
+--- a/tests/expected/fdisk/align-512-4K-md
++++ b/tests/expected/fdisk/align-512-4K-md
+@@ -16,7 +16,7 @@ Created a new <removed>.
+ Command (m for help): Partition type
+    p   primary (1 primary, 0 extended, 3 free)
+    e   extended (container for logical partitions)
+-Select (default p): Partition number (2-4, default 2): First sector (43008-102399, default 43008): Last sector, +sectors or +size{K,M,G,T,P} (43008-102399, default 102399): 
++Select (default p): Partition number (2-4, default 2): First sector (51199-102399, default 51200): Last sector, +sectors or +size{K,M,G,T,P} (51200-102399, default 102399): 
+ Created a new <removed>.
+ 
+ Command (m for help): Disk <removed>: 50 MiB, 52428800 bytes, 102400 sectors
+@@ -27,8 +27,8 @@ Disklabel type: dos
+ Disk identifier: <removed>
+ 
+ Device     Boot Start    End Sectors Size Id Type
+-<removed>1        2048  43007   40960  20M 83 Linux
+-<removed>2       43008 102399   59392  29M 83 Linux
++<removed>1        2048  51198   49151  24M 83 Linux
++<removed>2       51200 100350   49151  24M 83 Linux
+ 
+ Command (m for help): The partition table has been altered.
+ Calling ioctl() to re-read partition table.
+@@ -49,16 +49,16 @@ Created a new <removed>.
+ Command (m for help): Partition type
+    p   primary (0 primary, 0 extended, 4 free)
+    e   extended (container for logical partitions)
+-Select (default p): Partition number (1-4, default 1): First sector (2048-100095, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-100095, default 100095): 
++Select (default p): Partition number (1-4, default 1): First sector (2048-97791, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-97791, default 97791): 
+ Created a new <removed>.
+ 
+ Command (m for help): Partition type
+    p   primary (1 primary, 0 extended, 3 free)
+    e   extended (container for logical partitions)
+-Select (default p): Partition number (2-4, default 2): First sector (22528-100095, default 22528): Last sector, +sectors or +size{K,M,G,T,P} (22528-100095, default 100095): 
++Select (default p): Partition number (2-4, default 2): First sector (22528-97791, default 22528): Last sector, +sectors or +size{K,M,G,T,P} (22528-97791, default 97791): 
+ Created a new <removed>.
+ 
+-Command (m for help): Disk <removed>: 48.9 MiB, 51249152 bytes, 100096 sectors
++Command (m for help): Disk <removed>: 47.8 MiB, 50069504 bytes, 97792 sectors
+ Units: sectors of 1 * 512 = 512 bytes
+ Sector size (logical/physical): 512 bytes / 4096 bytes
+ I/O size (minimum/optimal): 65536 bytes / <removed> bytes
+diff --git a/tests/ts/fdisk/align-512-4K-md b/tests/ts/fdisk/align-512-4K-md
+index 7f60a654f..68aaff0b7 100755
+--- a/tests/ts/fdisk/align-512-4K-md
++++ b/tests/ts/fdisk/align-512-4K-md
+@@ -41,12 +41,12 @@ n
+ p
+ 1
+ 
+-+20M
+++49150
+ n
+ p
+ 2
+ 
+-
+++49150
+ p
+ w
+ q
+-- 
+2.21.0
+
diff --git a/SOURCES/0035-tests-mark-MD-tests-with-metadata-v0.90-as-KNOWN-FAI.patch b/SOURCES/0035-tests-mark-MD-tests-with-metadata-v0.90-as-KNOWN-FAI.patch
new file mode 100644
index 0000000..8759594
--- /dev/null
+++ b/SOURCES/0035-tests-mark-MD-tests-with-metadata-v0.90-as-KNOWN-FAI.patch
@@ -0,0 +1,80 @@
+From 3fd5c8e78a9758a6fc9310485d2428e300ad3b63 Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Thu, 11 Jun 2020 10:55:25 +0200
+Subject: [PATCH 35/40] tests: mark MD tests with metadata v0.90 as KNOWN-FAIL
+
+metadata v0.90 is deprecated thing and unsupported to create by some new
+mdadm versions. It's possible to assemble this array (with
+default_layout=1 on modprobe raid0), but impossible to create a new
+one.
+
+Upstream: http://github.com/karelzak/util-linux/commit/4ae96cf77b36660255d5870a4209480bbec47902
+Upstream: http://github.com/karelzak/util-linux/commit/7519c3edab120b14623931d5ddb16fdc6e7cad5d
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1826251
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ tests/ts/blkid/md-raid0-whole  | 3 +++
+ tests/ts/blkid/md-raid1-part   | 3 +++
+ tests/ts/blkid/md-raid1-whole  | 3 +++
+ tests/ts/fdisk/align-512-4K-md | 3 +++
+ 4 files changed, 12 insertions(+)
+
+diff --git a/tests/ts/blkid/md-raid0-whole b/tests/ts/blkid/md-raid0-whole
+index 45c6ee55b..1f3fc2634 100755
+--- a/tests/ts/blkid/md-raid0-whole
++++ b/tests/ts/blkid/md-raid0-whole
+@@ -29,6 +29,9 @@ ts_skip_nonroot
+ ts_check_losetup
+ ts_check_prog "mdadm"
+ 
++# rhbz#182625: It can't create new raid0 with metadata 0.90 from mdadm-4.1-12.
++TS_KNOWN_FAIL="yes"                                         
++
+ ts_log "Initialize devices"
+ IMGNAME="${TS_OUTDIR}/${TS_TESTNAME}"
+ 
+diff --git a/tests/ts/blkid/md-raid1-part b/tests/ts/blkid/md-raid1-part
+index 3fa6395b0..3d42aadb8 100755
+--- a/tests/ts/blkid/md-raid1-part
++++ b/tests/ts/blkid/md-raid1-part
+@@ -28,6 +28,9 @@ ts_check_test_command "$TS_CMD_BLKID"
+ ts_skip_nonroot
+ ts_check_prog "mdadm"
+ 
++# rhbz#182625: It can't create new raid0 with metadata 0.90 from mdadm-4.1-12.
++TS_KNOWN_FAIL="yes"                                         
++
+ # set global variable TS_DEVICE
+ ts_scsi_debug_init dev_size_mb=51 sector_size=512
+ 
+diff --git a/tests/ts/blkid/md-raid1-whole b/tests/ts/blkid/md-raid1-whole
+index ddf4a6934..6eba9cc8e 100755
+--- a/tests/ts/blkid/md-raid1-whole
++++ b/tests/ts/blkid/md-raid1-whole
+@@ -29,6 +29,9 @@ ts_skip_nonroot
+ ts_check_losetup
+ ts_check_prog "mdadm"
+ 
++# rhbz#182625: It can't create new raid0 with metadata 0.90 from mdadm-4.1-12.
++TS_KNOWN_FAIL="yes"
++
+ ts_log "Initialize devices"
+ IMGNAME="${TS_OUTDIR}/${TS_TESTNAME}"
+ 
+diff --git a/tests/ts/fdisk/align-512-4K-md b/tests/ts/fdisk/align-512-4K-md
+index 68aaff0b7..0a8e09bc1 100755
+--- a/tests/ts/fdisk/align-512-4K-md
++++ b/tests/ts/fdisk/align-512-4K-md
+@@ -31,6 +31,9 @@ ts_check_test_command "$TS_CMD_FDISK"
+ ts_skip_nonroot
+ ts_check_prog "mdadm"
+ 
++# rhbz#182625: It can't create new raid0 with metadata 0.90 from mdadm-4.1-12.
++TS_KNOWN_FAIL="yes"
++
+ # set global variable TS_DEVICE
+ ts_scsi_debug_init dev_size_mb=50 sector_size=512 physblk_exp=3
+ DEVNAME=$(basename $TS_DEVICE)
+-- 
+2.25.4
+
diff --git a/SOURCES/0036-libblkid-add-BitLocker-detection.patch b/SOURCES/0036-libblkid-add-BitLocker-detection.patch
new file mode 100644
index 0000000..993bf9d
--- /dev/null
+++ b/SOURCES/0036-libblkid-add-BitLocker-detection.patch
@@ -0,0 +1,284 @@
+From ae7b79ff8a7fb576c018bc9a7eaf9e135b7b553e Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Tue, 24 Apr 2018 10:57:48 +0200
+Subject: [PATCH 36/40] libblkid: add BitLocker detection
+
+Supported:
+* WinVista version
+* Win7 and later versions (based on NTFS)
+* BitLockerToGo (for removable media; based on FAT32)
+
+Unfortunately, it's without LABEL and UUID. It seems BitLocker does
+not use volume_label and volume_serial stuff from NTFS header.
+
+Upstream: http://github.com/karelzak/util-linux/commit/136f89ce5ed8cd159a1c56b5a775dada2363ecd3
+Upstream: http://github.com/karelzak/util-linux/commit/47afae0caaa2b3440d6ac812079e3ada5f2aa0bd (bitlocker.c part)
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1812576
+Addresses: https://github.com/karelzak/util-linux/issues/617
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ libblkid/src/Makemodule.am             |   1 +
+ libblkid/src/superblocks/bitlocker.c   | 191 +++++++++++++++++++++++++
+ libblkid/src/superblocks/superblocks.c |   1 +
+ libblkid/src/superblocks/superblocks.h |   3 +
+ libblkid/src/superblocks/vfat.c        |   3 +
+ 5 files changed, 199 insertions(+)
+ create mode 100644 libblkid/src/superblocks/bitlocker.c
+
+diff --git a/libblkid/src/Makemodule.am b/libblkid/src/Makemodule.am
+index 0e1c765fb..ea0230702 100644
+--- a/libblkid/src/Makemodule.am
++++ b/libblkid/src/Makemodule.am
+@@ -47,6 +47,7 @@ libblkid_la_SOURCES = \
+ 	libblkid/src/superblocks/bcache.c \
+ 	libblkid/src/superblocks/befs.c \
+ 	libblkid/src/superblocks/bfs.c \
++	libblkid/src/superblocks/bitlocker.c \
+ 	libblkid/src/superblocks/btrfs.c \
+ 	libblkid/src/superblocks/cramfs.c \
+ 	libblkid/src/superblocks/ddf_raid.c \
+diff --git a/libblkid/src/superblocks/bitlocker.c b/libblkid/src/superblocks/bitlocker.c
+new file mode 100644
+index 000000000..111edf39b
+--- /dev/null
++++ b/libblkid/src/superblocks/bitlocker.c
+@@ -0,0 +1,191 @@
++/*
++ * Copyright (C) 2018 Karel Zak <kzak@redhat.com>
++ *
++ * This file may be redistributed under the terms of the
++ * GNU Lesser General Public License.
++ */
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <string.h>
++#include <errno.h>
++#include <ctype.h>
++#include <stdint.h>
++
++#include "superblocks.h"
++
++#define BDE_HDR_SIZE	512
++#define BDE_HDR_OFFSET	0
++
++struct bde_header_win7 {
++/*   0 */ unsigned char	boot_entry_point[3];
++/*   3 */ unsigned char	fs_signature[8];
++/*  11 */ unsigned char	__dummy1[67 - 11];
++/*  67 */ uint32_t      volume_serial;		/* NTFS uses 64bit serial number */
++/*  71 */ unsigned char volume_label[11];	/* "NO NAME\x20\x20\x20\x20" only */
++/*  82 */ unsigned char __dummy2[160 - 82];
++/* 160 */ unsigned char guid[16];		/* BitLocker specific GUID */
++/* 176 */ uint64_t      fve_metadata_offset;
++} __attribute__((packed));
++
++
++struct bde_header_togo {
++/*   0 */ unsigned char	boot_entry_point[3];
++/*   3 */ unsigned char	fs_signature[8];
++/*  11 */ unsigned char	__dummy[424 - 11];
++/* 424 */ unsigned char guid[16];
++/* 440 */ uint64_t      fve_metadata_offset;
++} __attribute__((packed));
++
++
++struct bde_fve_metadata {
++/*   0 */ unsigned char  signature[8];
++/*   8 */ uint16_t       size;
++/*  10 */ uint16_t       version;
++};
++
++enum {
++	BDE_VERSION_VISTA = 0,
++	BDE_VERSION_WIN7,
++	BDE_VERSION_TOGO
++};
++
++#define BDE_MAGIC_VISTA		"\xeb\x52\x90-FVE-FS-"
++#define BDE_MAGIC_WIN7		"\xeb\x58\x90-FVE-FS-"
++#define BDE_MAGIC_TOGO		"\xeb\x58\x90MSWIN4.1"
++
++#define BDE_MAGIC_FVE		"-FVE-FS-"
++
++static int get_bitlocker_type(const unsigned char *buf)
++{
++	size_t i;
++	static const char *map[] = {
++		[BDE_VERSION_VISTA] = BDE_MAGIC_VISTA,
++		[BDE_VERSION_WIN7]  = BDE_MAGIC_WIN7,
++		[BDE_VERSION_TOGO]  = BDE_MAGIC_TOGO
++	};
++
++	for (i = 0; i < ARRAY_SIZE(map); i++) {
++		if (memcmp(buf, map[i], 11) == 0)
++			return (int) i;
++	}
++
++	return -1;
++}
++
++/* Returns: < 0 error, 1 nothing, 0 success
++ */
++static int get_bitlocker_headers(blkid_probe pr,
++				int *type,
++				const unsigned char **buf_hdr,
++				const unsigned char **buf_fve)
++{
++
++	const unsigned char *buf;
++	const struct bde_fve_metadata *fve;
++	uint64_t off = 0;
++	int kind;
++
++	if (buf_hdr)
++		*buf_hdr = NULL;
++	if (buf_fve)
++		*buf_fve = NULL;
++	if (type)
++		*type = -1;
++
++	buf = blkid_probe_get_buffer(pr, BDE_HDR_OFFSET, BDE_HDR_SIZE);
++	if (!buf)
++		return errno ? -errno : 1;
++
++	kind = get_bitlocker_type(buf);
++
++	/* Check BitLocker header */
++	switch (kind) {
++	case BDE_VERSION_WIN7:
++		off = le64_to_cpu(((const struct bde_header_win7 *) buf)->fve_metadata_offset);
++		break;
++	case BDE_VERSION_TOGO:
++		off = le64_to_cpu(((const struct bde_header_togo *) buf)->fve_metadata_offset);
++		break;
++	case BDE_VERSION_VISTA:
++		goto done;
++	default:
++		goto nothing;
++	}
++
++	if (!off)
++		goto nothing;
++	if (buf_hdr)
++		*buf_hdr = buf;
++
++	/* Check Bitlocker FVE metadata header */
++	buf = blkid_probe_get_buffer(pr, off, sizeof(struct bde_fve_metadata));
++	if (!buf)
++		return errno ? -errno : 1;
++
++	fve = (const struct bde_fve_metadata *) buf;
++	if (memcmp(fve->signature, BDE_MAGIC_FVE, sizeof(fve->signature)) != 0)
++		goto nothing;
++	if (buf_fve)
++		*buf_fve = buf;
++done:
++	if (type)
++		*type = kind;
++	return 0;
++nothing:
++	return 1;
++}
++
++/*
++ * This is used by vFAT and NTFS prober to avoid collisions with bitlocker.
++ */
++int blkid_probe_is_bitlocker(blkid_probe pr)
++{
++	return get_bitlocker_headers(pr, NULL, NULL, NULL) == 0;
++}
++
++static int probe_bitlocker(blkid_probe pr,
++		const struct blkid_idmag *mag __attribute__((__unused__)))
++{
++	const unsigned char *buf_fve = NULL;
++	const unsigned char *buf_hdr = NULL;
++	int rc, kind;
++
++	rc = get_bitlocker_headers(pr, &kind, &buf_hdr, &buf_fve);
++	if (rc)
++		return rc;
++
++	if (kind == BDE_VERSION_WIN7) {
++		const struct bde_header_win7 *hdr = (const struct bde_header_win7 *) buf_hdr;
++
++		/* Unfortunately, it seems volume_serial is always zero */
++		blkid_probe_sprintf_uuid(pr,
++				(const unsigned char *) &hdr->volume_serial,
++				sizeof(hdr->volume_serial),
++				"%016d", le32_to_cpu(hdr->volume_serial));
++	}
++
++	if (buf_fve) {
++		const struct bde_fve_metadata *fve = (const struct bde_fve_metadata *) buf_fve;
++
++		blkid_probe_sprintf_version(pr, "%d", fve->version);
++	}
++	return 0;
++}
++
++/* See header details:
++ * https://github.com/libyal/libbde/blob/master/documentation/BitLocker%20Drive%20Encryption%20(BDE)%20format.asciidoc
++ */
++const struct blkid_idinfo bitlocker_idinfo =
++{
++	.name		= "BitLocker",
++	.usage		= BLKID_USAGE_CRYPTO,
++	.probefunc	= probe_bitlocker,
++	.magics		=
++	{
++		{ .magic = BDE_MAGIC_VISTA, .len = 11 },
++		{ .magic = BDE_MAGIC_WIN7,  .len = 11 },
++		{ .magic = BDE_MAGIC_TOGO,  .len = 11 },
++		{ NULL }
++	}
++};
+diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c
+index 076541d1a..6dfd2be64 100644
+--- a/libblkid/src/superblocks/superblocks.c
++++ b/libblkid/src/superblocks/superblocks.c
+@@ -115,6 +115,7 @@ static const struct blkid_idinfo *idinfos[] =
+ 	&ubi_idinfo,
+ 	&vdo_idinfo,
+ 	&stratis_idinfo,
++	&bitlocker_idinfo,
+ 
+ 	/* Filesystems */
+ 	&vfat_idinfo,
+diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h
+index 2723fb1d5..d677f85bc 100644
+--- a/libblkid/src/superblocks/superblocks.h
++++ b/libblkid/src/superblocks/superblocks.h
+@@ -81,6 +81,7 @@ extern const struct blkid_idinfo bcache_idinfo;
+ extern const struct blkid_idinfo mpool_idinfo;
+ extern const struct blkid_idinfo vdo_idinfo;
+ extern const struct blkid_idinfo stratis_idinfo;
++extern const struct blkid_idinfo bitlocker_idinfo;
+ 
+ /*
+  * superblock functions
+@@ -105,4 +106,6 @@ extern int blkid_probe_set_id_label(blkid_probe pr, const char *name,
+ extern int blkid_probe_set_utf8_id_label(blkid_probe pr, const char *name,
+ 			     unsigned char *data, size_t len, int enc);
+ 
++extern int blkid_probe_is_bitlocker(blkid_probe pr);
++
+ #endif /* _BLKID_SUPERBLOCKS_H */
+diff --git a/libblkid/src/superblocks/vfat.c b/libblkid/src/superblocks/vfat.c
+index 3aeba018a..29b3c501c 100644
+--- a/libblkid/src/superblocks/vfat.c
++++ b/libblkid/src/superblocks/vfat.c
+@@ -268,6 +268,9 @@ static int fat_valid_superblock(blkid_probe pr,
+ 		}
+ 	}
+ 
++	if (blkid_probe_is_bitlocker(pr))
++		return 0;
++
+ 	return 1;	/* valid */
+ }
+ 
+-- 
+2.25.4
+
diff --git a/SOURCES/0037-blkid-retport-block-size-of-a-filesystem.patch b/SOURCES/0037-blkid-retport-block-size-of-a-filesystem.patch
new file mode 100644
index 0000000..2795684
--- /dev/null
+++ b/SOURCES/0037-blkid-retport-block-size-of-a-filesystem.patch
@@ -0,0 +1,1121 @@
+From 9e9355c71c031f4d7445c30cb39bd6b33c10ff9d Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka@redhat.com>
+Date: Mon, 2 Sep 2019 12:28:39 +0200
+Subject: [PATCH 37/40] blkid: retport block size of a filesystem
+
+This patch extends libblkid, so that it reports filesystem block size.
+
+When blkid returns a specific number in the BLOCK_SIZE attribute, it
+guarantees that all the bios submitted by the filesystem are aligned on
+this boundary.
+
+We need this because when we want to enable dm-integrity or dm-writecache
+on an existing filesystem, we need to know filesystem block size, so that
+dm-integrity or dm-writecache is initialized with matching block size.
+
+We could always use block size 512 for dm-integrity and dm-writecache, but
+that would cause metadata overhead and performance degradation. On the
+other hand, if we used block size 4096, it would fail if the filesystem
+has smaller blocksize.
+
+[kzak@redhat.com: - move vfat BLOCK_SIZE to probing function
+		  - remove unwanted debug fprintf from ZFS prober]
+
+RHEL-8.3: add regression tests updates to teh patch too
+
+Upstream: http://github.com/karelzak/util-linux/commit/cd129b7d2fecd5f2013512936de2db1bf244aa75
+Upstream: http://github.com/karelzak/util-linux/commit/e7d318a9dd63c9fae8f07754ce12aa9af4dce089
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1817726
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ libblkid/src/superblocks/befs.c               |  3 +
+ libblkid/src/superblocks/btrfs.c              |  1 +
+ libblkid/src/superblocks/exfat.c              |  2 +
+ libblkid/src/superblocks/exfs.c               |  4 +
+ libblkid/src/superblocks/ext.c                |  3 +
+ libblkid/src/superblocks/f2fs.c               |  2 +
+ libblkid/src/superblocks/gfs.c                |  1 +
+ libblkid/src/superblocks/hfs.c                |  2 +
+ libblkid/src/superblocks/hpfs.c               |  1 +
+ libblkid/src/superblocks/iso9660.c            |  2 +
+ libblkid/src/superblocks/jfs.c                |  1 +
+ libblkid/src/superblocks/minix.c              |  5 ++
+ libblkid/src/superblocks/nilfs.c              |  3 +
+ libblkid/src/superblocks/ntfs.c               |  2 +
+ libblkid/src/superblocks/ocfs.c               |  3 +
+ libblkid/src/superblocks/reiserfs.c           | 10 ++-
+ libblkid/src/superblocks/romfs.c              |  3 +
+ libblkid/src/superblocks/squashfs.c           |  2 +
+ libblkid/src/superblocks/superblocks.c        |  7 ++
+ libblkid/src/superblocks/superblocks.h        |  2 +
+ libblkid/src/superblocks/udf.c                |  2 +
+ libblkid/src/superblocks/ufs.c                |  5 ++
+ libblkid/src/superblocks/vfat.c               |  2 +
+ libblkid/src/superblocks/vxfs.c               | 18 ++++-
+ libblkid/src/superblocks/xfs.c                |  1 +
+ libblkid/src/superblocks/zfs.c                | 74 ++++++++++++++-----
+ tests/expected/blkid/low-probe-befs           |  1 +
+ tests/expected/blkid/low-probe-exfat          |  1 +
+ tests/expected/blkid/low-probe-ext2           |  1 +
+ tests/expected/blkid/low-probe-ext3           |  1 +
+ tests/expected/blkid/low-probe-f2fs           |  1 +
+ tests/expected/blkid/low-probe-fat            |  1 +
+ tests/expected/blkid/low-probe-fat16_noheads  |  1 +
+ .../blkid/low-probe-fat32_cp850_O_tilde       |  1 +
+ .../expected/blkid/low-probe-fat32_label_64MB |  1 +
+ tests/expected/blkid/low-probe-gfs2           |  1 +
+ tests/expected/blkid/low-probe-hfsplus        |  1 +
+ tests/expected/blkid/low-probe-hpfs           |  1 +
+ tests/expected/blkid/low-probe-iso            |  1 +
+ tests/expected/blkid/low-probe-iso-joliet     |  1 +
+ tests/expected/blkid/low-probe-iso-rr-joliet  |  1 +
+ tests/expected/blkid/low-probe-jbd            |  1 +
+ tests/expected/blkid/low-probe-jfs            |  1 +
+ tests/expected/blkid/low-probe-minix-BE       |  1 +
+ tests/expected/blkid/low-probe-minix-LE       |  1 +
+ tests/expected/blkid/low-probe-nilfs2         |  1 +
+ tests/expected/blkid/low-probe-ntfs           |  1 +
+ tests/expected/blkid/low-probe-ocfs2          |  1 +
+ tests/expected/blkid/low-probe-reiser3        |  1 +
+ tests/expected/blkid/low-probe-reiser4        |  1 +
+ tests/expected/blkid/low-probe-romfs          |  1 +
+ tests/expected/blkid/low-probe-small-fat32    |  1 +
+ tests/expected/blkid/low-probe-udf            |  1 +
+ .../blkid/low-probe-udf-bdr-2.60-nero         |  1 +
+ .../blkid/low-probe-udf-cd-mkudfiso-20100208  |  1 +
+ tests/expected/blkid/low-probe-udf-cd-nero-6  |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.0.0-1   |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.0.0-2   |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.3-1     |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.3-2     |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.3-3     |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.3-4     |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.3-5     |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.3-6     |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.3-7     |  1 +
+ .../blkid/low-probe-udf-hdd-mkudffs-1.3-8     |  1 +
+ .../blkid/low-probe-udf-hdd-udfclient-0.7.5   |  1 +
+ .../blkid/low-probe-udf-hdd-udfclient-0.7.7   |  1 +
+ tests/expected/blkid/low-probe-udf-hdd-win7   |  1 +
+ tests/expected/blkid/low-probe-ufs            |  1 +
+ tests/expected/blkid/low-probe-xfs            |  1 +
+ tests/expected/blkid/low-probe-zfs            |  1 +
+ 72 files changed, 186 insertions(+), 21 deletions(-)
+
+diff --git a/libblkid/src/superblocks/befs.c b/libblkid/src/superblocks/befs.c
+index 14af97217..516d80093 100644
+--- a/libblkid/src/superblocks/befs.c
++++ b/libblkid/src/superblocks/befs.c
+@@ -519,6 +519,9 @@ static int probe_befs(blkid_probe pr, const struct blkid_idmag *mag)
+ 		blkid_probe_sprintf_uuid(pr, (unsigned char *) &volume_id,
+ 					sizeof(volume_id), "%016" PRIx64,
+ 					FS64_TO_CPU(volume_id, fs_le));
++
++	blkid_probe_set_block_size(pr, block_size);
++
+ 	return BLKID_PROBE_OK;
+ }
+ 
+diff --git a/libblkid/src/superblocks/btrfs.c b/libblkid/src/superblocks/btrfs.c
+index 7ce3dfff8..f0fde700d 100644
+--- a/libblkid/src/superblocks/btrfs.c
++++ b/libblkid/src/superblocks/btrfs.c
+@@ -74,6 +74,7 @@ static int probe_btrfs(blkid_probe pr, const struct blkid_idmag *mag)
+ 
+ 	blkid_probe_set_uuid(pr, bfs->fsid);
+ 	blkid_probe_set_uuid_as(pr, bfs->dev_item.uuid, "UUID_SUB");
++	blkid_probe_set_block_size(pr, le32_to_cpu(bfs->sectorsize));
+ 
+ 	return 0;
+ }
+diff --git a/libblkid/src/superblocks/exfat.c b/libblkid/src/superblocks/exfat.c
+index 4bf92eac8..7622320d3 100644
+--- a/libblkid/src/superblocks/exfat.c
++++ b/libblkid/src/superblocks/exfat.c
+@@ -137,6 +137,8 @@ static int probe_exfat(blkid_probe pr, const struct blkid_idmag *mag)
+ 	blkid_probe_sprintf_version(pr, "%u.%u",
+ 			sb->version.vermaj, sb->version.vermin);
+ 
++	blkid_probe_set_block_size(pr, BLOCK_SIZE(sb));
++
+ 	return BLKID_PROBE_OK;
+ }
+ 
+diff --git a/libblkid/src/superblocks/exfs.c b/libblkid/src/superblocks/exfs.c
+index f717b6530..e0eafafc6 100644
+--- a/libblkid/src/superblocks/exfs.c
++++ b/libblkid/src/superblocks/exfs.c
+@@ -170,7 +170,11 @@ static int probe_exfs(blkid_probe pr, const struct blkid_idmag *mag)
+ 	if (*xs->sb_fname != '\0')
+ 		blkid_probe_set_label(pr, (unsigned char *) xs->sb_fname,
+ 				sizeof(xs->sb_fname));
++
+ 	blkid_probe_set_uuid(pr, xs->sb_uuid);
++
++	blkid_probe_set_block_size(pr, be32_to_cpu(xs->sb_blocksize));
++
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/ext.c b/libblkid/src/superblocks/ext.c
+index caf82c171..3870522fa 100644
+--- a/libblkid/src/superblocks/ext.c
++++ b/libblkid/src/superblocks/ext.c
+@@ -187,6 +187,9 @@ static void ext_get_info(blkid_probe pr, int ver, struct ext2_super_block *es)
+ 	blkid_probe_sprintf_version(pr, "%u.%u",
+ 		le32_to_cpu(es->s_rev_level),
+ 		le16_to_cpu(es->s_minor_rev_level));
++
++	if (le32_to_cpu(es->s_log_block_size) < 32)
++		blkid_probe_set_block_size(pr, 1024U << le32_to_cpu(es->s_log_block_size));
+ }
+ 
+ 
+diff --git a/libblkid/src/superblocks/f2fs.c b/libblkid/src/superblocks/f2fs.c
+index d1bf25a3a..255ef6384 100644
+--- a/libblkid/src/superblocks/f2fs.c
++++ b/libblkid/src/superblocks/f2fs.c
+@@ -78,6 +78,8 @@ static int probe_f2fs(blkid_probe pr, const struct blkid_idmag *mag)
+ 
+ 	blkid_probe_set_uuid(pr, sb->uuid);
+ 	blkid_probe_sprintf_version(pr, "%u.%u", vermaj, vermin);
++	if (le32_to_cpu(sb->log_blocksize) < 32)
++		blkid_probe_set_block_size(pr, 1U << le32_to_cpu(sb->log_blocksize));
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/gfs.c b/libblkid/src/superblocks/gfs.c
+index ea6036cb7..e22a6a3f9 100644
+--- a/libblkid/src/superblocks/gfs.c
++++ b/libblkid/src/superblocks/gfs.c
+@@ -98,6 +98,7 @@ static int probe_gfs2(blkid_probe pr, const struct blkid_idmag *mag)
+ 				sizeof(sbd->sb_locktable));
+ 		blkid_probe_set_uuid(pr, sbd->sb_uuid);
+ 		blkid_probe_set_version(pr, "1");
++		blkid_probe_set_block_size(pr, be32_to_cpu(sbd->sb_bsize));
+ 		return 0;
+ 	}
+ 	return 1;
+diff --git a/libblkid/src/superblocks/hfs.c b/libblkid/src/superblocks/hfs.c
+index 7b0117405..185c42c92 100644
+--- a/libblkid/src/superblocks/hfs.c
++++ b/libblkid/src/superblocks/hfs.c
+@@ -241,6 +241,8 @@ static int probe_hfsplus(blkid_probe pr, const struct blkid_idmag *mag)
+ 	if (blocksize < HFSPLUS_SECTOR_SIZE)
+ 		return 1;
+ 
++	blkid_probe_set_block_size(pr, blocksize);
++
+ 	memcpy(extents, hfsplus->cat_file.extents, sizeof(extents));
+ 	cat_block = be32_to_cpu(extents[0].start_block);
+ 
+diff --git a/libblkid/src/superblocks/hpfs.c b/libblkid/src/superblocks/hpfs.c
+index 0565d370c..dcf4520b6 100644
+--- a/libblkid/src/superblocks/hpfs.c
++++ b/libblkid/src/superblocks/hpfs.c
+@@ -99,6 +99,7 @@ static int probe_hpfs(blkid_probe pr, const struct blkid_idmag *mag)
+ 				hbb->vol_serno[1], hbb->vol_serno[0]);
+ 	}
+ 	blkid_probe_sprintf_version(pr, "%u", version);
++	blkid_probe_set_block_size(pr, 512);
+ 
+ 	return 0;
+ }
+diff --git a/libblkid/src/superblocks/iso9660.c b/libblkid/src/superblocks/iso9660.c
+index 7356754ee..8dc2e5394 100644
+--- a/libblkid/src/superblocks/iso9660.c
++++ b/libblkid/src/superblocks/iso9660.c
+@@ -182,6 +182,8 @@ static int probe_iso9660(blkid_probe pr, const struct blkid_idmag *mag)
+ 
+ 	memcpy(label, iso->volume_id, sizeof(label));
+ 
++	blkid_probe_set_block_size(pr, 2048);
++
+ 	if (!is_str_empty(iso->system_id, sizeof(iso->system_id)))
+ 		blkid_probe_set_id_label(pr, "SYSTEM_ID",
+ 				iso->system_id, sizeof(iso->system_id));
+diff --git a/libblkid/src/superblocks/jfs.c b/libblkid/src/superblocks/jfs.c
+index 0f956ef00..3de8c2e3d 100644
+--- a/libblkid/src/superblocks/jfs.c
++++ b/libblkid/src/superblocks/jfs.c
+@@ -52,6 +52,7 @@ static int probe_jfs(blkid_probe pr, const struct blkid_idmag *mag)
+ 	if (*((char *) js->js_label) != '\0')
+ 		blkid_probe_set_label(pr, js->js_label, sizeof(js->js_label));
+ 	blkid_probe_set_uuid(pr, js->js_uuid);
++	blkid_probe_set_block_size(pr, le32_to_cpu(js->js_bsize));
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/minix.c b/libblkid/src/superblocks/minix.c
+index c47378d73..674a1f17b 100644
+--- a/libblkid/src/superblocks/minix.c
++++ b/libblkid/src/superblocks/minix.c
+@@ -80,6 +80,7 @@ static int probe_minix(blkid_probe pr,
+ 	unsigned long zones, ninodes, imaps, zmaps;
+ 	off_t firstz;
+ 	size_t zone_size;
++	unsigned block_size;
+ 
+ 	data = blkid_probe_get_buffer(pr, 1024,
+ 			max(sizeof(struct minix_super_block),
+@@ -103,6 +104,7 @@ static int probe_minix(blkid_probe pr,
+ 		zmaps   = minix_swab16(swabme, sb->s_zmap_blocks);
+ 		firstz  = minix_swab16(swabme, sb->s_firstdatazone);
+ 		zone_size = sb->s_log_zone_size;
++		block_size = 1024;
+ 		break;
+ 	}
+ 	case 3: {
+@@ -114,6 +116,8 @@ static int probe_minix(blkid_probe pr,
+ 		zmaps   = minix_swab16(swabme, sb->s_zmap_blocks);
+ 		firstz  = minix_swab16(swabme, sb->s_firstdatazone);
+ 		zone_size = sb->s_log_zone_size;
++		block_size = minix_swab16(swabme, sb->s_blocksize);
++
+ 		break;
+ 	}
+ 	default:
+@@ -143,6 +147,7 @@ static int probe_minix(blkid_probe pr,
+ 		return 1;
+ 
+ 	blkid_probe_sprintf_version(pr, "%d", version);
++	blkid_probe_set_block_size(pr, block_size);
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/nilfs.c b/libblkid/src/superblocks/nilfs.c
+index 95538ef7b..423bd1ac4 100644
+--- a/libblkid/src/superblocks/nilfs.c
++++ b/libblkid/src/superblocks/nilfs.c
+@@ -157,6 +157,9 @@ static int probe_nilfs2(blkid_probe pr,
+ 				(unsigned char *) &sb->s_magic))
+ 		return 1;
+ 
++	if (le32_to_cpu(sb->s_log_block_size) < 32)
++		blkid_probe_set_block_size(pr, 1024U << le32_to_cpu(sb->s_log_block_size));
++
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/ntfs.c b/libblkid/src/superblocks/ntfs.c
+index 32973095b..5bfebbb78 100644
+--- a/libblkid/src/superblocks/ntfs.c
++++ b/libblkid/src/superblocks/ntfs.c
+@@ -206,6 +206,8 @@ static int probe_ntfs(blkid_probe pr, const struct blkid_idmag *mag)
+ 		attr_off += attr_len;
+ 	}
+ 
++	blkid_probe_set_block_size(pr, sector_size);
++
+ 	blkid_probe_sprintf_uuid(pr,
+ 			(unsigned char *) &ns->volume_serial,
+ 			sizeof(ns->volume_serial),
+diff --git a/libblkid/src/superblocks/ocfs.c b/libblkid/src/superblocks/ocfs.c
+index 3fe199d3f..463ed7bcf 100644
+--- a/libblkid/src/superblocks/ocfs.c
++++ b/libblkid/src/superblocks/ocfs.c
+@@ -153,6 +153,9 @@ static int probe_ocfs2(blkid_probe pr, const struct blkid_idmag *mag)
+ 		le16_to_cpu(osb->s_major_rev_level),
+ 		le16_to_cpu(osb->s_minor_rev_level));
+ 
++	if (le32_to_cpu(osb->s_blocksize_bits) < 32)
++		blkid_probe_set_block_size(pr, 1U << le32_to_cpu(osb->s_blocksize_bits));
++
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/reiserfs.c b/libblkid/src/superblocks/reiserfs.c
+index edbaaa946..6c5e5b0d7 100644
+--- a/libblkid/src/superblocks/reiserfs.c
++++ b/libblkid/src/superblocks/reiserfs.c
+@@ -32,7 +32,8 @@ struct reiserfs_super_block {
+ 
+ struct reiser4_super_block {
+ 	unsigned char	rs4_magic[16];
+-	uint16_t	rs4_dummy[2];
++	uint8_t		rs4_dummy[3];
++	uint8_t		rs4_blocksize;
+ 	unsigned char	rs4_uuid[16];
+ 	unsigned char	rs4_label[16];
+ 	uint64_t	rs4_dummy2;
+@@ -73,22 +74,29 @@ static int probe_reiser(blkid_probe pr, const struct blkid_idmag *mag)
+ 	else
+ 		blkid_probe_set_version(pr, "3.5");
+ 
++	blkid_probe_set_block_size(pr, blocksize);
++
+ 	return 0;
+ }
+ 
+ static int probe_reiser4(blkid_probe pr, const struct blkid_idmag *mag)
+ {
+ 	struct reiser4_super_block *rs4;
++	unsigned int blocksize;
+ 
+ 	rs4 = blkid_probe_get_sb(pr, mag, struct reiser4_super_block);
+ 	if (!rs4)
+ 		return errno ? -errno : 1;
+ 
++	blocksize = rs4->rs4_blocksize * 256;
++
+ 	if (*rs4->rs4_label)
+ 		blkid_probe_set_label(pr, rs4->rs4_label, sizeof(rs4->rs4_label));
+ 	blkid_probe_set_uuid(pr, rs4->rs4_uuid);
+ 	blkid_probe_set_version(pr, "4");
+ 
++	blkid_probe_set_block_size(pr, blocksize);
++
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/romfs.c b/libblkid/src/superblocks/romfs.c
+index f3e9f8b05..1c2ac4315 100644
+--- a/libblkid/src/superblocks/romfs.c
++++ b/libblkid/src/superblocks/romfs.c
+@@ -34,6 +34,9 @@ static int probe_romfs(blkid_probe pr, const struct blkid_idmag *mag)
+ 	if (*((char *) ros->ros_volume) != '\0')
+ 		blkid_probe_set_label(pr, ros->ros_volume,
+ 				sizeof(ros->ros_volume));
++
++	blkid_probe_set_block_size(pr, 1024);
++
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/squashfs.c b/libblkid/src/superblocks/squashfs.c
+index 7364beca2..4db842493 100644
+--- a/libblkid/src/superblocks/squashfs.c
++++ b/libblkid/src/superblocks/squashfs.c
+@@ -71,6 +71,8 @@ static int probe_squashfs3(blkid_probe pr, const struct blkid_idmag *mag)
+ 
+ 	blkid_probe_sprintf_version(pr, "%u.%u", vermaj, vermin);
+ 
++	blkid_probe_set_block_size(pr, 1024);
++
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c
+index 6dfd2be64..a86a055fe 100644
+--- a/libblkid/src/superblocks/superblocks.c
++++ b/libblkid/src/superblocks/superblocks.c
+@@ -74,6 +74,8 @@
+  * @APPLICATION_ID: ISO9660 application identifier
+  *
+  * @BOOT_SYSTEM_ID: ISO9660 boot system identifier
++ *
++ * @BLOCK_SIZE: block size
+  */
+ 
+ static int superblocks_probe(blkid_probe pr, struct blkid_chain *chn);
+@@ -550,6 +552,11 @@ int blkid_probe_sprintf_version(blkid_probe pr, const char *fmt, ...)
+ 	return rc;
+ }
+ 
++int blkid_probe_set_block_size(blkid_probe pr, unsigned block_size)
++{
++	return blkid_probe_sprintf_value(pr, "BLOCK_SIZE", "%u", block_size);
++}
++
+ static int blkid_probe_set_usage(blkid_probe pr, int usage)
+ {
+ 	struct blkid_chain *chn = blkid_probe_get_chain(pr);
+diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h
+index d677f85bc..d09046cfd 100644
+--- a/libblkid/src/superblocks/superblocks.h
++++ b/libblkid/src/superblocks/superblocks.h
+@@ -106,6 +106,8 @@ extern int blkid_probe_set_id_label(blkid_probe pr, const char *name,
+ extern int blkid_probe_set_utf8_id_label(blkid_probe pr, const char *name,
+ 			     unsigned char *data, size_t len, int enc);
+ 
++int blkid_probe_set_block_size(blkid_probe pr, unsigned block_size);
++
+ extern int blkid_probe_is_bitlocker(blkid_probe pr);
+ 
+ #endif /* _BLKID_SUPERBLOCKS_H */
+diff --git a/libblkid/src/superblocks/udf.c b/libblkid/src/superblocks/udf.c
+index 97e79dab0..1ab8a1e26 100644
+--- a/libblkid/src/superblocks/udf.c
++++ b/libblkid/src/superblocks/udf.c
+@@ -464,6 +464,8 @@ real_blksz:
+ 		 * E.g. number 0x0150 is revision 1.50, number 0x0201 is revision 2.01. */
+ 		blkid_probe_sprintf_version(pr, "%x.%02x", (unsigned int)(udf_rev >> 8), (unsigned int)(udf_rev & 0xFF));
+ 
++	blkid_probe_set_block_size(pr, bs);
++
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/ufs.c b/libblkid/src/superblocks/ufs.c
+index 6ef2acddc..7a8396c1c 100644
+--- a/libblkid/src/superblocks/ufs.c
++++ b/libblkid/src/superblocks/ufs.c
+@@ -233,6 +233,11 @@ found:
+ 			(unsigned char *) &ufs->fs_magic))
+ 		return 1;
+ 
++	if (!is_be)
++		blkid_probe_set_block_size(pr, le32_to_cpu(ufs->fs_fsize));
++	else
++		blkid_probe_set_block_size(pr, be32_to_cpu(ufs->fs_fsize));
++
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/vfat.c b/libblkid/src/superblocks/vfat.c
+index 29b3c501c..4e93a0e41 100644
+--- a/libblkid/src/superblocks/vfat.c
++++ b/libblkid/src/superblocks/vfat.c
+@@ -436,6 +436,8 @@ static int probe_vfat(blkid_probe pr, const struct blkid_idmag *mag)
+ 	if (version)
+ 		blkid_probe_set_version(pr, version);
+ 
++	blkid_probe_set_block_size(pr, sector_size);
++
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/vxfs.c b/libblkid/src/superblocks/vxfs.c
+index 19d284cbf..d9d26adcf 100644
+--- a/libblkid/src/superblocks/vxfs.c
++++ b/libblkid/src/superblocks/vxfs.c
+@@ -12,6 +12,15 @@
+ struct vxfs_super_block {
+ 	uint32_t		vs_magic;
+ 	int32_t			vs_version;
++	uint32_t		vs_ctime;
++	uint32_t		vs_cutime;
++	uint32_t		__unused1;
++	uint32_t		__unused2;
++	uint32_t		vs_old_logstart;
++	uint32_t		vs_old_logend;
++	uint32_t		vs_bsize;
++	uint32_t		vs_size;
++	uint32_t		vs_dsize;
+ };
+ 
+ static int probe_vxfs(blkid_probe pr, const struct blkid_idmag *mag)
+@@ -22,7 +31,13 @@ static int probe_vxfs(blkid_probe pr, const struct blkid_idmag *mag)
+ 	if (!vxs)
+ 		return errno ? -errno : 1;
+ 
+-	blkid_probe_sprintf_version(pr, "%u", (unsigned int) vxs->vs_version);
++	if (le32_to_cpu(vxs->vs_magic) == 0xa501fcf5) {
++		blkid_probe_sprintf_version(pr, "%u", (unsigned int)le32_to_cpu(vxs->vs_version));
++		blkid_probe_set_block_size(pr, le32_to_cpu(vxs->vs_bsize));
++	} else if (be32_to_cpu(vxs->vs_magic) == 0xa501fcf5) {
++		blkid_probe_sprintf_version(pr, "%u", (unsigned int)be32_to_cpu(vxs->vs_version));
++		blkid_probe_set_block_size(pr, be32_to_cpu(vxs->vs_bsize));
++	}
+ 	return 0;
+ }
+ 
+@@ -35,6 +50,7 @@ const struct blkid_idinfo vxfs_idinfo =
+ 	.magics		=
+ 	{
+ 		{ .magic = "\365\374\001\245", .len = 4, .kboff = 1 },
++		{ .magic = "\245\001\374\365", .len = 4, .kboff = 8 },
+ 		{ NULL }
+ 	}
+ };
+diff --git a/libblkid/src/superblocks/xfs.c b/libblkid/src/superblocks/xfs.c
+index 99848f900..eb513ac3e 100644
+--- a/libblkid/src/superblocks/xfs.c
++++ b/libblkid/src/superblocks/xfs.c
+@@ -173,6 +173,7 @@ static int probe_xfs(blkid_probe pr, const struct blkid_idmag *mag)
+ 		blkid_probe_set_label(pr, (unsigned char *) xs->sb_fname,
+ 				sizeof(xs->sb_fname));
+ 	blkid_probe_set_uuid(pr, xs->sb_uuid);
++	blkid_probe_set_block_size(pr, xs->sb_sectsize * 256);
+ 	return 0;
+ }
+ 
+diff --git a/libblkid/src/superblocks/zfs.c b/libblkid/src/superblocks/zfs.c
+index ec3e1c5bf..cc779c02a 100644
+--- a/libblkid/src/superblocks/zfs.c
++++ b/libblkid/src/superblocks/zfs.c
+@@ -37,6 +37,7 @@ struct zfs_uberblock {
+ 
+ #define DATA_TYPE_UINT64 8
+ #define DATA_TYPE_STRING 9
++#define DATA_TYPE_DIRECTORY 19
+ 
+ struct nvpair {
+ 	uint32_t	nvp_size;
+@@ -60,32 +61,37 @@ struct nvuint64 {
+ 	uint64_t	nvu_value;
+ };
+ 
++struct nvdirectory {
++	uint32_t	nvd_type;
++	uint32_t	nvd_unknown[3];
++};
++
+ struct nvlist {
+ 	uint32_t	nvl_unknown[3];
+ 	struct nvpair	nvl_nvpair;
+ };
+ 
+-static int zfs_process_value(blkid_probe pr, char *name, size_t namelen,
+-			     void *value, size_t max_value_size)
++static void zfs_process_value(blkid_probe pr, char *name, size_t namelen,
++			     void *value, size_t max_value_size, unsigned directory_level)
+ {
+ 	if (strncmp(name, "name", namelen) == 0 &&
+-	    sizeof(struct nvstring) <= max_value_size) {
++	    sizeof(struct nvstring) <= max_value_size &&
++	    !directory_level) {
+ 		struct nvstring *nvs = value;
+ 		uint32_t nvs_type = be32_to_cpu(nvs->nvs_type);
+ 		uint32_t nvs_strlen = be32_to_cpu(nvs->nvs_strlen);
+ 
+ 		if (nvs_type != DATA_TYPE_STRING ||
+ 		    (uint64_t)nvs_strlen + sizeof(*nvs) > max_value_size)
+-			return 0;
++			return;
+ 
+ 		DBG(LOWPROBE, ul_debug("nvstring: type %u string %*s\n",
+ 				       nvs_type, nvs_strlen, nvs->nvs_string));
+ 
+ 		blkid_probe_set_label(pr, nvs->nvs_string, nvs_strlen);
+-
+-		return 1;
+ 	} else if (strncmp(name, "guid", namelen) == 0 &&
+-		   sizeof(struct nvuint64) <= max_value_size) {
++		   sizeof(struct nvuint64) <= max_value_size &&
++		   !directory_level) {
+ 		struct nvuint64 *nvu = value;
+ 		uint32_t nvu_type = be32_to_cpu(nvu->nvu_type);
+ 		uint64_t nvu_value;
+@@ -94,17 +100,16 @@ static int zfs_process_value(blkid_probe pr, char *name, size_t namelen,
+ 		nvu_value = be64_to_cpu(nvu_value);
+ 
+ 		if (nvu_type != DATA_TYPE_UINT64)
+-			return 0;
++			return;
+ 
+ 		DBG(LOWPROBE, ul_debug("nvuint64: type %u value %"PRIu64"\n",
+ 				       nvu_type, nvu_value));
+ 
+ 		blkid_probe_sprintf_value(pr, "UUID_SUB",
+ 					  "%"PRIu64, nvu_value);
+-
+-		return 1;
+ 	} else if (strncmp(name, "pool_guid", namelen) == 0 &&
+-		   sizeof(struct nvuint64) <= max_value_size) {
++		   sizeof(struct nvuint64) <= max_value_size &&
++		   !directory_level) {
+ 		struct nvuint64 *nvu = value;
+ 		uint32_t nvu_type = be32_to_cpu(nvu->nvu_type);
+ 		uint64_t nvu_value;
+@@ -113,7 +118,7 @@ static int zfs_process_value(blkid_probe pr, char *name, size_t namelen,
+ 		nvu_value = be64_to_cpu(nvu_value);
+ 
+ 		if (nvu_type != DATA_TYPE_UINT64)
+-			return 0;
++			return;
+ 
+ 		DBG(LOWPROBE, ul_debug("nvuint64: type %u value %"PRIu64"\n",
+ 				       nvu_type, nvu_value));
+@@ -121,10 +126,21 @@ static int zfs_process_value(blkid_probe pr, char *name, size_t namelen,
+ 		blkid_probe_sprintf_uuid(pr, (unsigned char *) &nvu_value,
+ 					 sizeof(nvu_value),
+ 					 "%"PRIu64, nvu_value);
+-		return 1;
+-	}
++	} else if (strncmp(name, "ashift", namelen) == 0 &&
++		   sizeof(struct nvuint64) <= max_value_size) {
++		struct nvuint64 *nvu = value;
++		uint32_t nvu_type = be32_to_cpu(nvu->nvu_type);
++		uint64_t nvu_value;
+ 
+-	return 0;
++		memcpy(&nvu_value, &nvu->nvu_value, sizeof(nvu_value));
++		nvu_value = be64_to_cpu(nvu_value);
++
++		if (nvu_type != DATA_TYPE_UINT64)
++			return;
++
++		if (nvu_value < 32)
++			blkid_probe_set_block_size(pr, 1U << nvu_value);
++	}
+ }
+ 
+ static void zfs_extract_guid_name(blkid_probe pr, loff_t offset)
+@@ -133,7 +149,7 @@ static void zfs_extract_guid_name(blkid_probe pr, loff_t offset)
+ 	struct nvlist *nvl;
+ 	struct nvpair *nvp;
+ 	size_t left = 4096;
+-	int found = 0;
++	unsigned directory_level = 0;
+ 
+ 	offset = (offset & ~(VDEV_LABEL_SIZE - 1)) + VDEV_LABEL_NVPAIR;
+ 
+@@ -152,13 +168,21 @@ static void zfs_extract_guid_name(blkid_probe pr, loff_t offset)
+ 	nvp = &nvl->nvl_nvpair;
+ 	left -= (unsigned char *)nvp - p; /* Already used up 12 bytes */
+ 
+-	while (left > sizeof(*nvp) && nvp->nvp_size != 0 && found < 3) {
++	while (left > sizeof(*nvp)) {
+ 		uint32_t nvp_size = be32_to_cpu(nvp->nvp_size);
+ 		uint32_t nvp_namelen = be32_to_cpu(nvp->nvp_namelen);
+ 		uint64_t namesize = ((uint64_t)nvp_namelen + 3) & ~3;
+ 		size_t max_value_size;
+ 		void *value;
+ 
++		if (!nvp->nvp_size) {
++			if (!directory_level)
++				break;
++			directory_level--;
++			nvp_size = 8;
++			goto cont;
++		}
++
+ 		DBG(LOWPROBE, ul_debug("left %zd nvp_size %u\n",
+ 				       left, nvp_size));
+ 
+@@ -174,9 +198,21 @@ static void zfs_extract_guid_name(blkid_probe pr, loff_t offset)
+ 		max_value_size = nvp_size - (namesize + sizeof(*nvp));
+ 		value = nvp->nvp_name + namesize;
+ 
+-		found += zfs_process_value(pr, nvp->nvp_name, nvp_namelen,
+-					   value, max_value_size);
++		if (sizeof(struct nvdirectory) <= max_value_size) {
++			struct nvdirectory *nvu = value;
++			if (be32_to_cpu(nvu->nvd_type) == DATA_TYPE_DIRECTORY) {
++				nvp_size = sizeof(*nvp) + namesize + sizeof(*nvu);
++				directory_level++;
++				goto cont;
++			}
++		}
++
++		zfs_process_value(pr, nvp->nvp_name, nvp_namelen,
++				  value, max_value_size, directory_level);
+ 
++cont:
++		if (nvp_size > left)
++			break;
+ 		left -= nvp_size;
+ 
+ 		nvp = (struct nvpair *)((char *)nvp + nvp_size);
+diff --git a/tests/expected/blkid/low-probe-befs b/tests/expected/blkid/low-probe-befs
+index b7f25cdd2..5717049d2 100644
+--- a/tests/expected/blkid/low-probe-befs
++++ b/tests/expected/blkid/low-probe-befs
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=1024
+ ID_FS_LABEL=befs_test
+ ID_FS_LABEL_ENC=befs_test
+ ID_FS_TYPE=befs
+diff --git a/tests/expected/blkid/low-probe-exfat b/tests/expected/blkid/low-probe-exfat
+index b9defbdf9..59cb35225 100644
+--- a/tests/expected/blkid/low-probe-exfat
++++ b/tests/expected/blkid/low-probe-exfat
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=Новый_том
+ ID_FS_LABEL_ENC=Новый\x20том
+ ID_FS_TYPE=exfat
+diff --git a/tests/expected/blkid/low-probe-ext2 b/tests/expected/blkid/low-probe-ext2
+index c70b85698..087da97a4 100644
+--- a/tests/expected/blkid/low-probe-ext2
++++ b/tests/expected/blkid/low-probe-ext2
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=1024
+ ID_FS_LABEL=test-ext2
+ ID_FS_LABEL_ENC=test-ext2
+ ID_FS_TYPE=ext2
+diff --git a/tests/expected/blkid/low-probe-ext3 b/tests/expected/blkid/low-probe-ext3
+index 4bac43f57..8684884c1 100644
+--- a/tests/expected/blkid/low-probe-ext3
++++ b/tests/expected/blkid/low-probe-ext3
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=1024
+ ID_FS_LABEL=test-ext3
+ ID_FS_LABEL_ENC=test-ext3
+ ID_FS_SEC_TYPE=ext2
+diff --git a/tests/expected/blkid/low-probe-f2fs b/tests/expected/blkid/low-probe-f2fs
+index ee328640e..272905125 100644
+--- a/tests/expected/blkid/low-probe-f2fs
++++ b/tests/expected/blkid/low-probe-f2fs
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=4096
+ ID_FS_LABEL=test-f2fs
+ ID_FS_LABEL_ENC=test-f2fs
+ ID_FS_TYPE=f2fs
+diff --git a/tests/expected/blkid/low-probe-fat b/tests/expected/blkid/low-probe-fat
+index 420121117..75f99434d 100644
+--- a/tests/expected/blkid/low-probe-fat
++++ b/tests/expected/blkid/low-probe-fat
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=TEST-FAT
+ ID_FS_LABEL_ENC=TEST-FAT
+ ID_FS_SEC_TYPE=msdos
+diff --git a/tests/expected/blkid/low-probe-fat16_noheads b/tests/expected/blkid/low-probe-fat16_noheads
+index ba47078d2..ff9ef2e69 100644
+--- a/tests/expected/blkid/low-probe-fat16_noheads
++++ b/tests/expected/blkid/low-probe-fat16_noheads
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=VTech_1070
+ ID_FS_LABEL_ENC=VTech\x201070
+ ID_FS_SEC_TYPE=msdos
+diff --git a/tests/expected/blkid/low-probe-fat32_cp850_O_tilde b/tests/expected/blkid/low-probe-fat32_cp850_O_tilde
+index 096bcbf2c..9ce58e3d9 100644
+--- a/tests/expected/blkid/low-probe-fat32_cp850_O_tilde
++++ b/tests/expected/blkid/low-probe-fat32_cp850_O_tilde
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=___
+ ID_FS_LABEL_ENC=\xe5\xe5\xe5
+ ID_FS_TYPE=vfat
+diff --git a/tests/expected/blkid/low-probe-fat32_label_64MB b/tests/expected/blkid/low-probe-fat32_label_64MB
+index 1179490cf..4a99f8ff6 100644
+--- a/tests/expected/blkid/low-probe-fat32_label_64MB
++++ b/tests/expected/blkid/low-probe-fat32_label_64MB
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=BINGO
+ ID_FS_LABEL_ENC=BINGO
+ ID_FS_TYPE=vfat
+diff --git a/tests/expected/blkid/low-probe-gfs2 b/tests/expected/blkid/low-probe-gfs2
+index cd5a664b4..f04529bc0 100644
+--- a/tests/expected/blkid/low-probe-gfs2
++++ b/tests/expected/blkid/low-probe-gfs2
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=4096
+ ID_FS_LABEL=mycluster:mygfs2
+ ID_FS_LABEL_ENC=mycluster:mygfs2
+ ID_FS_TYPE=gfs2
+diff --git a/tests/expected/blkid/low-probe-hfsplus b/tests/expected/blkid/low-probe-hfsplus
+index f54b59f11..cc351a042 100644
+--- a/tests/expected/blkid/low-probe-hfsplus
++++ b/tests/expected/blkid/low-probe-hfsplus
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=4096
+ ID_FS_LABEL=123456789ABCDE
+ ID_FS_LABEL_ENC=123456789ABCDE
+ ID_FS_TYPE=hfsplus
+diff --git a/tests/expected/blkid/low-probe-hpfs b/tests/expected/blkid/low-probe-hpfs
+index 47ae1af28..7e4a12b97 100644
+--- a/tests/expected/blkid/low-probe-hpfs
++++ b/tests/expected/blkid/low-probe-hpfs
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=P01_S16A
+ ID_FS_LABEL_ENC=P01\x20S16A
+ ID_FS_TYPE=hpfs
+diff --git a/tests/expected/blkid/low-probe-iso b/tests/expected/blkid/low-probe-iso
+index af9908aaa..082f0742a 100644
+--- a/tests/expected/blkid/low-probe-iso
++++ b/tests/expected/blkid/low-probe-iso
+@@ -1,4 +1,5 @@
+ ID_FS_APPLICATION_ID=GENISOIMAGE ISO 9660/HFS FILESYSTEM CREATOR (C) 1993 E.YOUNGDALE (C) 1997-2006 J.PEARSON/J.SCHILLING (C) 2006-2007 CDRKIT TEAM
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_LABEL=IsoVolumeName
+ ID_FS_LABEL_ENC=IsoVolumeName
+ ID_FS_SYSTEM_ID=LINUX
+diff --git a/tests/expected/blkid/low-probe-iso-joliet b/tests/expected/blkid/low-probe-iso-joliet
+index 0229a0d2c..06f529d03 100644
+--- a/tests/expected/blkid/low-probe-iso-joliet
++++ b/tests/expected/blkid/low-probe-iso-joliet
+@@ -1,4 +1,5 @@
+ ID_FS_APPLICATION_ID=GENISOIMAGE ISO 9660/HFS FILESYSTEM CREATOR (C) 1993 E.YOUNGDALE (C) 1997-2006 J.PEARSON/J.SCHILLING (C) 2006-2007 CDRKIT TEAM
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_LABEL=ThisWonderfulLabelIsVeryVeryLong
+ ID_FS_LABEL_ENC=ThisWonderfulLabelIsVeryVeryLong
+ ID_FS_SYSTEM_ID=LINUX
+diff --git a/tests/expected/blkid/low-probe-iso-rr-joliet b/tests/expected/blkid/low-probe-iso-rr-joliet
+index 14d550e90..bb3274db3 100644
+--- a/tests/expected/blkid/low-probe-iso-rr-joliet
++++ b/tests/expected/blkid/low-probe-iso-rr-joliet
+@@ -1,4 +1,5 @@
+ ID_FS_APPLICATION_ID=GENISOIMAGE ISO 9660/HFS FILESYSTEM CREATOR (C) 1993 E.YOUNGDALE (C) 1997-2006 J.PEARSON/J.SCHILLING (C) 2006-2007 CDRKIT TEAM
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_LABEL=ThisIsVolumeName
+ ID_FS_LABEL_ENC=ThisIsVolumeName
+ ID_FS_SYSTEM_ID=LINUX
+diff --git a/tests/expected/blkid/low-probe-jbd b/tests/expected/blkid/low-probe-jbd
+index 8dbcdbce0..c9f9f6b79 100644
+--- a/tests/expected/blkid/low-probe-jbd
++++ b/tests/expected/blkid/low-probe-jbd
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=1024
+ ID_FS_LOGUUID=0d7a07df-7b06-4829-bce7-3b9c3ece570c
+ ID_FS_TYPE=jbd
+ ID_FS_USAGE=other
+diff --git a/tests/expected/blkid/low-probe-jfs b/tests/expected/blkid/low-probe-jfs
+index 877fd168e..ac7d31bac 100644
+--- a/tests/expected/blkid/low-probe-jfs
++++ b/tests/expected/blkid/low-probe-jfs
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=4096
+ ID_FS_LABEL=test-jfs
+ ID_FS_LABEL_ENC=test-jfs
+ ID_FS_TYPE=jfs
+diff --git a/tests/expected/blkid/low-probe-minix-BE b/tests/expected/blkid/low-probe-minix-BE
+index 9627799a3..f73f1b5db 100644
+--- a/tests/expected/blkid/low-probe-minix-BE
++++ b/tests/expected/blkid/low-probe-minix-BE
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=1024
+ ID_FS_TYPE=minix
+ ID_FS_USAGE=filesystem
+ ID_FS_VERSION=1
+diff --git a/tests/expected/blkid/low-probe-minix-LE b/tests/expected/blkid/low-probe-minix-LE
+index 9627799a3..f73f1b5db 100644
+--- a/tests/expected/blkid/low-probe-minix-LE
++++ b/tests/expected/blkid/low-probe-minix-LE
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=1024
+ ID_FS_TYPE=minix
+ ID_FS_USAGE=filesystem
+ ID_FS_VERSION=1
+diff --git a/tests/expected/blkid/low-probe-nilfs2 b/tests/expected/blkid/low-probe-nilfs2
+index c6c9cab17..ff27e0b23 100644
+--- a/tests/expected/blkid/low-probe-nilfs2
++++ b/tests/expected/blkid/low-probe-nilfs2
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=4096
+ ID_FS_LABEL=test-nilfs2
+ ID_FS_LABEL_ENC=test-nilfs2
+ ID_FS_TYPE=nilfs2
+diff --git a/tests/expected/blkid/low-probe-ntfs b/tests/expected/blkid/low-probe-ntfs
+index aaaa077da..790157aaa 100644
+--- a/tests/expected/blkid/low-probe-ntfs
++++ b/tests/expected/blkid/low-probe-ntfs
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=Новый_том
+ ID_FS_LABEL_ENC=Новый\x20том
+ ID_FS_TYPE=ntfs
+diff --git a/tests/expected/blkid/low-probe-ocfs2 b/tests/expected/blkid/low-probe-ocfs2
+index 2328d21a0..9b84dbe67 100644
+--- a/tests/expected/blkid/low-probe-ocfs2
++++ b/tests/expected/blkid/low-probe-ocfs2
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=1024
+ ID_FS_LABEL=test-ocfs2
+ ID_FS_LABEL_ENC=test-ocfs2
+ ID_FS_TYPE=ocfs2
+diff --git a/tests/expected/blkid/low-probe-reiser3 b/tests/expected/blkid/low-probe-reiser3
+index d376ecae1..1c4b1478d 100644
+--- a/tests/expected/blkid/low-probe-reiser3
++++ b/tests/expected/blkid/low-probe-reiser3
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=4096
+ ID_FS_LABEL=TESTREISER
+ ID_FS_LABEL_ENC=TESTREISER
+ ID_FS_TYPE=reiserfs
+diff --git a/tests/expected/blkid/low-probe-reiser4 b/tests/expected/blkid/low-probe-reiser4
+index 65d63aa65..66df064fd 100644
+--- a/tests/expected/blkid/low-probe-reiser4
++++ b/tests/expected/blkid/low-probe-reiser4
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=4096
+ ID_FS_LABEL=TESTR4
+ ID_FS_LABEL_ENC=TESTR4
+ ID_FS_TYPE=reiser4
+diff --git a/tests/expected/blkid/low-probe-romfs b/tests/expected/blkid/low-probe-romfs
+index 2eb982bc1..b56a6b881 100644
+--- a/tests/expected/blkid/low-probe-romfs
++++ b/tests/expected/blkid/low-probe-romfs
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=1024
+ ID_FS_LABEL=test-romfs
+ ID_FS_LABEL_ENC=test-romfs
+ ID_FS_TYPE=romfs
+diff --git a/tests/expected/blkid/low-probe-small-fat32 b/tests/expected/blkid/low-probe-small-fat32
+index 39239e6b3..5dba03ec3 100644
+--- a/tests/expected/blkid/low-probe-small-fat32
++++ b/tests/expected/blkid/low-probe-small-fat32
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=TESTVFAT
+ ID_FS_LABEL_ENC=TESTVFAT
+ ID_FS_TYPE=vfat
+diff --git a/tests/expected/blkid/low-probe-udf b/tests/expected/blkid/low-probe-udf
+index 902fb82f0..869a335db 100644
+--- a/tests/expected/blkid/low-probe-udf
++++ b/tests/expected/blkid/low-probe-udf
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_LABEL=test-udf
+ ID_FS_LABEL_ENC=test-udf
+ ID_FS_LOGICAL_VOLUME_ID=test-udf
+diff --git a/tests/expected/blkid/low-probe-udf-bdr-2.60-nero b/tests/expected/blkid/low-probe-udf-bdr-2.60-nero
+index c0b8867b5..fcf29b112 100644
+--- a/tests/expected/blkid/low-probe-udf-bdr-2.60-nero
++++ b/tests/expected/blkid/low-probe-udf-bdr-2.60-nero
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_LABEL=Label
+ ID_FS_LABEL_ENC=Label
+ ID_FS_LOGICAL_VOLUME_ID=Label
+diff --git a/tests/expected/blkid/low-probe-udf-cd-mkudfiso-20100208 b/tests/expected/blkid/low-probe-udf-cd-mkudfiso-20100208
+index f57dee08b..768d0d2f0 100644
+--- a/tests/expected/blkid/low-probe-udf-cd-mkudfiso-20100208
++++ b/tests/expected/blkid/low-probe-udf-cd-mkudfiso-20100208
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_LABEL=Volume_Label
+ ID_FS_LABEL_ENC=Volume\x20Label
+ ID_FS_LOGICAL_VOLUME_ID=Volume Label
+diff --git a/tests/expected/blkid/low-probe-udf-cd-nero-6 b/tests/expected/blkid/low-probe-udf-cd-nero-6
+index cf85ea9c5..41f9ff509 100644
+--- a/tests/expected/blkid/low-probe-udf-cd-nero-6
++++ b/tests/expected/blkid/low-probe-udf-cd-nero-6
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_LABEL=UDF_Label
+ ID_FS_LABEL_ENC=UDF\x20Label
+ ID_FS_LOGICAL_VOLUME_ID=UDF Label
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-1 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-1
+index 5446aec42..e26b2da0c 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-1
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-1
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=LinuxUDF
+ ID_FS_LABEL_ENC=LinuxUDF
+ ID_FS_LOGICAL_VOLUME_ID=LinuxUDF
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-2 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-2
+index b72fcac72..112768353 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-2
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-2
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=Label
+ ID_FS_LABEL_ENC=Label
+ ID_FS_LOGICAL_VOLUME_ID=Label
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-1 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-1
+index 20f148549..db9127d34 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-1
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-1
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=Label
+ ID_FS_LABEL_ENC=Label
+ ID_FS_LOGICAL_VOLUME_ID=Label
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-2 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-2
+index 34a2f49e3..f472284f3 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-2
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-2
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_LABEL=Label
+ ID_FS_LABEL_ENC=Label
+ ID_FS_LOGICAL_VOLUME_ID=Label
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-3 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-3
+index 3fef2b3c6..6f4802ca0 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-3
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-3
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_LABEL=ÿ
+ ID_FS_LABEL_ENC=ÿ
+ ID_FS_LOGICAL_VOLUME_ID=ÿ
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-4 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-4
+index 28cd73603..0ae5b910e 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-4
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-4
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=1024
+ ID_FS_LABEL=Label
+ ID_FS_LABEL_ENC=Label
+ ID_FS_LOGICAL_VOLUME_ID=Label
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-5 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-5
+index d84ae8964..1b98c21ed 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-5
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-5
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=4096
+ ID_FS_LABEL=Label
+ ID_FS_LABEL_ENC=Label
+ ID_FS_LOGICAL_VOLUME_ID=Label
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-6 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-6
+index d73914970..c22c96b0a 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-6
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-6
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ID_FS_LABEL_ENC=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ID_FS_LOGICAL_VOLUME_ID=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-7 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-7
+index a78606eea..c3b9d8a8a 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-7
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-7
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=4096
+ ID_FS_LABEL=Label4096
+ ID_FS_LABEL_ENC=Label4096
+ ID_FS_LOGICAL_VOLUME_ID=Label4096
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-8 b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-8
+index 448c8f90b..58c131f7d 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-8
++++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-8
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=LinuxUDF
+ ID_FS_LABEL_ENC=LinuxUDF
+ ID_FS_LOGICAL_VOLUME_ID=LinuxUDF
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.5 b/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.5
+index b33c814d6..18930cead 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.5
++++ b/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.5
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=discname
+ ID_FS_LABEL_ENC=discname
+ ID_FS_LOGICAL_VOLUME_ID=discname
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.7 b/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.7
+index a47bd3f12..13e984167 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.7
++++ b/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.7
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=discname
+ ID_FS_LABEL_ENC=discname
+ ID_FS_LOGICAL_VOLUME_ID=discname
+diff --git a/tests/expected/blkid/low-probe-udf-hdd-win7 b/tests/expected/blkid/low-probe-udf-hdd-win7
+index 759c8db3d..e68f180e5 100644
+--- a/tests/expected/blkid/low-probe-udf-hdd-win7
++++ b/tests/expected/blkid/low-probe-udf-hdd-win7
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=My_volume_label
+ ID_FS_LABEL_ENC=My\x20volume\x20label
+ ID_FS_LOGICAL_VOLUME_ID=My volume label
+diff --git a/tests/expected/blkid/low-probe-ufs b/tests/expected/blkid/low-probe-ufs
+index 96828d73e..256f065d2 100644
+--- a/tests/expected/blkid/low-probe-ufs
++++ b/tests/expected/blkid/low-probe-ufs
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=2048
+ ID_FS_TYPE=ufs
+ ID_FS_USAGE=filesystem
+ ID_FS_UUID=4b0e640aec56ac70
+diff --git a/tests/expected/blkid/low-probe-xfs b/tests/expected/blkid/low-probe-xfs
+index f21d881a5..6eb1b4600 100644
+--- a/tests/expected/blkid/low-probe-xfs
++++ b/tests/expected/blkid/low-probe-xfs
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=test-xfs
+ ID_FS_LABEL_ENC=test-xfs
+ ID_FS_TYPE=xfs
+diff --git a/tests/expected/blkid/low-probe-zfs b/tests/expected/blkid/low-probe-zfs
+index 952e0e591..0e7af2866 100644
+--- a/tests/expected/blkid/low-probe-zfs
++++ b/tests/expected/blkid/low-probe-zfs
+@@ -1,3 +1,4 @@
++ID_FS_BLOCK_SIZE=512
+ ID_FS_LABEL=tank
+ ID_FS_LABEL_ENC=tank
+ ID_FS_TYPE=zfs_member
+-- 
+2.25.4
+
diff --git a/SOURCES/0038-libblkid-xfs-fix-sector-size-calculation.patch b/SOURCES/0038-libblkid-xfs-fix-sector-size-calculation.patch
new file mode 100644
index 0000000..dd0d58d
--- /dev/null
+++ b/SOURCES/0038-libblkid-xfs-fix-sector-size-calculation.patch
@@ -0,0 +1,29 @@
+From 28b89361bf574af24c2f9c857d0e5f7c84e2787c Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Tue, 3 Sep 2019 15:10:35 +0200
+Subject: [PATCH 38/40] libblkid: (xfs) fix sector size calculation
+
+Reported-by: Anatoly Pugachev <matorola@gmail.com>
+Upstream: http://github.com/karelzak/util-linux/commit/2771d40b88660a11306aa5d4e200fc0ebebfe315
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1817726
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ libblkid/src/superblocks/xfs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libblkid/src/superblocks/xfs.c b/libblkid/src/superblocks/xfs.c
+index eb513ac3e..98e59ff7c 100644
+--- a/libblkid/src/superblocks/xfs.c
++++ b/libblkid/src/superblocks/xfs.c
+@@ -173,7 +173,7 @@ static int probe_xfs(blkid_probe pr, const struct blkid_idmag *mag)
+ 		blkid_probe_set_label(pr, (unsigned char *) xs->sb_fname,
+ 				sizeof(xs->sb_fname));
+ 	blkid_probe_set_uuid(pr, xs->sb_uuid);
+-	blkid_probe_set_block_size(pr, xs->sb_sectsize * 256);
++	blkid_probe_set_block_size(pr, be16_to_cpu(xs->sb_sectsize));
+ 	return 0;
+ }
+ 
+-- 
+2.25.4
+
diff --git a/SOURCES/0039-col-make-flush_line-a-little-bit-robust.patch b/SOURCES/0039-col-make-flush_line-a-little-bit-robust.patch
new file mode 100644
index 0000000..f586752
--- /dev/null
+++ b/SOURCES/0039-col-make-flush_line-a-little-bit-robust.patch
@@ -0,0 +1,68 @@
+From 54e3d1414e1a031d6f635f8fcbe273eecfd65560 Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Tue, 5 Feb 2019 12:06:00 +0100
+Subject: [PATCH 39/40] col: make flush_line() a little bit robust
+
+The code is horrible. The core of the problem are signed integers
+and no check for the limits.
+
+This patch fixes c->c_column = cur_col; where c_column is "short"
+and "cur_col" is int. Let's use "int" for all the variables. It's
+really not perfect as for bigger lines it can segfault again...
+
+The patch also removes some unnecessary static variables.
+
+Upstream: http://github.com/karelzak/util-linux/commit/004356f05018e3bfcaddd2652846659a4d8481f3
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1803753
+Addresses: https://github.com/karelzak/util-linux/issues/749
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ text-utils/col.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/text-utils/col.c b/text-utils/col.c
+index 3d9e15d26..c2f8db64d 100644
+--- a/text-utils/col.c
++++ b/text-utils/col.c
+@@ -88,7 +88,7 @@ typedef char CSET;
+ typedef struct char_str {
+ #define	CS_NORMAL	1
+ #define	CS_ALTERNATE	2
+-	short		c_column;	/* column character is in */
++	int		c_column;	/* column character is in */
+ 	CSET		c_set;		/* character set (currently only 2) */
+ 	wchar_t		c_char;		/* character in question */
+ 	int		c_width;	/* character width */
+@@ -476,8 +476,9 @@ void flush_line(LINE *l)
+ 	nchars = l->l_line_len;
+ 
+ 	if (l->l_needs_sort) {
+-		static CHAR *sorted;
+-		static int count_size, *count, i, save, sorted_size, tot;
++		static CHAR *sorted = NULL;
++		static int count_size = 0, *count = NULL, sorted_size = 0;
++		int i, tot;
+ 
+ 		/*
+ 		 * Do an O(n) sort on l->l_line by column being careful to
+@@ -494,7 +495,7 @@ void flush_line(LINE *l)
+ 			    (unsigned)sizeof(int) * count_size);
+ 		}
+ 		memset(count, 0, sizeof(int) * l->l_max_col + 1);
+-		for (i = nchars, c = l->l_line; --i >= 0; c++)
++		for (i = nchars, c = l->l_line; c && --i >= 0; c++)
+ 			count[c->c_column]++;
+ 
+ 		/*
+@@ -502,7 +503,7 @@ void flush_line(LINE *l)
+ 		 * indices into new line.
+ 		 */
+ 		for (tot = 0, i = 0; i <= l->l_max_col; i++) {
+-			save = count[i];
++			int save = count[i];
+ 			count[i] = tot;
+ 			tot += save;
+ 		}
+-- 
+2.25.4
+
diff --git a/SOURCES/0040-libmount-improve-smb-2-3-support.patch b/SOURCES/0040-libmount-improve-smb-2-3-support.patch
new file mode 100644
index 0000000..d30a197
--- /dev/null
+++ b/SOURCES/0040-libmount-improve-smb-2-3-support.patch
@@ -0,0 +1,49 @@
+From 2cd5219da87274db251a7f836efe6ac724b70e53 Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Wed, 11 Mar 2020 10:38:37 +0100
+Subject: [PATCH 40/40] libmount: improve smb{2,3} support
+
+It seems kernel can use smb3 as fstype in mountinfo.
+
+Upstream: http://github.com/karelzak/util-linux/commit/36d80cb6c11b3064ed9fb29c7c8b101e3f266441
+Upstream: http://github.com/karelzak/util-linux/commit/b7ff4134beea53688ab3c01484cf59b2ce2d9ce9
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1812118
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ libmount/src/tab.c   | 5 ++++-
+ libmount/src/utils.c | 1 +
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/libmount/src/tab.c b/libmount/src/tab.c
+index eb61dd33e..74d60df3d 100644
+--- a/libmount/src/tab.c
++++ b/libmount/src/tab.c
+@@ -1644,9 +1644,12 @@ int mnt_table_is_fs_mounted(struct libmnt_table *tb, struct libmnt_fs *fstab_fs)
+ 		if (root) {
+ 			const char *fstype = mnt_fs_get_fstype(fs);
+ 
+-			if (fstype && strcmp(fstype, "cifs") == 0) {
++			if (fstype && (strcmp(fstype, "cifs") == 0
++				       || strcmp(fstype, "smb3") == 0)) {
++
+ 				const char *unc_subdir = get_cifs_unc_subdir_path(src);
+ 				const char *path_on_fs = mnt_fs_get_root(fs);
++
+ 				if (!unc_subdir || !path_on_fs || !streq_paths(unc_subdir, path_on_fs))
+ 					continue;
+ 			} else {
+diff --git a/libmount/src/utils.c b/libmount/src/utils.c
+index 04e79f53f..e43588831 100644
+--- a/libmount/src/utils.c
++++ b/libmount/src/utils.c
+@@ -315,6 +315,7 @@ int mnt_fstype_is_pseudofs(const char *type)
+ int mnt_fstype_is_netfs(const char *type)
+ {
+ 	if (strcmp(type, "cifs")   == 0 ||
++	    strcmp(type, "smb3")   == 0 ||
+ 	    strcmp(type, "smbfs")  == 0 ||
+ 	    strncmp(type,"nfs", 3) == 0 ||
+ 	    strcmp(type, "afs")    == 0 ||
+-- 
+2.25.4
+
diff --git a/SOURCES/0041-libmount-fix-mount-a-EBUSY-for-cifs.patch b/SOURCES/0041-libmount-fix-mount-a-EBUSY-for-cifs.patch
new file mode 100644
index 0000000..28e915e
--- /dev/null
+++ b/SOURCES/0041-libmount-fix-mount-a-EBUSY-for-cifs.patch
@@ -0,0 +1,65 @@
+From 618aedc9e892b206492c1720bec261b043c66263 Mon Sep 17 00:00:00 2001
+From: Roberto Bergantinos Corpas <rbergant@redhat.com>
+Date: Mon, 27 Apr 2020 15:46:02 +0200
+Subject: [PATCH] libmount: fix mount -a EBUSY for cifs
+
+fstab:
+
+ //rhel73/myshare/sub/path  /mnt   cifs
+
+after mount in mountinfo:
+
+ #  grep cifs /proc/self/mountinfo
+ 47 39 0:40 /sub/path /mnt rw,relatime shared:60 - cifs //rhel73/myshare/sub/path ...
+            ^^^^^^^^^
+or:
+
+ # grep cifs /proc/self/mountinfo
+ 47 39 0:40 / /mnt rw,relatime shared:60 - cifs //rhel73/myshare/sub/path ...
+            ^
+
+That is so since on kernel cifs code, cifs_get_root (which returns the
+entry associated with mnt_root) return s_root if
+CIFS_MOUNT_USE_PREFIX_PATH is set, no questions asked.
+
+This situation can occurr often on CIFS mounts, as CIFS servers limit
+frequently scope of access to the root path.
+
+[kzak@redhat.com: - add more info to the commit message,
+                  - clean up variable names]
+
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1829245
+Upstream: http://github.com/karelzak/util-linux/commit/31b3a523eca2fc7e5876ec5fd89094208fed0899
+Signed-off-by: Roberto Bergantinos Corpas <rbergant@redhat.com>
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ libmount/src/tab.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/libmount/src/tab.c b/libmount/src/tab.c
+index 74d60df3d..cd97a1cb5 100644
+--- a/libmount/src/tab.c
++++ b/libmount/src/tab.c
+@@ -1644,13 +1644,14 @@ int mnt_table_is_fs_mounted(struct libmnt_table *tb, struct libmnt_fs *fstab_fs)
+ 		if (root) {
+ 			const char *fstype = mnt_fs_get_fstype(fs);
+ 
+-			if (fstype && (strcmp(fstype, "cifs") == 0
+-				       || strcmp(fstype, "smb3") == 0)) {
++			if (fstype && (strcmp(fstype, "cifs") == 0 ||
++				       strcmp(fstype, "smb3") == 0)) {
+ 
+-				const char *unc_subdir = get_cifs_unc_subdir_path(src);
+-				const char *path_on_fs = mnt_fs_get_root(fs);
++				const char *sub = get_cifs_unc_subdir_path(src);
++				const char *r = mnt_fs_get_root(fs);
+ 
+-				if (!unc_subdir || !path_on_fs || !streq_paths(unc_subdir, path_on_fs))
++				if (!sub || !r || (!streq_paths(sub, r) &&
++						   !streq_paths("/", r)))
+ 					continue;
+ 			} else {
+ 				const char *r = mnt_fs_get_root(fs);
+-- 
+2.25.4
+
diff --git a/SOURCES/0042-Manual-pages-losetup.8-Fix-direct-io-defaults.patch b/SOURCES/0042-Manual-pages-losetup.8-Fix-direct-io-defaults.patch
new file mode 100644
index 0000000..19dbf34
--- /dev/null
+++ b/SOURCES/0042-Manual-pages-losetup.8-Fix-direct-io-defaults.patch
@@ -0,0 +1,31 @@
+From 0717177be22588d4e419de280eccd0eeafb15016 Mon Sep 17 00:00:00 2001
+From: Rupesh Girase <rgirase@redhat.com>
+Date: Thu, 18 Jun 2020 19:17:41 +0530
+Subject: [PATCH] Manual pages: losetup.8: Fix "--direct-io" defaults
+
+"--direct-io" option is "off" by default while configuring
+loop device but it's mentioned "on" in man page.
+
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1848919
+Upstream: http://github.com/karelzak/util-linux/commit/4bee67e2d1a78abc52e89c6eb71f0efc8a278ce9
+Signed-off-by: Rupesh Girase <rgirase@redhat.com>
+---
+ sys-utils/losetup.8 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sys-utils/losetup.8 b/sys-utils/losetup.8
+index cdb9ed052..c87c231b6 100644
+--- a/sys-utils/losetup.8
++++ b/sys-utils/losetup.8
+@@ -130,7 +130,7 @@ Set up a read-only loop device.
+ .BR \-\-direct\-io [ =on | off ]
+ Enable or disable direct I/O for the backing file.  The optional argument
+ can be either \fBon\fR or \fBoff\fR.  If the argument is omitted, it defaults
+-to \fBon\fR.
++to \fBoff\fR.
+ .TP
+ .BR \-v , " \-\-verbose"
+ Verbose mode.
+-- 
+2.25.4
+
diff --git a/SPECS/util-linux.spec b/SPECS/util-linux.spec
index cf2d224..fddfee9 100644
--- a/SPECS/util-linux.spec
+++ b/SPECS/util-linux.spec
@@ -2,7 +2,7 @@
 Summary: A collection of basic system utilities
 Name: util-linux
 Version: 2.32.1
-Release: 17%{?dist}
+Release: 24%{?dist}
 License: GPLv2 and GPLv2+ and LGPLv2+ and BSD with advertising and Public Domain
 Group: System Environment/Base
 URL: http://en.wikipedia.org/wiki/Util-linux
@@ -44,6 +44,7 @@ BuildRequires: autoconf
 BuildRequires: automake
 BuildRequires: libtool
 BuildRequires: bison
+BuildRequires: git-core
 
 ### Sources
 Source0: ftp://ftp.kernel.org/pub/linux/utils/util-linux/v%{upstream_major}/util-linux-%{upstream_version}.tar.xz
@@ -148,6 +149,37 @@ Patch26: 0026-partx-document-d-vs.-nr-and-fix-test.patch
 Patch27: 0027-libmount-improve-mountinfo-reliability.patch
 Patch28: 0028-libmount-use-fmemopen-in-more-robust-way-coverity-sc.patch
 
+### RHEL-8.2
+###
+# 1739443 - lscpu reports wrong hypervisor in nested virt on s390x
+Patch29: 0029-lscpu-use-the-first-VM-from-proc-sysinfo.patch
+Patch30: 0030-tests-lscpu-s390-nested-virtualization.patch
+# 1743555 - command chfn adds some useless commas with GECOS information into /etc/password
+Patch31: 0031-chfn-don-t-append-extra-tailing-commas.patch
+Patch32: 0032-tests-add-new-test-for-chfn-gecos.patch
+# 1739443 - lscpu reports wrong hypervisor in nested virt on s390x
+Patch33: 0033-tests-update-lscpu-test-for-RHEL8.patch
+# CI fix
+Patch34: 0034-tests-fdisk-make-sure-we-use-the-same-sizes-for-MD-d.patch
+
+### RHEL-8.3
+###
+# 1826251 - remove MD metadata 0.90 based tests from util-linux CI
+Patch35: 0035-tests-mark-MD-tests-with-metadata-v0.90-as-KNOWN-FAI.patch
+# 1812576 - RFE: Bitlocker detection for RHEL 8.3
+Patch36: 0036-libblkid-add-BitLocker-detection.patch
+# 1817726 - libblkid BLOCK_SIZE
+Patch37: 0037-blkid-retport-block-size-of-a-filesystem.patch
+Patch38: 0038-libblkid-xfs-fix-sector-size-calculation.patch
+# 1803753 - col struct char_str c_column field should be of unsigned type and/or larger than 16 bit
+Patch39: 0039-col-make-flush_line-a-little-bit-robust.patch
+# 1812118 - mount -a always tries to mount smb3 share subdir despite being already mounted.
+Patch40: 0040-libmount-improve-smb-2-3-support.patch
+# 1829245 - mount -a tries to mount already mounted cifs shares when we cannot query up to root dir
+Patch41: 0041-libmount-fix-mount-a-EBUSY-for-cifs.patch
+# 1848919 - Update losetup man page to fix "--direct-io" defaults
+Patch42: 0042-Manual-pages-losetup.8-Fix-direct-io-defaults.patch
+
 
 %description
 The util-linux package contains a large variety of low-level system
@@ -329,7 +361,7 @@ chfn and chsh utilities with dependence on libuser
 
 
 %prep
-%autosetup -p1 -n %{name}-%{upstream_version}
+%autosetup -p1 -Sgit -n %{name}-%{upstream_version}
 
 %build
 unset LINGUAS || :
@@ -1013,6 +1045,34 @@ fi
 %{_libdir}/python*/site-packages/libmount/
 
 %changelog
+* Fri Jun 26 2020 Karel Zak <kzak@redhat.com> 2.32.1-24
+- fix #1848919 - Update losetup man page to fix "--direct-io" defaults
+
+* Thu Jun 11 2020 Karel Zak <kzak@redhat.com> 2.32.1-23
+- fix #1826251 - remove MD metadata 0.90 based tests from util-linux CI
+- fix #1812576 - RFE: Bitlocker detection for RHEL 8.3
+- fix #1817726 - add libblkid BLOCK_SIZE
+- fix #1803753 - RHEL-8: col struct char_str c_column field should be of unsigned type and/or larger than 16 bit
+- fix #1812118 - mount -a always tries to mount smb3 share subdir despite being already mounted
+- fix #1824727 - util-linux: Include python3-libmount package in the release
+- fix #1829245 - mount -a tries to mount already mounted cifs shares when we cannot query up to root dir
+
+* Tue Dec 17 2019 Karel Zak <kzak@redhat.com> 2.32.1-22
+- improve CI tests portability to rhel-8 kernel
+
+* Tue Dec 17 2019 Karel Zak <kzak@redhat.com> 2.32.1-21
+- add git to BuildRequires due to autosetup -Sgit
+
+* Tue Dec 17 2019 Karel Zak <kzak@redhat.com> 2.32.1-20
+- fix spec file typo
+
+* Tue Dec 17 2019 Karel Zak <kzak@redhat.com> 2.32.1-19
+- fix test for #1739443
+
+* Mon Dec 16 2019 Karel Zak <kzak@redhat.com> 2.32.1-18
+- fix #1739443 - lscpu reports wrong hypervisor in nested virt on s390x
+- fix #1743555 - command chfn adds some useless commas with GECOS information into /etc/password
+
 * Sat Sep 21 2019 Karel Zak <kzak@redhat.com> 2.32.1-17
 - fix error path in mountinfo patch (#1751447)