From cdea4c5e891f29ce3926f8b25a70e799ad70c289 Mon Sep 17 00:00:00 2001 From: Hidetoshi Shimokawa Date: Tue, 7 Aug 2007 12:42:03 +0000 Subject: Use ioctl() to get correct media size so that we can locate ZFS labels in the tail of the media. Approved by: re (kensmith), pjd --- cddl/contrib/opensolaris/cmd/zdb/zdb.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'cddl') diff --git a/cddl/contrib/opensolaris/cmd/zdb/zdb.c b/cddl/contrib/opensolaris/cmd/zdb/zdb.c index 03abc3a60e4f..2dc459dfabf0 100644 --- a/cddl/contrib/opensolaris/cmd/zdb/zdb.c +++ b/cddl/contrib/opensolaris/cmd/zdb/zdb.c @@ -1136,7 +1136,15 @@ dump_label(const char *dev) exit(1); } - psize = statbuf.st_size; + if (S_ISCHR(statbuf.st_mode)) { + if (ioctl(fd, DIOCGMEDIASIZE, &psize) != 0) { + (void) printf("failed to get size '%s': %s\n", dev, + strerror(errno)); + exit(1); + } + } else + psize = statbuf.st_size; + psize = P2ALIGN(psize, (uint64_t)sizeof (vdev_label_t)); for (l = 0; l < VDEV_LABELS; l++) { -- cgit v1.2.3