cdown / rpms / util-linux

Forked from rpms/util-linux 2 years ago
Clone

Blame SOURCES/0037-blkid-retport-block-size-of-a-filesystem.patch

31b890
From 9e9355c71c031f4d7445c30cb39bd6b33c10ff9d Mon Sep 17 00:00:00 2001
31b890
From: Mikulas Patocka <mpatocka@redhat.com>
31b890
Date: Mon, 2 Sep 2019 12:28:39 +0200
31b890
Subject: [PATCH 37/40] blkid: retport block size of a filesystem
31b890
31b890
This patch extends libblkid, so that it reports filesystem block size.
31b890
31b890
When blkid returns a specific number in the BLOCK_SIZE attribute, it
31b890
guarantees that all the bios submitted by the filesystem are aligned on
31b890
this boundary.
31b890
31b890
We need this because when we want to enable dm-integrity or dm-writecache
31b890
on an existing filesystem, we need to know filesystem block size, so that
31b890
dm-integrity or dm-writecache is initialized with matching block size.
31b890
31b890
We could always use block size 512 for dm-integrity and dm-writecache, but
31b890
that would cause metadata overhead and performance degradation. On the
31b890
other hand, if we used block size 4096, it would fail if the filesystem
31b890
has smaller blocksize.
31b890
31b890
[kzak@redhat.com: - move vfat BLOCK_SIZE to probing function
31b890
		  - remove unwanted debug fprintf from ZFS prober]
31b890
31b890
RHEL-8.3: add regression tests updates to teh patch too
31b890
31b890
Upstream: http://github.com/karelzak/util-linux/commit/cd129b7d2fecd5f2013512936de2db1bf244aa75
31b890
Upstream: http://github.com/karelzak/util-linux/commit/e7d318a9dd63c9fae8f07754ce12aa9af4dce089
31b890
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1817726
31b890
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
31b890
Signed-off-by: Karel Zak <kzak@redhat.com>
31b890
---
31b890
 libblkid/src/superblocks/befs.c               |  3 +
31b890
 libblkid/src/superblocks/btrfs.c              |  1 +
31b890
 libblkid/src/superblocks/exfat.c              |  2 +
31b890
 libblkid/src/superblocks/exfs.c               |  4 +
31b890
 libblkid/src/superblocks/ext.c                |  3 +
31b890
 libblkid/src/superblocks/f2fs.c               |  2 +
31b890
 libblkid/src/superblocks/gfs.c                |  1 +
31b890
 libblkid/src/superblocks/hfs.c                |  2 +
31b890
 libblkid/src/superblocks/hpfs.c               |  1 +
31b890
 libblkid/src/superblocks/iso9660.c            |  2 +
31b890
 libblkid/src/superblocks/jfs.c                |  1 +
31b890
 libblkid/src/superblocks/minix.c              |  5 ++
31b890
 libblkid/src/superblocks/nilfs.c              |  3 +
31b890
 libblkid/src/superblocks/ntfs.c               |  2 +
31b890
 libblkid/src/superblocks/ocfs.c               |  3 +
31b890
 libblkid/src/superblocks/reiserfs.c           | 10 ++-
31b890
 libblkid/src/superblocks/romfs.c              |  3 +
31b890
 libblkid/src/superblocks/squashfs.c           |  2 +
31b890
 libblkid/src/superblocks/superblocks.c        |  7 ++
31b890
 libblkid/src/superblocks/superblocks.h        |  2 +
31b890
 libblkid/src/superblocks/udf.c                |  2 +
31b890
 libblkid/src/superblocks/ufs.c                |  5 ++
31b890
 libblkid/src/superblocks/vfat.c               |  2 +
31b890
 libblkid/src/superblocks/vxfs.c               | 18 ++++-
31b890
 libblkid/src/superblocks/xfs.c                |  1 +
31b890
 libblkid/src/superblocks/zfs.c                | 74 ++++++++++++++-----
31b890
 tests/expected/blkid/low-probe-befs           |  1 +
31b890
 tests/expected/blkid/low-probe-exfat          |  1 +
31b890
 tests/expected/blkid/low-probe-ext2           |  1 +
31b890
 tests/expected/blkid/low-probe-ext3           |  1 +
31b890
 tests/expected/blkid/low-probe-f2fs           |  1 +
31b890
 tests/expected/blkid/low-probe-fat            |  1 +
31b890
 tests/expected/blkid/low-probe-fat16_noheads  |  1 +
31b890
 .../blkid/low-probe-fat32_cp850_O_tilde       |  1 +
31b890
 .../expected/blkid/low-probe-fat32_label_64MB |  1 +
31b890
 tests/expected/blkid/low-probe-gfs2           |  1 +
31b890
 tests/expected/blkid/low-probe-hfsplus        |  1 +
31b890
 tests/expected/blkid/low-probe-hpfs           |  1 +
31b890
 tests/expected/blkid/low-probe-iso            |  1 +
31b890
 tests/expected/blkid/low-probe-iso-joliet     |  1 +
31b890
 tests/expected/blkid/low-probe-iso-rr-joliet  |  1 +
31b890
 tests/expected/blkid/low-probe-jbd            |  1 +
31b890
 tests/expected/blkid/low-probe-jfs            |  1 +
31b890
 tests/expected/blkid/low-probe-minix-BE       |  1 +
31b890
 tests/expected/blkid/low-probe-minix-LE       |  1 +
31b890
 tests/expected/blkid/low-probe-nilfs2         |  1 +
31b890
 tests/expected/blkid/low-probe-ntfs           |  1 +
31b890
 tests/expected/blkid/low-probe-ocfs2          |  1 +
31b890
 tests/expected/blkid/low-probe-reiser3        |  1 +
31b890
 tests/expected/blkid/low-probe-reiser4        |  1 +
31b890
 tests/expected/blkid/low-probe-romfs          |  1 +
31b890
 tests/expected/blkid/low-probe-small-fat32    |  1 +
31b890
 tests/expected/blkid/low-probe-udf            |  1 +
31b890
 .../blkid/low-probe-udf-bdr-2.60-nero         |  1 +
31b890
 .../blkid/low-probe-udf-cd-mkudfiso-20100208  |  1 +
31b890
 tests/expected/blkid/low-probe-udf-cd-nero-6  |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.0.0-1   |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.0.0-2   |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.3-1     |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.3-2     |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.3-3     |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.3-4     |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.3-5     |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.3-6     |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.3-7     |  1 +
31b890
 .../blkid/low-probe-udf-hdd-mkudffs-1.3-8     |  1 +
31b890
 .../blkid/low-probe-udf-hdd-udfclient-0.7.5   |  1 +
31b890
 .../blkid/low-probe-udf-hdd-udfclient-0.7.7   |  1 +
31b890
 tests/expected/blkid/low-probe-udf-hdd-win7   |  1 +
31b890
 tests/expected/blkid/low-probe-ufs            |  1 +
31b890
 tests/expected/blkid/low-probe-xfs            |  1 +
31b890
 tests/expected/blkid/low-probe-zfs            |  1 +
31b890
 72 files changed, 186 insertions(+), 21 deletions(-)
