summaryrefslogtreecommitdiff
path: root/usr/src/lib/libefi
diff options
context:
space:
mode:
authoryl194034 <none@none>2006-10-13 00:37:29 -0700
committeryl194034 <none@none>2006-10-13 00:37:29 -0700
commitc7e1889f78c3e1634600b0db1cab1cfa4ca01995 (patch)
treee095a812b6201fd3a57161fc30c743a8497457dc /usr/src/lib/libefi
parent18c2aff776a775d34a4c9893a4c72e0434d68e36 (diff)
downloadillumos-joyent-c7e1889f78c3e1634600b0db1cab1cfa4ca01995.tar.gz
6479646 inuse checking of zpool components by format is no longer working
Diffstat (limited to 'usr/src/lib/libefi')
-rw-r--r--usr/src/lib/libefi/common/rdwr_efi.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/usr/src/lib/libefi/common/rdwr_efi.c b/usr/src/lib/libefi/common/rdwr_efi.c
index d366be1448..0c57001d87 100644
--- a/usr/src/lib/libefi/common/rdwr_efi.c
+++ b/usr/src/lib/libefi/common/rdwr_efi.c
@@ -372,10 +372,11 @@ efi_read(int fd, struct dk_gpt *vtoc)
if ((dk_ioc.dki_data = calloc(label_len, 1)) == NULL)
return (VT_ERROR);
- dk_ioc.dki_length = label_len;
+ dk_ioc.dki_length = disk_info.dki_lbsize;
user_length = vtoc->efi_nparts;
efi = dk_ioc.dki_data;
if (md_flag) {
+ dk_ioc.dki_length = label_len;
if (efi_ioctl(fd, DKIOCGETEFI, &dk_ioc) == -1) {
switch (errno) {
case EIO:
@@ -433,6 +434,11 @@ efi_read(int fd, struct dk_gpt *vtoc)
rval = efi_ioctl(fd, DKIOCGETEFI, &dk_ioc);
}
}
+ } else {
+ dk_ioc.dki_lba = LE_64(efi->efi_gpt_PartitionEntryLBA);
+ dk_ioc.dki_data++;
+ dk_ioc.dki_length = label_len - disk_info.dki_lbsize;
+ rval = efi_ioctl(fd, DKIOCGETEFI, &dk_ioc);
}
if (rval < 0) {
free(efi);
@@ -440,8 +446,7 @@ efi_read(int fd, struct dk_gpt *vtoc)
}
/* LINTED -- always longlong aligned */
- efi_parts = (efi_gpe_t *)(((char *)efi) +
- LE_64(efi->efi_gpt_PartitionEntryLBA) * disk_info.dki_lbsize);
+ efi_parts = (efi_gpe_t *)(((char *)efi) + disk_info.dki_lbsize);
/*
* Assemble this into a "dk_gpt" struct for easier