diff options
author | Karel Zak | 2013-04-10 15:13:02 +0200 |
---|---|---|
committer | Karel Zak | 2013-04-10 15:13:02 +0200 |
commit | 983a43e08b771c4c51cd869b3e88796c1f201cf8 (patch) | |
tree | a7a6253659fc89981935b792f6a97dfd9b443eae /libblkid/src/superblocks/zfs.c | |
parent | bash-completion: add swapoff (diff) | |
download | kernel-qcow2-util-linux-983a43e08b771c4c51cd869b3e88796c1f201cf8.tar.gz kernel-qcow2-util-linux-983a43e08b771c4c51cd869b3e88796c1f201cf8.tar.xz kernel-qcow2-util-linux-983a43e08b771c4c51cd869b3e88796c1f201cf8.zip |
libblkid: fix ZFS superblok offset for SBMAGIC
# wipefs /dev/sdd1
offset type
----------------------------------------------------------------
0x65000 zfs_member [raid]
LABEL: zm1
UUID: 18067835215330778964
and "wipefs -o 0x65000 /dev/sdd1" seems to run in an endless loop.
Reported-by: Helmut Hullen <Hullen@t-online.de>
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libblkid/src/superblocks/zfs.c')
-rw-r--r-- | libblkid/src/superblocks/zfs.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libblkid/src/superblocks/zfs.c b/libblkid/src/superblocks/zfs.c index 04036c471..fb86aec77 100644 --- a/libblkid/src/superblocks/zfs.c +++ b/libblkid/src/superblocks/zfs.c @@ -168,7 +168,7 @@ static int probe_zfs(blkid_probe pr, uint64_t swab_magic = swab64(UBERBLOCK_MAGIC); struct zfs_uberblock *ub; int swab_endian; - loff_t offset; + loff_t offset, ub_offset; int tried; int found; @@ -187,11 +187,15 @@ static int probe_zfs(blkid_probe pr, if (ub == NULL) return -1; - if (ub->ub_magic == UBERBLOCK_MAGIC) + if (ub->ub_magic == UBERBLOCK_MAGIC) { + ub_offset = offset; found++; + } - if ((swab_endian = (ub->ub_magic == swab_magic))) + if ((swab_endian = (ub->ub_magic == swab_magic))) { + ub_offset = offset; found++; + } zdebug("probe_zfs: found %s-endian uberblock at %llu\n", swab_endian ? "big" : "little", offset >> 10); @@ -207,7 +211,7 @@ static int probe_zfs(blkid_probe pr, zfs_extract_guid_name(pr, offset); - if (blkid_probe_set_magic(pr, offset, + if (blkid_probe_set_magic(pr, ub_offset, sizeof(ub->ub_magic), (unsigned char *) &ub->ub_magic)) return -1; |