31b890
31b890
diff --git a/libblkid/src/superblocks/befs.c b/libblkid/src/superblocks/befs.c
31b890
index 14af97217..516d80093 100644
31b890
--- a/libblkid/src/superblocks/befs.c
31b890
+++ b/libblkid/src/superblocks/befs.c
31b890
@@ -519,6 +519,9 @@ static int probe_befs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 		blkid_probe_sprintf_uuid(pr, (unsigned char *) &volume_id,
31b890
 					sizeof(volume_id), "%016" PRIx64,
31b890
 					FS64_TO_CPU(volume_id, fs_le));
31b890
+
31b890
+	blkid_probe_set_block_size(pr, block_size);
31b890
+
31b890
 	return BLKID_PROBE_OK;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/btrfs.c b/libblkid/src/superblocks/btrfs.c
31b890
index 7ce3dfff8..f0fde700d 100644
31b890
--- a/libblkid/src/superblocks/btrfs.c
31b890
+++ b/libblkid/src/superblocks/btrfs.c
31b890
@@ -74,6 +74,7 @@ static int probe_btrfs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 
31b890
 	blkid_probe_set_uuid(pr, bfs->fsid);
31b890
 	blkid_probe_set_uuid_as(pr, bfs->dev_item.uuid, "UUID_SUB");
31b890
+	blkid_probe_set_block_size(pr, le32_to_cpu(bfs->sectorsize));
31b890
 
31b890
 	return 0;
31b890
 }
31b890
diff --git a/libblkid/src/superblocks/exfat.c b/libblkid/src/superblocks/exfat.c
31b890
index 4bf92eac8..7622320d3 100644
31b890
--- a/libblkid/src/superblocks/exfat.c
31b890
+++ b/libblkid/src/superblocks/exfat.c
31b890
@@ -137,6 +137,8 @@ static int probe_exfat(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 	blkid_probe_sprintf_version(pr, "%u.%u",
31b890
 			sb->version.vermaj, sb->version.vermin);
31b890
 
31b890
+	blkid_probe_set_block_size(pr, BLOCK_SIZE(sb));
31b890
+
31b890
 	return BLKID_PROBE_OK;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/exfs.c b/libblkid/src/superblocks/exfs.c
31b890
index f717b6530..e0eafafc6 100644
31b890
--- a/libblkid/src/superblocks/exfs.c
31b890
+++ b/libblkid/src/superblocks/exfs.c
31b890
@@ -170,7 +170,11 @@ static int probe_exfs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 	if (*xs->sb_fname != '\0')
31b890
 		blkid_probe_set_label(pr, (unsigned char *) xs->sb_fname,
31b890
 				sizeof(xs->sb_fname));
31b890
+
31b890
 	blkid_probe_set_uuid(pr, xs->sb_uuid);
31b890
+
31b890
+	blkid_probe_set_block_size(pr, be32_to_cpu(xs->sb_blocksize));
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/ext.c b/libblkid/src/superblocks/ext.c
31b890
index caf82c171..3870522fa 100644
31b890
--- a/libblkid/src/superblocks/ext.c
31b890
+++ b/libblkid/src/superblocks/ext.c
31b890
@@ -187,6 +187,9 @@ static void ext_get_info(blkid_probe pr, int ver, struct ext2_super_block *es)
31b890
 	blkid_probe_sprintf_version(pr, "%u.%u",
31b890
 		le32_to_cpu(es->s_rev_level),
31b890
 		le16_to_cpu(es->s_minor_rev_level));
31b890
+
31b890
+	if (le32_to_cpu(es->s_log_block_size) < 32)
31b890
+		blkid_probe_set_block_size(pr, 1024U << le32_to_cpu(es->s_log_block_size));
31b890
 }
31b890
 
31b890
 
31b890
diff --git a/libblkid/src/superblocks/f2fs.c b/libblkid/src/superblocks/f2fs.c
31b890
index d1bf25a3a..255ef6384 100644
31b890
--- a/libblkid/src/superblocks/f2fs.c
31b890
+++ b/libblkid/src/superblocks/f2fs.c
31b890
@@ -78,6 +78,8 @@ static int probe_f2fs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 
31b890
 	blkid_probe_set_uuid(pr, sb->uuid);
31b890
 	blkid_probe_sprintf_version(pr, "%u.%u", vermaj, vermin);
31b890
+	if (le32_to_cpu(sb->log_blocksize) < 32)
31b890
+		blkid_probe_set_block_size(pr, 1U << le32_to_cpu(sb->log_blocksize));
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/gfs.c b/libblkid/src/superblocks/gfs.c
31b890
index ea6036cb7..e22a6a3f9 100644
31b890
--- a/libblkid/src/superblocks/gfs.c
31b890
+++ b/libblkid/src/superblocks/gfs.c
31b890
@@ -98,6 +98,7 @@ static int probe_gfs2(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 				sizeof(sbd->sb_locktable));
31b890
 		blkid_probe_set_uuid(pr, sbd->sb_uuid);
31b890
 		blkid_probe_set_version(pr, "1");
31b890
+		blkid_probe_set_block_size(pr, be32_to_cpu(sbd->sb_bsize));
31b890
 		return 0;
31b890
 	}
31b890
 	return 1;
31b890
diff --git a/libblkid/src/superblocks/hfs.c b/libblkid/src/superblocks/hfs.c
31b890
index 7b0117405..185c42c92 100644
31b890
--- a/libblkid/src/superblocks/hfs.c
31b890
+++ b/libblkid/src/superblocks/hfs.c
31b890
@@ -241,6 +241,8 @@ static int probe_hfsplus(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 	if (blocksize < HFSPLUS_SECTOR_SIZE)
31b890
 		return 1;
31b890
 
31b890
+	blkid_probe_set_block_size(pr, blocksize);
31b890
+
31b890
 	memcpy(extents, hfsplus->cat_file.extents, sizeof(extents));
31b890
 	cat_block = be32_to_cpu(extents[0].start_block);
31b890
 
31b890
diff --git a/libblkid/src/superblocks/hpfs.c b/libblkid/src/superblocks/hpfs.c
31b890
index 0565d370c..dcf4520b6 100644
31b890
--- a/libblkid/src/superblocks/hpfs.c
31b890
+++ b/libblkid/src/superblocks/hpfs.c
31b890
@@ -99,6 +99,7 @@ static int probe_hpfs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 				hbb->vol_serno[1], hbb->vol_serno[0]);
31b890
 	}
31b890
 	blkid_probe_sprintf_version(pr, "%u", version);
31b890
+	blkid_probe_set_block_size(pr, 512);
31b890
 
31b890
 	return 0;
31b890
 }
