summaryrefslogtreecommitdiffstats
path: root/libblkid/src/superblocks/zfs.c
diff options
context:
space:
mode:
authorKarel Zak2013-04-10 15:13:02 +0200
committerKarel Zak2013-04-10 15:13:02 +0200
commit983a43e08b771c4c51cd869b3e88796c1f201cf8 (patch)
treea7a6253659fc89981935b792f6a97dfd9b443eae /libblkid/src/superblocks/zfs.c
parentbash-completion: add swapoff (diff)
downloadkernel-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.c12
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;