31b890
diff --git a/libblkid/src/superblocks/iso9660.c b/libblkid/src/superblocks/iso9660.c
31b890
index 7356754ee..8dc2e5394 100644
31b890
--- a/libblkid/src/superblocks/iso9660.c
31b890
+++ b/libblkid/src/superblocks/iso9660.c
31b890
@@ -182,6 +182,8 @@ static int probe_iso9660(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 
31b890
 	memcpy(label, iso->volume_id, sizeof(label));
31b890
 
31b890
+	blkid_probe_set_block_size(pr, 2048);
31b890
+
31b890
 	if (!is_str_empty(iso->system_id, sizeof(iso->system_id)))
31b890
 		blkid_probe_set_id_label(pr, "SYSTEM_ID",
31b890
 				iso->system_id, sizeof(iso->system_id));
31b890
diff --git a/libblkid/src/superblocks/jfs.c b/libblkid/src/superblocks/jfs.c
31b890
index 0f956ef00..3de8c2e3d 100644
31b890
--- a/libblkid/src/superblocks/jfs.c
31b890
+++ b/libblkid/src/superblocks/jfs.c
31b890
@@ -52,6 +52,7 @@ static int probe_jfs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 	if (*((char *) js->js_label) != '\0')
31b890
 		blkid_probe_set_label(pr, js->js_label, sizeof(js->js_label));
31b890
 	blkid_probe_set_uuid(pr, js->js_uuid);
31b890
+	blkid_probe_set_block_size(pr, le32_to_cpu(js->js_bsize));
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/minix.c b/libblkid/src/superblocks/minix.c
31b890
index c47378d73..674a1f17b 100644
31b890
--- a/libblkid/src/superblocks/minix.c
31b890
+++ b/libblkid/src/superblocks/minix.c
31b890
@@ -80,6 +80,7 @@ static int probe_minix(blkid_probe pr,
31b890
 	unsigned long zones, ninodes, imaps, zmaps;
31b890
 	off_t firstz;
31b890
 	size_t zone_size;
31b890
+	unsigned block_size;
31b890
 
31b890
 	data = blkid_probe_get_buffer(pr, 1024,
31b890
 			max(sizeof(struct minix_super_block),
31b890
@@ -103,6 +104,7 @@ static int probe_minix(blkid_probe pr,
31b890
 		zmaps   = minix_swab16(swabme, sb->s_zmap_blocks);
31b890
 		firstz  = minix_swab16(swabme, sb->s_firstdatazone);
31b890
 		zone_size = sb->s_log_zone_size;
31b890
+		block_size = 1024;
31b890
 		break;
31b890
 	}
31b890
 	case 3: {
31b890
@@ -114,6 +116,8 @@ static int probe_minix(blkid_probe pr,
31b890
 		zmaps   = minix_swab16(swabme, sb->s_zmap_blocks);
31b890
 		firstz  = minix_swab16(swabme, sb->s_firstdatazone);
31b890
 		zone_size = sb->s_log_zone_size;
31b890
+		block_size = minix_swab16(swabme, sb->s_blocksize);
31b890
+
31b890
 		break;
31b890
 	}
31b890
 	default:
31b890
@@ -143,6 +147,7 @@ static int probe_minix(blkid_probe pr,
31b890
 		return 1;
31b890
 
31b890
 	blkid_probe_sprintf_version(pr, "%d", version);
31b890
+	blkid_probe_set_block_size(pr, block_size);
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/nilfs.c b/libblkid/src/superblocks/nilfs.c
31b890
index 95538ef7b..423bd1ac4 100644
31b890
--- a/libblkid/src/superblocks/nilfs.c
31b890
+++ b/libblkid/src/superblocks/nilfs.c
31b890
@@ -157,6 +157,9 @@ static int probe_nilfs2(blkid_probe pr,
31b890
 				(unsigned char *) &sb->s_magic))
31b890
 		return 1;
31b890
 
31b890
+	if (le32_to_cpu(sb->s_log_block_size) < 32)
31b890
+		blkid_probe_set_block_size(pr, 1024U << le32_to_cpu(sb->s_log_block_size));
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/ntfs.c b/libblkid/src/superblocks/ntfs.c
31b890
index 32973095b..5bfebbb78 100644
31b890
--- a/libblkid/src/superblocks/ntfs.c
31b890
+++ b/libblkid/src/superblocks/ntfs.c
31b890
@@ -206,6 +206,8 @@ static int probe_ntfs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 		attr_off += attr_len;
31b890
 	}
31b890
 
31b890
+	blkid_probe_set_block_size(pr, sector_size);
31b890
+
31b890
 	blkid_probe_sprintf_uuid(pr,
31b890
 			(unsigned char *) &ns->volume_serial,
31b890
 			sizeof(ns->volume_serial),
31b890
diff --git a/libblkid/src/superblocks/ocfs.c b/libblkid/src/superblocks/ocfs.c
31b890
index 3fe199d3f..463ed7bcf 100644
31b890
--- a/libblkid/src/superblocks/ocfs.c
31b890
+++ b/libblkid/src/superblocks/ocfs.c
31b890
@@ -153,6 +153,9 @@ static int probe_ocfs2(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 		le16_to_cpu(osb->s_major_rev_level),
31b890
 		le16_to_cpu(osb->s_minor_rev_level));
31b890
 
31b890
+	if (le32_to_cpu(osb->s_blocksize_bits) < 32)
31b890
+		blkid_probe_set_block_size(pr, 1U << le32_to_cpu(osb->s_blocksize_bits));
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/reiserfs.c b/libblkid/src/superblocks/reiserfs.c
31b890
index edbaaa946..6c5e5b0d7 100644
31b890
--- a/libblkid/src/superblocks/reiserfs.c
31b890
+++ b/libblkid/src/superblocks/reiserfs.c
31b890
@@ -32,7 +32,8 @@ struct reiserfs_super_block {
31b890
 
31b890
 struct reiser4_super_block {
31b890
 	unsigned char	rs4_magic[16];
31b890
-	uint16_t	rs4_dummy[2];
31b890
+	uint8_t		rs4_dummy[3];
31b890
+	uint8_t		rs4_blocksize;
31b890
 	unsigned char	rs4_uuid[16];
31b890
 	unsigned char	rs4_label[16];
31b890
 	uint64_t	rs4_dummy2;
31b890
@@ -73,22 +74,29 @@ static int probe_reiser(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 	else
31b890
 		blkid_probe_set_version(pr, "3.5");
31b890
 
31b890
+	blkid_probe_set_block_size(pr, blocksize);
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
 static int probe_reiser4(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 {
31b890
 	struct reiser4_super_block *rs4;
31b890
+	unsigned int blocksize;
31b890
 
31b890
 	rs4 = blkid_probe_get_sb(pr, mag, struct reiser4_super_block);
31b890
 	if (!rs4)
31b890
 		return errno ? -errno : 1;
31b890
 
31b890
+	blocksize = rs4->rs4_blocksize * 256;
31b890
+
31b890
 	if (*rs4->rs4_label)
31b890
 		blkid_probe_set_label(pr, rs4->rs4_label, sizeof(rs4->rs4_label));
31b890
 	blkid_probe_set_uuid(pr, rs4->rs4_uuid);
31b890
 	blkid_probe_set_version(pr, "4");
31b890
 
31b890
+	blkid_probe_set_block_size(pr, blocksize);
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/romfs.c b/libblkid/src/superblocks/romfs.c
31b890
index f3e9f8b05..1c2ac4315 100644
31b890
--- a/libblkid/src/superblocks/romfs.c
31b890
+++ b/libblkid/src/superblocks/romfs.c
31b890
@@ -34,6 +34,9 @@ static int probe_romfs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 	if (*((char *) ros->ros_volume) != '\0')
31b890
 		blkid_probe_set_label(pr, ros->ros_volume,
31b890
 				sizeof(ros->ros_volume));
31b890
+
31b890
+	blkid_probe_set_block_size(pr, 1024);
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/squashfs.c b/libblkid/src/superblocks/squashfs.c
31b890
index 7364beca2..4db842493 100644
31b890
--- a/libblkid/src/superblocks/squashfs.c
31b890
+++ b/libblkid/src/superblocks/squashfs.c
31b890
@@ -71,6 +71,8 @@ static int probe_squashfs3(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 
31b890
 	blkid_probe_sprintf_version(pr, "%u.%u", vermaj, vermin);
31b890
 
31b890
+	blkid_probe_set_block_size(pr, 1024);
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c
31b890
index 6dfd2be64..a86a055fe 100644
31b890
--- a/libblkid/src/superblocks/superblocks.c
31b890
+++ b/libblkid/src/superblocks/superblocks.c
31b890
@@ -74,6 +74,8 @@
31b890
  * @APPLICATION_ID: ISO9660 application identifier
31b890
  *
31b890
  * @BOOT_SYSTEM_ID: ISO9660 boot system identifier
31b890
+ *
31b890
+ * @BLOCK_SIZE: block size
31b890
  */
31b890
 
31b890
 static int superblocks_probe(blkid_probe pr, struct blkid_chain *chn);
31b890
@@ -550,6 +552,11 @@ int blkid_probe_sprintf_version(blkid_probe pr, const char *fmt, ...)
31b890
 	return rc;
31b890
 }
31b890
 
31b890
+int blkid_probe_set_block_size(blkid_probe pr, unsigned block_size)
31b890
+{
31b890
+	return blkid_probe_sprintf_value(pr, "BLOCK_SIZE", "%u", block_size);
31b890
+}
31b890
+
31b890
 static int blkid_probe_set_usage(blkid_probe pr, int usage)
31b890
 {
31b890
 	struct blkid_chain *chn = blkid_probe_get_chain(pr);
31b890
diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h
31b890
index d677f85bc..d09046cfd 100644
31b890
--- a/libblkid/src/superblocks/superblocks.h
31b890
+++ b/libblkid/src/superblocks/superblocks.h
31b890
@@ -106,6 +106,8 @@ extern int blkid_probe_set_id_label(blkid_probe pr, const char *name,
31b890
 extern int blkid_probe_set_utf8_id_label(blkid_probe pr, const char *name,
31b890
 			     unsigned char *data, size_t len, int enc);
31b890
 
31b890
+int blkid_probe_set_block_size(blkid_probe pr, unsigned block_size);
31b890
+
31b890
 extern int blkid_probe_is_bitlocker(blkid_probe pr);
31b890
 
31b890
 #endif /* _BLKID_SUPERBLOCKS_H */
31b890
diff --git a/libblkid/src/superblocks/udf.c b/libblkid/src/superblocks/udf.c
31b890
index 97e79dab0..1ab8a1e26 100644
31b890
--- a/libblkid/src/superblocks/udf.c
31b890
+++ b/libblkid/src/superblocks/udf.c
31b890
@@ -464,6 +464,8 @@ real_blksz:
31b890
 		 * E.g. number 0x0150 is revision 1.50, number 0x0201 is revision 2.01. */
31b890
 		blkid_probe_sprintf_version(pr, "%x.%02x", (unsigned int)(udf_rev >> 8), (unsigned int)(udf_rev & 0xFF));
31b890
 
31b890
+	blkid_probe_set_block_size(pr, bs);
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/ufs.c b/libblkid/src/superblocks/ufs.c
31b890
index 6ef2acddc..7a8396c1c 100644
31b890
--- a/libblkid/src/superblocks/ufs.c
31b890
+++ b/libblkid/src/superblocks/ufs.c
31b890
@@ -233,6 +233,11 @@ found:
31b890
 			(unsigned char *) &ufs->fs_magic))
31b890
 		return 1;
31b890
 
31b890
+	if (!is_be)
31b890
+		blkid_probe_set_block_size(pr, le32_to_cpu(ufs->fs_fsize));
31b890
+	else
31b890
+		blkid_probe_set_block_size(pr, be32_to_cpu(ufs->fs_fsize));
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/vfat.c b/libblkid/src/superblocks/vfat.c
31b890
index 29b3c501c..4e93a0e41 100644
31b890
--- a/libblkid/src/superblocks/vfat.c
31b890
+++ b/libblkid/src/superblocks/vfat.c
31b890
@@ -436,6 +436,8 @@ static int probe_vfat(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 	if (version)
31b890
 		blkid_probe_set_version(pr, version);
31b890
 
31b890
+	blkid_probe_set_block_size(pr, sector_size);
31b890
+
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/vxfs.c b/libblkid/src/superblocks/vxfs.c
31b890
index 19d284cbf..d9d26adcf 100644
31b890
--- a/libblkid/src/superblocks/vxfs.c
31b890
+++ b/libblkid/src/superblocks/vxfs.c
31b890
@@ -12,6 +12,15 @@
31b890
 struct vxfs_super_block {
31b890
 	uint32_t		vs_magic;
31b890
 	int32_t			vs_version;
31b890
+	uint32_t		vs_ctime;
31b890
+	uint32_t		vs_cutime;
31b890
+	uint32_t		__unused1;
31b890
+	uint32_t		__unused2;
31b890
+	uint32_t		vs_old_logstart;
31b890
+	uint32_t		vs_old_logend;
31b890
+	uint32_t		vs_bsize;
31b890
+	uint32_t		vs_size;
31b890
+	uint32_t		vs_dsize;
31b890
 };
31b890
 
31b890
 static int probe_vxfs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
@@ -22,7 +31,13 @@ static int probe_vxfs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 	if (!vxs)
31b890
 		return errno ? -errno : 1;
31b890
 
31b890
-	blkid_probe_sprintf_version(pr, "%u", (unsigned int) vxs->vs_version);
31b890
+	if (le32_to_cpu(vxs->vs_magic) == 0xa501fcf5) {
31b890
+		blkid_probe_sprintf_version(pr, "%u", (unsigned int)le32_to_cpu(vxs->vs_version));
31b890
+		blkid_probe_set_block_size(pr, le32_to_cpu(vxs->vs_bsize));
31b890
+	} else if (be32_to_cpu(vxs->vs_magic) == 0xa501fcf5) {
31b890
+		blkid_probe_sprintf_version(pr, "%u", (unsigned int)be32_to_cpu(vxs->vs_version));
31b890
+		blkid_probe_set_block_size(pr, be32_to_cpu(vxs->vs_bsize));
31b890
+	}
31b890
 	return 0;
31b890
 }
31b890
 
31b890
@@ -35,6 +50,7 @@ const struct blkid_idinfo vxfs_idinfo =
31b890
 	.magics		=
31b890
 	{
31b890
 		{ .magic = "\365\374\001\245", .len = 4, .kboff = 1 },
31b890
+		{ .magic = "\245\001\374\365", .len = 4, .kboff = 8 },
31b890
 		{ NULL }
31b890
 	}
31b890
 };
31b890
diff --git a/libblkid/src/superblocks/xfs.c b/libblkid/src/superblocks/xfs.c
31b890
index 99848f900..eb513ac3e 100644
31b890
--- a/libblkid/src/superblocks/xfs.c
31b890
+++ b/libblkid/src/superblocks/xfs.c
31b890
@@ -173,6 +173,7 @@ static int probe_xfs(blkid_probe pr, const struct blkid_idmag *mag)
31b890
 		blkid_probe_set_label(pr, (unsigned char *) xs->sb_fname,
31b890
 				sizeof(xs->sb_fname));
31b890
 	blkid_probe_set_uuid(pr, xs->sb_uuid);
31b890
+	blkid_probe_set_block_size(pr, xs->sb_sectsize * 256);
31b890
 	return 0;
31b890
 }
31b890
 
31b890
diff --git a/libblkid/src/superblocks/zfs.c b/libblkid/src/superblocks/zfs.c
31b890
index ec3e1c5bf..cc779c02a 100644
31b890
--- a/libblkid/src/superblocks/zfs.c
31b890
+++ b/libblkid/src/superblocks/zfs.c
31b890
@@ -37,6 +37,7 @@ struct zfs_uberblock {
31b890
 
31b890
 #define DATA_TYPE_UINT64 8
31b890
 #define DATA_TYPE_STRING 9
31b890
+#define DATA_TYPE_DIRECTORY 19
31b890
 
31b890
 struct nvpair {
31b890
 	uint32_t	nvp_size;
31b890
@@ -60,32 +61,37 @@ struct nvuint64 {
31b890
 	uint64_t	nvu_value;
31b890
 };
31b890
 
31b890
+struct nvdirectory {
31b890
+	uint32_t	nvd_type;
31b890
+	uint32_t	nvd_unknown[3];
31b890
+};
31b890
+
31b890
 struct nvlist {
31b890
 	uint32_t	nvl_unknown[3];
31b890
 	struct nvpair	nvl_nvpair;
31b890
 };
31b890
 
31b890
-static int zfs_process_value(blkid_probe pr, char *name, size_t namelen,
31b890
-			     void *value, size_t max_value_size)
31b890
+static void zfs_process_value(blkid_probe pr, char *name, size_t namelen,
31b890
+			     void *value, size_t max_value_size, unsigned directory_level)
31b890
 {
31b890
 	if (strncmp(name, "name", namelen) == 0 &&
31b890
-	    sizeof(struct nvstring) <= max_value_size) {
31b890
+	    sizeof(struct nvstring) <= max_value_size &&
31b890
+	    !directory_level) {
31b890
 		struct nvstring *nvs = value;
31b890
 		uint32_t nvs_type = be32_to_cpu(nvs->nvs_type);
31b890
 		uint32_t nvs_strlen = be32_to_cpu(nvs->nvs_strlen);
31b890
 
31b890
 		if (nvs_type != DATA_TYPE_STRING ||
31b890
 		    (uint64_t)nvs_strlen + sizeof(*nvs) > max_value_size)
31b890
-			return 0;
31b890
+			return;
31b890
 
31b890
 		DBG(LOWPROBE, ul_debug("nvstring: type %u string %*s\n",
31b890
 				       nvs_type, nvs_strlen, nvs->nvs_string));
31b890
 
31b890
 		blkid_probe_set_label(pr, nvs->nvs_string, nvs_strlen);
31b890
-
31b890
-		return 1;
31b890
 	} else if (strncmp(name, "guid", namelen) == 0 &&
31b890
-		   sizeof(struct nvuint64) <= max_value_size) {
31b890
+		   sizeof(struct nvuint64) <= max_value_size &&
31b890
+		   !directory_level) {
31b890
 		struct nvuint64 *nvu = value;
31b890
 		uint32_t nvu_type = be32_to_cpu(nvu->nvu_type);
31b890
 		uint64_t nvu_value;
31b890
@@ -94,17 +100,16 @@ static int zfs_process_value(blkid_probe pr, char *name, size_t namelen,
31b890
 		nvu_value = be64_to_cpu(nvu_value);
31b890
 
31b890
 		if (nvu_type != DATA_TYPE_UINT64)
31b890
-			return 0;
31b890
+			return;
31b890
 
31b890
 		DBG(LOWPROBE, ul_debug("nvuint64: type %u value %"PRIu64"\n",
31b890
 				       nvu_type, nvu_value));
31b890
 
31b890
 		blkid_probe_sprintf_value(pr, "UUID_SUB",
31b890
 					  "%"PRIu64, nvu_value);
31b890
-
31b890
-		return 1;
31b890
 	} else if (strncmp(name, "pool_guid", namelen) == 0 &&
31b890
-		   sizeof(struct nvuint64) <= max_value_size) {
31b890
+		   sizeof(struct nvuint64) <= max_value_size &&
31b890
+		   !directory_level) {
31b890
 		struct nvuint64 *nvu = value;
31b890
 		uint32_t nvu_type = be32_to_cpu(nvu->nvu_type);
31b890
 		uint64_t nvu_value;
31b890
@@ -113,7 +118,7 @@ static int zfs_process_value(blkid_probe pr, char *name, size_t namelen,
31b890
 		nvu_value = be64_to_cpu(nvu_value);
31b890
 
31b890
 		if (nvu_type != DATA_TYPE_UINT64)
31b890
-			return 0;
31b890
+			return;
31b890
 
31b890
 		DBG(LOWPROBE, ul_debug("nvuint64: type %u value %"PRIu64"\n",
31b890
 				       nvu_type, nvu_value));
31b890
@@ -121,10 +126,21 @@ static int zfs_process_value(blkid_probe pr, char *name, size_t namelen,
31b890
 		blkid_probe_sprintf_uuid(pr, (unsigned char *) &nvu_value,
31b890
 					 sizeof(nvu_value),
31b890
 					 "%"PRIu64, nvu_value);
31b890
-		return 1;
31b890
-	}
31b890
+	} else if (strncmp(name, "ashift", namelen) == 0 &&
31b890
+		   sizeof(struct nvuint64) <= max_value_size) {
31b890
+		struct nvuint64 *nvu = value;
31b890
+		uint32_t nvu_type = be32_to_cpu(nvu->nvu_type);
31b890
+		uint64_t nvu_value;
31b890
 
31b890
-	return 0;
31b890
+		memcpy(&nvu_value, &nvu->nvu_value, sizeof(nvu_value));
31b890
+		nvu_value = be64_to_cpu(nvu_value);
31b890
+
31b890
+		if (nvu_type != DATA_TYPE_UINT64)
31b890
+			return;
31b890
+
31b890
+		if (nvu_value < 32)
31b890
+			blkid_probe_set_block_size(pr, 1U << nvu_value);
31b890
+	}
31b890
 }
31b890
 
31b890
 static void zfs_extract_guid_name(blkid_probe pr, loff_t offset)
31b890
@@ -133,7 +149,7 @@ static void zfs_extract_guid_name(blkid_probe pr, loff_t offset)
31b890
 	struct nvlist *nvl;
31b890
 	struct nvpair *nvp;
31b890
 	size_t left = 4096;
31b890
-	int found = 0;
31b890
+	unsigned directory_level = 0;
31b890
 
31b890
 	offset = (offset & ~(VDEV_LABEL_SIZE - 1)) + VDEV_LABEL_NVPAIR;
31b890
 
31b890
@@ -152,13 +168,21 @@ static void zfs_extract_guid_name(blkid_probe pr, loff_t offset)
31b890
 	nvp = &nvl->nvl_nvpair;
31b890
 	left -= (unsigned char *)nvp - p; /* Already used up 12 bytes */
31b890
 
31b890
-	while (left > sizeof(*nvp) && nvp->nvp_size != 0 && found < 3) {
31b890
+	while (left > sizeof(*nvp)) {
31b890
 		uint32_t nvp_size = be32_to_cpu(nvp->nvp_size);
31b890
 		uint32_t nvp_namelen = be32_to_cpu(nvp->nvp_namelen);
31b890
 		uint64_t namesize = ((uint64_t)nvp_namelen + 3) & ~3;
31b890
 		size_t max_value_size;
31b890
 		void *value;
31b890
 
31b890
+		if (!nvp->nvp_size) {
31b890
+			if (!directory_level)
31b890
+				break;
31b890
+			directory_level--;
31b890
+			nvp_size = 8;
31b890
+			goto cont;
31b890
+		}
31b890
+
31b890
 		DBG(LOWPROBE, ul_debug("left %zd nvp_size %u\n",
31b890
 				       left, nvp_size));
31b890
 
31b890
@@ -174,9 +198,21 @@ static void zfs_extract_guid_name(blkid_probe pr, loff_t offset)
31b890
 		max_value_size = nvp_size - (namesize + sizeof(*nvp));
31b890
 		value = nvp->nvp_name + namesize;
31b890
 
31b890
-		found += zfs_process_value(pr, nvp->nvp_name, nvp_namelen,
31b890
-					   value, max_value_size);
31b890
+		if (sizeof(struct nvdirectory) <= max_value_size) {
31b890
+			struct nvdirectory *nvu = value;
31b890
+			if (be32_to_cpu(nvu->nvd_type) == DATA_TYPE_DIRECTORY) {
31b890
+				nvp_size = sizeof(*nvp) + namesize + sizeof(*nvu);
31b890
+				directory_level++;
31b890
+				goto cont;
31b890
+			}
31b890
+		}
31b890
+
31b890
+		zfs_process_value(pr, nvp->nvp_name, nvp_namelen,
31b890
+				  value, max_value_size, directory_level);
31b890
 
31b890
+cont:
31b890
+		if (nvp_size > left)
31b890
+			break;
31b890
 		left -= nvp_size;
31b890
 
31b890
 		nvp = (struct nvpair *)((char *)nvp + nvp_size);
31b890
diff --git a/tests/expected/blkid/low-probe-befs b/tests/expected/blkid/low-probe-befs
31b890
index b7f25cdd2..5717049d2 100644
31b890
--- a/tests/expected/blkid/low-probe-befs
31b890
+++ b/tests/expected/blkid/low-probe-befs
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=1024
31b890
 ID_FS_LABEL=befs_test
31b890
 ID_FS_LABEL_ENC=befs_test
31b890
 ID_FS_TYPE=befs
31b890
diff --git a/tests/expected/blkid/low-probe-exfat b/tests/expected/blkid/low-probe-exfat
31b890
index b9defbdf9..59cb35225 100644
31b890
--- a/tests/expected/blkid/low-probe-exfat
31b890
+++ b/tests/expected/blkid/low-probe-exfat
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=Новый_том
31b890
 ID_FS_LABEL_ENC=Новый\x20том
31b890
 ID_FS_TYPE=exfat
31b890
diff --git a/tests/expected/blkid/low-probe-ext2 b/tests/expected/blkid/low-probe-ext2
31b890
index c70b85698..087da97a4 100644
31b890
--- a/tests/expected/blkid/low-probe-ext2
31b890
+++ b/tests/expected/blkid/low-probe-ext2
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=1024
31b890
 ID_FS_LABEL=test-ext2
31b890
 ID_FS_LABEL_ENC=test-ext2
31b890
 ID_FS_TYPE=ext2
31b890
diff --git a/tests/expected/blkid/low-probe-ext3 b/tests/expected/blkid/low-probe-ext3
31b890
index 4bac43f57..8684884c1 100644
31b890
--- a/tests/expected/blkid/low-probe-ext3
31b890
+++ b/tests/expected/blkid/low-probe-ext3
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=1024
31b890
 ID_FS_LABEL=test-ext3
31b890
 ID_FS_LABEL_ENC=test-ext3
31b890
 ID_FS_SEC_TYPE=ext2
31b890
diff --git a/tests/expected/blkid/low-probe-f2fs b/tests/expected/blkid/low-probe-f2fs
31b890
index ee328640e..272905125 100644
31b890
--- a/tests/expected/blkid/low-probe-f2fs
31b890
+++ b/tests/expected/blkid/low-probe-f2fs
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=4096
31b890
 ID_FS_LABEL=test-f2fs
31b890
 ID_FS_LABEL_ENC=test-f2fs
31b890
 ID_FS_TYPE=f2fs
31b890
diff --git a/tests/expected/blkid/low-probe-fat b/tests/expected/blkid/low-probe-fat
31b890
index 420121117..75f99434d 100644
31b890
--- a/tests/expected/blkid/low-probe-fat
31b890
+++ b/tests/expected/blkid/low-probe-fat
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=TEST-FAT
31b890
 ID_FS_LABEL_ENC=TEST-FAT
31b890
 ID_FS_SEC_TYPE=msdos
31b890
diff --git a/tests/expected/blkid/low-probe-fat16_noheads b/tests/expected/blkid/low-probe-fat16_noheads
31b890
index ba47078d2..ff9ef2e69 100644
31b890
--- a/tests/expected/blkid/low-probe-fat16_noheads
31b890
+++ b/tests/expected/blkid/low-probe-fat16_noheads
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=VTech_1070
31b890
 ID_FS_LABEL_ENC=VTech\x201070
31b890
 ID_FS_SEC_TYPE=msdos
31b890
diff --git a/tests/expected/blkid/low-probe-fat32_cp850_O_tilde b/tests/expected/blkid/low-probe-fat32_cp850_O_tilde
31b890
index 096bcbf2c..9ce58e3d9 100644
31b890
--- a/tests/expected/blkid/low-probe-fat32_cp850_O_tilde
31b890
+++ b/tests/expected/blkid/low-probe-fat32_cp850_O_tilde
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=___
31b890
 ID_FS_LABEL_ENC=\xe5\xe5\xe5
31b890
 ID_FS_TYPE=vfat
31b890
diff --git a/tests/expected/blkid/low-probe-fat32_label_64MB b/tests/expected/blkid/low-probe-fat32_label_64MB
31b890
index 1179490cf..4a99f8ff6 100644
31b890
--- a/tests/expected/blkid/low-probe-fat32_label_64MB
31b890
+++ b/tests/expected/blkid/low-probe-fat32_label_64MB
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=BINGO
31b890
 ID_FS_LABEL_ENC=BINGO
31b890
 ID_FS_TYPE=vfat
31b890
diff --git a/tests/expected/blkid/low-probe-gfs2 b/tests/expected/blkid/low-probe-gfs2
31b890
index cd5a664b4..f04529bc0 100644
31b890
--- a/tests/expected/blkid/low-probe-gfs2
31b890
+++ b/tests/expected/blkid/low-probe-gfs2
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=4096
31b890
 ID_FS_LABEL=mycluster:mygfs2
31b890
 ID_FS_LABEL_ENC=mycluster:mygfs2
31b890
 ID_FS_TYPE=gfs2
31b890
diff --git a/tests/expected/blkid/low-probe-hfsplus b/tests/expected/blkid/low-probe-hfsplus
31b890
index f54b59f11..cc351a042 100644
31b890
--- a/tests/expected/blkid/low-probe-hfsplus
31b890
+++ b/tests/expected/blkid/low-probe-hfsplus
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=4096
31b890
 ID_FS_LABEL=123456789ABCDE
31b890
 ID_FS_LABEL_ENC=123456789ABCDE
31b890
 ID_FS_TYPE=hfsplus
31b890
diff --git a/tests/expected/blkid/low-probe-hpfs b/tests/expected/blkid/low-probe-hpfs
31b890
index 47ae1af28..7e4a12b97 100644
31b890
--- a/tests/expected/blkid/low-probe-hpfs
31b890
+++ b/tests/expected/blkid/low-probe-hpfs
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=P01_S16A
31b890
 ID_FS_LABEL_ENC=P01\x20S16A
31b890
 ID_FS_TYPE=hpfs
31b890
diff --git a/tests/expected/blkid/low-probe-iso b/tests/expected/blkid/low-probe-iso
31b890
index af9908aaa..082f0742a 100644
31b890
--- a/tests/expected/blkid/low-probe-iso
31b890
+++ b/tests/expected/blkid/low-probe-iso
31b890
@@ -1,4 +1,5 @@
31b890
 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
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_LABEL=IsoVolumeName
31b890
 ID_FS_LABEL_ENC=IsoVolumeName
31b890
 ID_FS_SYSTEM_ID=LINUX
31b890
diff --git a/tests/expected/blkid/low-probe-iso-joliet b/tests/expected/blkid/low-probe-iso-joliet
31b890
index 0229a0d2c..06f529d03 100644
31b890
--- a/tests/expected/blkid/low-probe-iso-joliet
31b890
+++ b/tests/expected/blkid/low-probe-iso-joliet
31b890
@@ -1,4 +1,5 @@
31b890
 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
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_LABEL=ThisWonderfulLabelIsVeryVeryLong
31b890
 ID_FS_LABEL_ENC=ThisWonderfulLabelIsVeryVeryLong
31b890
 ID_FS_SYSTEM_ID=LINUX
31b890
diff --git a/tests/expected/blkid/low-probe-iso-rr-joliet b/tests/expected/blkid/low-probe-iso-rr-joliet
31b890
index 14d550e90..bb3274db3 100644
31b890
--- a/tests/expected/blkid/low-probe-iso-rr-joliet
31b890
+++ b/tests/expected/blkid/low-probe-iso-rr-joliet
31b890
@@ -1,4 +1,5 @@
31b890
 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
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_LABEL=ThisIsVolumeName
31b890
 ID_FS_LABEL_ENC=ThisIsVolumeName
31b890
 ID_FS_SYSTEM_ID=LINUX
31b890
diff --git a/tests/expected/blkid/low-probe-jbd b/tests/expected/blkid/low-probe-jbd
31b890
index 8dbcdbce0..c9f9f6b79 100644
31b890
--- a/tests/expected/blkid/low-probe-jbd
31b890
+++ b/tests/expected/blkid/low-probe-jbd
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=1024
31b890
 ID_FS_LOGUUID=0d7a07df-7b06-4829-bce7-3b9c3ece570c
31b890
 ID_FS_TYPE=jbd
31b890
 ID_FS_USAGE=other
31b890
diff --git a/tests/expected/blkid/low-probe-jfs b/tests/expected/blkid/low-probe-jfs
31b890
index 877fd168e..ac7d31bac 100644
31b890
--- a/tests/expected/blkid/low-probe-jfs
31b890
+++ b/tests/expected/blkid/low-probe-jfs
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=4096
31b890
 ID_FS_LABEL=test-jfs
31b890
 ID_FS_LABEL_ENC=test-jfs
31b890
 ID_FS_TYPE=jfs
31b890
diff --git a/tests/expected/blkid/low-probe-minix-BE b/tests/expected/blkid/low-probe-minix-BE
31b890
index 9627799a3..f73f1b5db 100644
31b890
--- a/tests/expected/blkid/low-probe-minix-BE
31b890
+++ b/tests/expected/blkid/low-probe-minix-BE
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=1024
31b890
 ID_FS_TYPE=minix
31b890
 ID_FS_USAGE=filesystem
31b890
 ID_FS_VERSION=1
31b890
diff --git a/tests/expected/blkid/low-probe-minix-LE b/tests/expected/blkid/low-probe-minix-LE
31b890
index 9627799a3..f73f1b5db 100644
31b890
--- a/tests/expected/blkid/low-probe-minix-LE
31b890
+++ b/tests/expected/blkid/low-probe-minix-LE
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=1024
31b890
 ID_FS_TYPE=minix
31b890
 ID_FS_USAGE=filesystem
31b890
 ID_FS_VERSION=1
31b890
diff --git a/tests/expected/blkid/low-probe-nilfs2 b/tests/expected/blkid/low-probe-nilfs2
31b890
index c6c9cab17..ff27e0b23 100644
31b890
--- a/tests/expected/blkid/low-probe-nilfs2
31b890
+++ b/tests/expected/blkid/low-probe-nilfs2
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=4096
31b890
 ID_FS_LABEL=test-nilfs2
31b890
 ID_FS_LABEL_ENC=test-nilfs2
31b890
 ID_FS_TYPE=nilfs2
31b890
diff --git a/tests/expected/blkid/low-probe-ntfs b/tests/expected/blkid/low-probe-ntfs
31b890
index aaaa077da..790157aaa 100644
31b890
--- a/tests/expected/blkid/low-probe-ntfs
31b890
+++ b/tests/expected/blkid/low-probe-ntfs
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=Новый_том
31b890
 ID_FS_LABEL_ENC=Новый\x20том
31b890
 ID_FS_TYPE=ntfs
31b890
diff --git a/tests/expected/blkid/low-probe-ocfs2 b/tests/expected/blkid/low-probe-ocfs2
31b890
index 2328d21a0..9b84dbe67 100644
31b890
--- a/tests/expected/blkid/low-probe-ocfs2
31b890
+++ b/tests/expected/blkid/low-probe-ocfs2
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=1024
31b890
 ID_FS_LABEL=test-ocfs2
31b890
 ID_FS_LABEL_ENC=test-ocfs2
31b890
 ID_FS_TYPE=ocfs2
31b890
diff --git a/tests/expected/blkid/low-probe-reiser3 b/tests/expected/blkid/low-probe-reiser3
31b890
index d376ecae1..1c4b1478d 100644
31b890
--- a/tests/expected/blkid/low-probe-reiser3
31b890
+++ b/tests/expected/blkid/low-probe-reiser3
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=4096
31b890
 ID_FS_LABEL=TESTREISER
31b890
 ID_FS_LABEL_ENC=TESTREISER
31b890
 ID_FS_TYPE=reiserfs
31b890
diff --git a/tests/expected/blkid/low-probe-reiser4 b/tests/expected/blkid/low-probe-reiser4
31b890
index 65d63aa65..66df064fd 100644
31b890
--- a/tests/expected/blkid/low-probe-reiser4
31b890
+++ b/tests/expected/blkid/low-probe-reiser4
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=4096
31b890
 ID_FS_LABEL=TESTR4
31b890
 ID_FS_LABEL_ENC=TESTR4
31b890
 ID_FS_TYPE=reiser4
31b890
diff --git a/tests/expected/blkid/low-probe-romfs b/tests/expected/blkid/low-probe-romfs
31b890
index 2eb982bc1..b56a6b881 100644
31b890
--- a/tests/expected/blkid/low-probe-romfs
31b890
+++ b/tests/expected/blkid/low-probe-romfs
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=1024
31b890
 ID_FS_LABEL=test-romfs
31b890
 ID_FS_LABEL_ENC=test-romfs
31b890
 ID_FS_TYPE=romfs
31b890
diff --git a/tests/expected/blkid/low-probe-small-fat32 b/tests/expected/blkid/low-probe-small-fat32
31b890
index 39239e6b3..5dba03ec3 100644
31b890
--- a/tests/expected/blkid/low-probe-small-fat32
31b890
+++ b/tests/expected/blkid/low-probe-small-fat32
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=TESTVFAT
31b890
 ID_FS_LABEL_ENC=TESTVFAT
31b890
 ID_FS_TYPE=vfat
31b890
diff --git a/tests/expected/blkid/low-probe-udf b/tests/expected/blkid/low-probe-udf
31b890
index 902fb82f0..869a335db 100644
31b890
--- a/tests/expected/blkid/low-probe-udf
31b890
+++ b/tests/expected/blkid/low-probe-udf
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_LABEL=test-udf
31b890
 ID_FS_LABEL_ENC=test-udf
31b890
 ID_FS_LOGICAL_VOLUME_ID=test-udf
31b890
diff --git a/tests/expected/blkid/low-probe-udf-bdr-2.60-nero b/tests/expected/blkid/low-probe-udf-bdr-2.60-nero
31b890
index c0b8867b5..fcf29b112 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-bdr-2.60-nero
31b890
+++ b/tests/expected/blkid/low-probe-udf-bdr-2.60-nero
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_LABEL=Label
31b890
 ID_FS_LABEL_ENC=Label
31b890
 ID_FS_LOGICAL_VOLUME_ID=Label
31b890
diff --git a/tests/expected/blkid/low-probe-udf-cd-mkudfiso-20100208 b/tests/expected/blkid/low-probe-udf-cd-mkudfiso-20100208
31b890
index f57dee08b..768d0d2f0 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-cd-mkudfiso-20100208
31b890
+++ b/tests/expected/blkid/low-probe-udf-cd-mkudfiso-20100208
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_LABEL=Volume_Label
31b890
 ID_FS_LABEL_ENC=Volume\x20Label
31b890
 ID_FS_LOGICAL_VOLUME_ID=Volume Label
31b890
diff --git a/tests/expected/blkid/low-probe-udf-cd-nero-6 b/tests/expected/blkid/low-probe-udf-cd-nero-6
31b890
index cf85ea9c5..41f9ff509 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-cd-nero-6
31b890
+++ b/tests/expected/blkid/low-probe-udf-cd-nero-6
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_LABEL=UDF_Label
31b890
 ID_FS_LABEL_ENC=UDF\x20Label
31b890
 ID_FS_LOGICAL_VOLUME_ID=UDF Label
31b890
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
31b890
index 5446aec42..e26b2da0c 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-1
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-1
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=LinuxUDF
31b890
 ID_FS_LABEL_ENC=LinuxUDF
31b890
 ID_FS_LOGICAL_VOLUME_ID=LinuxUDF
31b890
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
31b890
index b72fcac72..112768353 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-2
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.0.0-2
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=Label
31b890
 ID_FS_LABEL_ENC=Label
31b890
 ID_FS_LOGICAL_VOLUME_ID=Label
31b890
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
31b890
index 20f148549..db9127d34 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-1
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-1
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=Label
31b890
 ID_FS_LABEL_ENC=Label
31b890
 ID_FS_LOGICAL_VOLUME_ID=Label
31b890
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
31b890
index 34a2f49e3..f472284f3 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-2
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-2
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_LABEL=Label
31b890
 ID_FS_LABEL_ENC=Label
31b890
 ID_FS_LOGICAL_VOLUME_ID=Label
31b890
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
31b890
index 3fef2b3c6..6f4802ca0 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-3
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-3
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_LABEL=ÿ
31b890
 ID_FS_LABEL_ENC=ÿ
31b890
 ID_FS_LOGICAL_VOLUME_ID=ÿ
31b890
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
31b890
index 28cd73603..0ae5b910e 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-4
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-4
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=1024
31b890
 ID_FS_LABEL=Label
31b890
 ID_FS_LABEL_ENC=Label
31b890
 ID_FS_LOGICAL_VOLUME_ID=Label
31b890
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
31b890
index d84ae8964..1b98c21ed 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-5
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-5
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=4096
31b890
 ID_FS_LABEL=Label
31b890
 ID_FS_LABEL_ENC=Label
31b890
 ID_FS_LOGICAL_VOLUME_ID=Label
31b890
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
31b890
index d73914970..c22c96b0a 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-6
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-6
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
31b890
 ID_FS_LABEL_ENC=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
31b890
 ID_FS_LOGICAL_VOLUME_ID=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
31b890
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
31b890
index a78606eea..c3b9d8a8a 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-7
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-7
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=4096
31b890
 ID_FS_LABEL=Label4096
31b890
 ID_FS_LABEL_ENC=Label4096
31b890
 ID_FS_LOGICAL_VOLUME_ID=Label4096
31b890
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
31b890
index 448c8f90b..58c131f7d 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-8
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-mkudffs-1.3-8
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=LinuxUDF
31b890
 ID_FS_LABEL_ENC=LinuxUDF
31b890
 ID_FS_LOGICAL_VOLUME_ID=LinuxUDF
31b890
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
31b890
index b33c814d6..18930cead 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.5
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.5
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=discname
31b890
 ID_FS_LABEL_ENC=discname
31b890
 ID_FS_LOGICAL_VOLUME_ID=discname
31b890
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
31b890
index a47bd3f12..13e984167 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.7
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-udfclient-0.7.7
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=discname
31b890
 ID_FS_LABEL_ENC=discname
31b890
 ID_FS_LOGICAL_VOLUME_ID=discname
31b890
diff --git a/tests/expected/blkid/low-probe-udf-hdd-win7 b/tests/expected/blkid/low-probe-udf-hdd-win7
31b890
index 759c8db3d..e68f180e5 100644
31b890
--- a/tests/expected/blkid/low-probe-udf-hdd-win7
31b890
+++ b/tests/expected/blkid/low-probe-udf-hdd-win7
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=My_volume_label
31b890
 ID_FS_LABEL_ENC=My\x20volume\x20label
31b890
 ID_FS_LOGICAL_VOLUME_ID=My volume label
31b890
diff --git a/tests/expected/blkid/low-probe-ufs b/tests/expected/blkid/low-probe-ufs
31b890
index 96828d73e..256f065d2 100644
31b890
--- a/tests/expected/blkid/low-probe-ufs
31b890
+++ b/tests/expected/blkid/low-probe-ufs
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=2048
31b890
 ID_FS_TYPE=ufs
31b890
 ID_FS_USAGE=filesystem
31b890
 ID_FS_UUID=4b0e640aec56ac70
31b890
diff --git a/tests/expected/blkid/low-probe-xfs b/tests/expected/blkid/low-probe-xfs
31b890
index f21d881a5..6eb1b4600 100644
31b890
--- a/tests/expected/blkid/low-probe-xfs
31b890
+++ b/tests/expected/blkid/low-probe-xfs
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=test-xfs
31b890
 ID_FS_LABEL_ENC=test-xfs
31b890
 ID_FS_TYPE=xfs
31b890
diff --git a/tests/expected/blkid/low-probe-zfs b/tests/expected/blkid/low-probe-zfs
31b890
index 952e0e591..0e7af2866 100644
31b890
--- a/tests/expected/blkid/low-probe-zfs
31b890
+++ b/tests/expected/blkid/low-probe-zfs
31b890
@@ -1,3 +1,4 @@
31b890
+ID_FS_BLOCK_SIZE=512
31b890
 ID_FS_LABEL=tank
31b890
 ID_FS_LABEL_ENC=tank
31b890
 ID_FS_TYPE=zfs_member
31b890
-- 
31b890
2.25.4
31b890