Lines Matching +full:uuid +full:- +full:dev
1 // SPDX-License-Identifier: CDDL-1.0
10 * or https://opensource.org/licenses/CDDL-1.0.
34 #include <uuid/uuid.h>
49 struct uuid uuid; member
147 * Return a 32-bit CRC of the contents of the buffer. Pre-and-post
167 return (-1); in read_disk_info()
170 return (-1); in read_disk_info()
207 * to parse it out of the /dev/<disk><partition> block device name. in efi_get_info()
209 * populates /dev/ so it may be trusted. The tricky bit here is in efi_get_info()
219 if ((strncmp(dev_path, "/dev/sd", 7) == 0)) { in efi_get_info()
220 strcpy(dki_info->dki_cname, "sd"); in efi_get_info()
221 dki_info->dki_ctype = DKC_SCSI_CCS; in efi_get_info()
222 rval = sscanf(dev_path, "/dev/%[a-zA-Z]%hu", in efi_get_info()
223 dki_info->dki_dname, in efi_get_info()
224 &dki_info->dki_partition); in efi_get_info()
225 } else if ((strncmp(dev_path, "/dev/hd", 7) == 0)) { in efi_get_info()
226 strcpy(dki_info->dki_cname, "hd"); in efi_get_info()
227 dki_info->dki_ctype = DKC_DIRECT; in efi_get_info()
228 rval = sscanf(dev_path, "/dev/%[a-zA-Z]%hu", in efi_get_info()
229 dki_info->dki_dname, in efi_get_info()
230 &dki_info->dki_partition); in efi_get_info()
231 } else if ((strncmp(dev_path, "/dev/md", 7) == 0)) { in efi_get_info()
232 strcpy(dki_info->dki_cname, "pseudo"); in efi_get_info()
233 dki_info->dki_ctype = DKC_MD; in efi_get_info()
234 strcpy(dki_info->dki_dname, "md"); in efi_get_info()
235 rval = sscanf(dev_path, "/dev/md%[0-9]p%hu", in efi_get_info()
236 dki_info->dki_dname + 2, in efi_get_info()
237 &dki_info->dki_partition); in efi_get_info()
238 } else if ((strncmp(dev_path, "/dev/vd", 7) == 0)) { in efi_get_info()
239 strcpy(dki_info->dki_cname, "vd"); in efi_get_info()
240 dki_info->dki_ctype = DKC_MD; in efi_get_info()
241 rval = sscanf(dev_path, "/dev/%[a-zA-Z]%hu", in efi_get_info()
242 dki_info->dki_dname, in efi_get_info()
243 &dki_info->dki_partition); in efi_get_info()
244 } else if ((strncmp(dev_path, "/dev/xvd", 8) == 0)) { in efi_get_info()
245 strcpy(dki_info->dki_cname, "xvd"); in efi_get_info()
246 dki_info->dki_ctype = DKC_MD; in efi_get_info()
247 rval = sscanf(dev_path, "/dev/%[a-zA-Z]%hu", in efi_get_info()
248 dki_info->dki_dname, in efi_get_info()
249 &dki_info->dki_partition); in efi_get_info()
250 } else if ((strncmp(dev_path, "/dev/zd", 7) == 0)) { in efi_get_info()
251 strcpy(dki_info->dki_cname, "zd"); in efi_get_info()
252 dki_info->dki_ctype = DKC_MD; in efi_get_info()
253 strcpy(dki_info->dki_dname, "zd"); in efi_get_info()
254 rval = sscanf(dev_path, "/dev/zd%[0-9]p%hu", in efi_get_info()
255 dki_info->dki_dname + 2, in efi_get_info()
256 &dki_info->dki_partition); in efi_get_info()
257 } else if ((strncmp(dev_path, "/dev/dm-", 8) == 0)) { in efi_get_info()
258 strcpy(dki_info->dki_cname, "pseudo"); in efi_get_info()
259 dki_info->dki_ctype = DKC_VBD; in efi_get_info()
260 strcpy(dki_info->dki_dname, "dm-"); in efi_get_info()
261 rval = sscanf(dev_path, "/dev/dm-%[0-9]p%hu", in efi_get_info()
262 dki_info->dki_dname + 3, in efi_get_info()
263 &dki_info->dki_partition); in efi_get_info()
264 } else if ((strncmp(dev_path, "/dev/ram", 8) == 0)) { in efi_get_info()
265 strcpy(dki_info->dki_cname, "pseudo"); in efi_get_info()
266 dki_info->dki_ctype = DKC_PCMCIA_MEM; in efi_get_info()
267 strcpy(dki_info->dki_dname, "ram"); in efi_get_info()
268 rval = sscanf(dev_path, "/dev/ram%[0-9]p%hu", in efi_get_info()
269 dki_info->dki_dname + 3, in efi_get_info()
270 &dki_info->dki_partition); in efi_get_info()
271 } else if ((strncmp(dev_path, "/dev/loop", 9) == 0)) { in efi_get_info()
272 strcpy(dki_info->dki_cname, "pseudo"); in efi_get_info()
273 dki_info->dki_ctype = DKC_VBD; in efi_get_info()
274 strcpy(dki_info->dki_dname, "loop"); in efi_get_info()
275 rval = sscanf(dev_path, "/dev/loop%[0-9]p%hu", in efi_get_info()
276 dki_info->dki_dname + 4, in efi_get_info()
277 &dki_info->dki_partition); in efi_get_info()
278 } else if ((strncmp(dev_path, "/dev/nvme", 9) == 0)) { in efi_get_info()
279 strcpy(dki_info->dki_cname, "nvme"); in efi_get_info()
280 dki_info->dki_ctype = DKC_SCSI_CCS; in efi_get_info()
281 strcpy(dki_info->dki_dname, "nvme"); in efi_get_info()
282 (void) sscanf(dev_path, "/dev/nvme%[0-9]", in efi_get_info()
283 dki_info->dki_dname + 4); in efi_get_info()
285 dki_info->dki_dname); in efi_get_info()
286 strcpy(dki_info->dki_dname + controller_length, in efi_get_info()
289 "/dev/nvme%*[0-9]n%[0-9]p%hu", in efi_get_info()
290 dki_info->dki_dname + controller_length + 1, in efi_get_info()
291 &dki_info->dki_partition); in efi_get_info()
293 strcpy(dki_info->dki_dname, "unknown"); in efi_get_info()
294 strcpy(dki_info->dki_cname, "unknown"); in efi_get_info()
295 dki_info->dki_ctype = DKC_UNKNOWN; in efi_get_info()
303 dki_info->dki_partition = 0; in efi_get_info()
328 ((l) - 1)) / (l)))
329 /* number of partitions -- limited by what we can malloc */
330 #define MAX_PARTS ((4294967295UL - sizeof (struct dk_gpt)) / \
341 struct uuid uuid; in efi_alloc_and_init() local
345 return (-1); in efi_alloc_and_init()
348 return (-1); in efi_alloc_and_init()
351 return (-1); in efi_alloc_and_init()
356 return (-1); in efi_alloc_and_init()
370 return (-1); in efi_alloc_and_init()
374 sizeof (struct dk_part) * (nparts - 1); in efi_alloc_and_init()
378 return (-1); in efi_alloc_and_init()
382 vptr->efi_version = EFI_VERSION_CURRENT; in efi_alloc_and_init()
383 vptr->efi_lbasize = lbsize; in efi_alloc_and_init()
384 vptr->efi_nparts = nparts; in efi_alloc_and_init()
390 vptr->efi_first_u_lba = nblocks + 1; in efi_alloc_and_init()
391 vptr->efi_last_lba = capacity - 1; in efi_alloc_and_init()
392 vptr->efi_altern_lba = capacity -1; in efi_alloc_and_init()
393 vptr->efi_last_u_lba = vptr->efi_last_lba - nblocks; in efi_alloc_and_init()
395 (void) uuid_generate((uchar_t *)&uuid); in efi_alloc_and_init()
396 UUID_LE_CONVERT(vptr->efi_disk_uguid, uuid); in efi_alloc_and_init()
401 * Read EFI - return partition number upon success.
414 (int) sizeof (struct dk_part) * (nparts - 1); in efi_alloc_and_read()
420 vptr->efi_nparts = nparts; in efi_alloc_and_read()
423 if ((rval == VT_EINVAL) && vptr->efi_nparts > nparts) { in efi_alloc_and_read()
426 (int) sizeof (struct dk_part) * (vptr->efi_nparts - 1); in efi_alloc_and_read()
428 /* cppcheck-suppress doubleFree */ in efi_alloc_and_read()
455 void *data = dk_ioc->dki_data; in efi_ioctl()
464 if (read_disk_info(fd, &capacity, &lbsize) == -1) { in efi_ioctl()
469 return (-1); in efi_ioctl()
482 error = lseek(fd, dk_ioc->dki_lba * lbsize, SEEK_SET); in efi_ioctl()
483 if (error == -1) { in efi_ioctl()
490 error = read(fd, data, dk_ioc->dki_length); in efi_ioctl()
491 if (error == -1) { in efi_ioctl()
498 if (error != dk_ioc->dki_length) { in efi_ioctl()
503 return (-1); in efi_ioctl()
514 return (-1); in efi_ioctl()
517 error = lseek(fd, dk_ioc->dki_lba * lbsize, SEEK_SET); in efi_ioctl()
518 if (error == -1) { in efi_ioctl()
525 error = write(fd, data, dk_ioc->dki_length); in efi_ioctl()
526 if (error == -1) { in efi_ioctl()
533 if (error != dk_ioc->dki_length) { in efi_ioctl()
538 return (-1); in efi_ioctl()
543 if (error == -1) in efi_ioctl()
547 if (ioctl(fd, BLKFLSBUF, 0) == -1) in efi_ioctl()
558 return (-1); in efi_ioctl()
571 if ((--retry == 0) || (errno != EBUSY)) { in efi_rescan()
574 return (-1); in efi_rescan()
588 if (efi_ioctl(fd, DKIOCGETEFI, dk_ioc) == -1) { in check_label()
596 efi = dk_ioc->dki_data; in check_label()
597 if (efi->efi_gpt_Signature != LE_64(EFI_SIGNATURE)) { in check_label()
601 (long long)efi->efi_gpt_Signature, in check_label()
610 crc = efi->efi_gpt_HeaderCRC32; in check_label()
611 efi->efi_gpt_HeaderCRC32 = 0; in check_label()
612 len_t headerSize = (len_t)LE_32(efi->efi_gpt_HeaderSize); in check_label()
621 if ((headerSize > dk_ioc->dki_length) || in check_label()
671 if (read_disk_info(fd, &capacity, &lbsize) == -1) { in efi_read()
695 if (NBLOCKS(vtoc->efi_nparts, disk_info.dki_lbsize) < 34) { in efi_read()
698 label_len = vtoc->efi_nparts * (int) sizeof (efi_gpe_t) + in efi_read()
703 label_len &= ~(disk_info.dki_lbsize - 1); in efi_read()
713 user_length = vtoc->efi_nparts; in efi_read()
717 if (efi_ioctl(fd, DKIOCGETEFI, &dk_ioc) == -1) { in efi_read()
741 dk_ioc.dki_lba = disk_info.dki_capacity - 2; in efi_read()
749 dk_ioc.dki_lba = disk_info.dki_capacity - 1; in efi_read()
768 dk_ioc.dki_lba = LE_64(efi->efi_gpt_PartitionEntryLBA); in efi_read()
769 vtoc->efi_flags |= EFI_GPT_PRIMARY_CORRUPT; in efi_read()
770 vtoc->efi_nparts = in efi_read()
771 LE_32(efi->efi_gpt_NumberOfPartitionEntries); in efi_read()
784 dk_ioc.dki_length = disk_info.dki_capacity - 1 - in efi_read()
787 dk_ioc.dki_length = disk_info.dki_capacity - 2 - in efi_read()
791 ((len_t)label_len - sizeof (*dk_ioc.dki_data))) { in efi_read()
803 dk_ioc.dki_lba = LE_64(efi->efi_gpt_PartitionEntryLBA); in efi_read()
807 dk_ioc.dki_length = label_len - disk_info.dki_lbsize; in efi_read()
831 /* LINTED -- always longlong aligned */ in efi_read()
838 vtoc->efi_version = LE_32(efi->efi_gpt_Revision); in efi_read()
839 vtoc->efi_nparts = LE_32(efi->efi_gpt_NumberOfPartitionEntries); in efi_read()
840 vtoc->efi_part_size = LE_32(efi->efi_gpt_SizeOfPartitionEntry); in efi_read()
841 vtoc->efi_lbasize = disk_info.dki_lbsize; in efi_read()
842 vtoc->efi_last_lba = disk_info.dki_capacity - 1; in efi_read()
843 vtoc->efi_first_u_lba = LE_64(efi->efi_gpt_FirstUsableLBA); in efi_read()
844 vtoc->efi_last_u_lba = LE_64(efi->efi_gpt_LastUsableLBA); in efi_read()
845 vtoc->efi_altern_lba = LE_64(efi->efi_gpt_AlternateLBA); in efi_read()
846 UUID_LE_CONVERT(vtoc->efi_disk_uguid, efi->efi_gpt_DiskGUID); in efi_read()
852 if (user_length < vtoc->efi_nparts) { in efi_read()
856 for (i = 0; i < vtoc->efi_nparts; i++) { in efi_read()
857 UUID_LE_CONVERT(vtoc->efi_parts[i].p_guid, in efi_read()
864 if (memcmp(&vtoc->efi_parts[i].p_guid, in efi_read()
865 &conversion_array[j].uuid, in efi_read()
866 sizeof (struct uuid)) == 0) { in efi_read()
867 vtoc->efi_parts[i].p_tag = j; in efi_read()
871 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) in efi_read()
873 vtoc->efi_parts[i].p_flag = in efi_read()
875 vtoc->efi_parts[i].p_start = in efi_read()
877 vtoc->efi_parts[i].p_size = in efi_read()
878 LE_64(efi_parts[i].efi_gpe_EndingLBA) - in efi_read()
879 vtoc->efi_parts[i].p_start + 1; in efi_read()
881 vtoc->efi_parts[i].p_name[j] = in efi_read()
886 UUID_LE_CONVERT(vtoc->efi_parts[i].p_uguid, in efi_read()
905 len = (vtoc->efi_lbasize == 0) ? sizeof (mb) : vtoc->efi_lbasize; in write_pmbr()
916 /* LINTED -- always longlong aligned */ in write_pmbr()
918 if (efi_ioctl(fd, DKIOCGETEFI, &dk_ioc) == -1) { in write_pmbr()
949 size_in_lba = vtoc->efi_last_lba; in write_pmbr()
963 /* LINTED -- always longlong aligned */ in write_pmbr()
967 if (efi_ioctl(fd, DKIOCSETEFI, &dk_ioc) == -1) { in write_pmbr()
986 int resv_part = -1; in check_input()
991 * Sanity-check the input (make sure no partitions overlap) in check_input()
993 for (i = 0; i < vtoc->efi_nparts; i++) { in check_input()
995 if ((vtoc->efi_parts[i].p_tag == V_UNASSIGNED) && in check_input()
996 (vtoc->efi_parts[i].p_size != 0)) { in check_input()
1000 i, vtoc->efi_parts[i].p_size); in check_input()
1004 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) { in check_input()
1005 if (uuid_is_null((uchar_t *)&vtoc->efi_parts[i].p_guid)) in check_input()
1007 /* we have encountered an unknown uuid */ in check_input()
1008 vtoc->efi_parts[i].p_tag = 0xff; in check_input()
1010 if (vtoc->efi_parts[i].p_tag == V_RESERVED) { in check_input()
1011 if (resv_part != -1) { in check_input()
1021 if ((vtoc->efi_parts[i].p_start < vtoc->efi_first_u_lba) || in check_input()
1022 (vtoc->efi_parts[i].p_start > vtoc->efi_last_u_lba)) { in check_input()
1027 vtoc->efi_parts[i].p_start); in check_input()
1030 vtoc->efi_first_u_lba, in check_input()
1031 vtoc->efi_last_u_lba); in check_input()
1035 if ((vtoc->efi_parts[i].p_start + in check_input()
1036 vtoc->efi_parts[i].p_size < in check_input()
1037 vtoc->efi_first_u_lba) || in check_input()
1038 (vtoc->efi_parts[i].p_start + in check_input()
1039 vtoc->efi_parts[i].p_size > in check_input()
1040 vtoc->efi_last_u_lba + 1)) { in check_input()
1045 vtoc->efi_parts[i].p_start + in check_input()
1046 vtoc->efi_parts[i].p_size); in check_input()
1049 vtoc->efi_first_u_lba, in check_input()
1050 vtoc->efi_last_u_lba); in check_input()
1055 for (j = 0; j < vtoc->efi_nparts; j++) { in check_input()
1056 isize = vtoc->efi_parts[i].p_size; in check_input()
1057 jsize = vtoc->efi_parts[j].p_size; in check_input()
1058 istart = vtoc->efi_parts[i].p_start; in check_input()
1059 jstart = vtoc->efi_parts[j].p_start; in check_input()
1061 endsect = jstart + jsize -1; in check_input()
1075 if ((resv_part == -1) && efi_debug) { in check_input()
1099 snprintf(linux_part.devname, BLKPG_DEVNAMELTH - 1, "%s%u", path, pno); in call_blkpg_ioctl()
1100 linux_part.devname[BLKPG_DEVNAMELTH - 1] = '\0'; in call_blkpg_ioctl()
1134 * Find the last physically non-zero partition. in efi_use_whole_disk()
1137 for (i = 0; i < efi_label->efi_nparts; i ++) { in efi_use_whole_disk()
1138 if (resv_start < efi_label->efi_parts[i].p_start) { in efi_use_whole_disk()
1139 resv_start = efi_label->efi_parts[i].p_start; in efi_use_whole_disk()
1145 * Find the last physically non-zero partition before that. in efi_use_whole_disk()
1149 if (data_start < efi_label->efi_parts[i].p_start) { in efi_use_whole_disk()
1150 data_start = efi_label->efi_parts[i].p_start; in efi_use_whole_disk()
1154 data_size = efi_label->efi_parts[data_index].p_size; in efi_use_whole_disk()
1160 nblocks = efi_label->efi_first_u_lba - 1; in efi_use_whole_disk()
1179 limit = P2ALIGN_TYPED(efi_label->efi_last_lba - nblocks - in efi_use_whole_disk()
1192 if ((efi_label->efi_altern_lba == 1) || (efi_label->efi_altern_lba in efi_use_whole_disk()
1193 >= efi_label->efi_last_lba && !sync_needed)) { in efi_use_whole_disk()
1208 if ((efi_label->efi_parts[resv_index].p_size != EFI_MIN_RESV_SIZE) || in efi_use_whole_disk()
1209 (efi_label->efi_parts[resv_index].p_tag != V_RESERVED) || in efi_use_whole_disk()
1243 difference = limit - resv_start; in efi_use_whole_disk()
1254 efi_label->efi_parts[data_index].p_size += difference; in efi_use_whole_disk()
1255 efi_label->efi_parts[resv_index].p_start += difference; in efi_use_whole_disk()
1256 efi_label->efi_last_u_lba = efi_label->efi_last_lba - nblocks; in efi_use_whole_disk()
1284 efi_label->efi_parts[data_index].p_start * efi_label->efi_lbasize, in efi_use_whole_disk()
1285 efi_label->efi_parts[data_index].p_size * efi_label->efi_lbasize, in efi_use_whole_disk()
1292 * of the reserve partition and re-create it. in efi_use_whole_disk()
1294 efi_label->efi_parts[resv_index].p_start -= difference; in efi_use_whole_disk()
1298 * Re-add the reserved partition. If we've expanded the data partition in efi_use_whole_disk()
1301 * location. Note that we do this as best-effort and ignore any in efi_use_whole_disk()
1306 efi_label->efi_parts[resv_index].p_start * efi_label->efi_lbasize, in efi_use_whole_disk()
1307 efi_label->efi_parts[resv_index].p_size * efi_label->efi_lbasize, in efi_use_whole_disk()
1363 if (NBLOCKS(vtoc->efi_nparts, vtoc->efi_lbasize) < 34) { in efi_write()
1364 dk_ioc.dki_length = EFI_MIN_ARRAY_SIZE + vtoc->efi_lbasize; in efi_write()
1366 dk_ioc.dki_length = (len_t)NBLOCKS(vtoc->efi_nparts, in efi_write()
1367 vtoc->efi_lbasize) * in efi_write()
1368 vtoc->efi_lbasize; in efi_write()
1374 nblocks = dk_ioc.dki_length / vtoc->efi_lbasize - 1; in efi_write()
1381 lba_backup_gpt_hdr = vtoc->efi_last_u_lba + 1 + nblocks; in efi_write()
1383 vtoc->efi_lbasize, dk_ioc.dki_length)) in efi_write()
1390 efi->efi_gpt_Signature = LE_64(EFI_SIGNATURE); in efi_write()
1391 efi->efi_gpt_Revision = LE_32(vtoc->efi_version); /* 0x02000100 */ in efi_write()
1392 efi->efi_gpt_HeaderSize = LE_32(sizeof (struct efi_gpt) - LEN_EFI_PAD); in efi_write()
1393 efi->efi_gpt_Reserved1 = 0; in efi_write()
1394 efi->efi_gpt_MyLBA = LE_64(1ULL); in efi_write()
1395 efi->efi_gpt_AlternateLBA = LE_64(lba_backup_gpt_hdr); in efi_write()
1396 efi->efi_gpt_FirstUsableLBA = LE_64(vtoc->efi_first_u_lba); in efi_write()
1397 efi->efi_gpt_LastUsableLBA = LE_64(vtoc->efi_last_u_lba); in efi_write()
1398 efi->efi_gpt_PartitionEntryLBA = LE_64(2ULL); in efi_write()
1399 efi->efi_gpt_NumberOfPartitionEntries = LE_32(vtoc->efi_nparts); in efi_write()
1400 efi->efi_gpt_SizeOfPartitionEntry = LE_32(sizeof (struct efi_gpe)); in efi_write()
1401 UUID_LE_CONVERT(efi->efi_gpt_DiskGUID, vtoc->efi_disk_uguid); in efi_write()
1403 /* LINTED -- always longlong aligned */ in efi_write()
1404 efi_parts = (efi_gpe_t *)((char *)dk_ioc.dki_data + vtoc->efi_lbasize); in efi_write()
1406 for (i = 0; i < vtoc->efi_nparts; i++) { in efi_write()
1411 if (vtoc->efi_parts[i].p_tag == j) { in efi_write()
1414 conversion_array[j].uuid); in efi_write()
1422 * If we didn't have a matching uuid match, bail here. in efi_write()
1423 * Don't write a label with unknown uuid. in efi_write()
1427 "Unknown uuid for p_tag %d\n", in efi_write()
1428 vtoc->efi_parts[i].p_tag); in efi_write()
1434 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) in efi_write()
1438 LE_64(vtoc->efi_parts[i].p_start); in efi_write()
1440 LE_64(vtoc->efi_parts[i].p_start + in efi_write()
1441 vtoc->efi_parts[i].p_size - 1); in efi_write()
1443 LE_16(vtoc->efi_parts[i].p_flag); in efi_write()
1446 LE_16((ushort_t)vtoc->efi_parts[i].p_name[j]); in efi_write()
1448 if ((vtoc->efi_parts[i].p_tag != V_UNASSIGNED) && in efi_write()
1449 uuid_is_null((uchar_t *)&vtoc->efi_parts[i].p_uguid)) { in efi_write()
1451 &vtoc->efi_parts[i].p_uguid); in efi_write()
1454 &vtoc->efi_parts[i].p_uguid, in efi_write()
1457 efi->efi_gpt_PartitionEntryArrayCRC32 = in efi_write()
1459 vtoc->efi_nparts * (int)sizeof (struct efi_gpe))); in efi_write()
1460 efi->efi_gpt_HeaderCRC32 = in efi_write()
1462 LE_32(efi->efi_gpt_HeaderSize))); in efi_write()
1464 if (efi_ioctl(fd, DKIOCSETEFI, &dk_ioc) == -1) { in efi_write()
1482 dk_ioc.dki_lba = vtoc->efi_last_u_lba + 1; in efi_write()
1483 dk_ioc.dki_length -= vtoc->efi_lbasize; in efi_write()
1486 vtoc->efi_lbasize); in efi_write()
1488 if (efi_ioctl(fd, DKIOCSETEFI, &dk_ioc) == -1) { in efi_write()
1496 vtoc->efi_last_u_lba + 1, in efi_write()
1505 dk_ioc.dki_length = vtoc->efi_lbasize; in efi_write()
1507 dk_ioc.dki_data = (efi_gpt_t *)((char *)dk_ioc.dki_data - in efi_write()
1508 vtoc->efi_lbasize); in efi_write()
1509 efi->efi_gpt_AlternateLBA = LE_64(1ULL); in efi_write()
1510 efi->efi_gpt_MyLBA = LE_64(lba_backup_gpt_hdr); in efi_write()
1511 efi->efi_gpt_PartitionEntryLBA = LE_64(vtoc->efi_last_u_lba + 1); in efi_write()
1512 efi->efi_gpt_HeaderCRC32 = 0; in efi_write()
1513 efi->efi_gpt_HeaderCRC32 = in efi_write()
1515 LE_32(efi->efi_gpt_HeaderSize))); in efi_write()
1517 if (efi_ioctl(fd, DKIOCSETEFI, &dk_ioc) == -1) { in efi_write()
1542 int resv_part = -1; in efi_err_check()
1550 for (i = 0; i < vtoc->efi_nparts; i++) { in efi_err_check()
1552 if ((vtoc->efi_parts[i].p_tag == V_UNASSIGNED) && in efi_err_check()
1553 (vtoc->efi_parts[i].p_size != 0)) { in efi_err_check()
1556 "of %llu\n", i, vtoc->efi_parts[i].p_size); in efi_err_check()
1558 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) { in efi_err_check()
1561 if (vtoc->efi_parts[i].p_tag == V_RESERVED) { in efi_err_check()
1562 if (resv_part != -1) { in efi_err_check()
1568 if (vtoc->efi_parts[i].p_size != EFI_MIN_RESV_SIZE) in efi_err_check()
1573 if ((vtoc->efi_parts[i].p_start < vtoc->efi_first_u_lba) || in efi_err_check()
1574 (vtoc->efi_parts[i].p_start > vtoc->efi_last_u_lba)) { in efi_err_check()
1578 vtoc->efi_parts[i].p_start); in efi_err_check()
1581 vtoc->efi_first_u_lba, in efi_err_check()
1582 vtoc->efi_last_u_lba); in efi_err_check()
1584 if ((vtoc->efi_parts[i].p_start + in efi_err_check()
1585 vtoc->efi_parts[i].p_size < in efi_err_check()
1586 vtoc->efi_first_u_lba) || in efi_err_check()
1587 (vtoc->efi_parts[i].p_start + in efi_err_check()
1588 vtoc->efi_parts[i].p_size > in efi_err_check()
1589 vtoc->efi_last_u_lba + 1)) { in efi_err_check()
1593 vtoc->efi_parts[i].p_start + in efi_err_check()
1594 vtoc->efi_parts[i].p_size); in efi_err_check()
1597 vtoc->efi_first_u_lba, in efi_err_check()
1598 vtoc->efi_last_u_lba); in efi_err_check()
1601 for (j = 0; j < vtoc->efi_nparts; j++) { in efi_err_check()
1602 isize = vtoc->efi_parts[i].p_size; in efi_err_check()
1603 jsize = vtoc->efi_parts[j].p_size; in efi_err_check()
1604 istart = vtoc->efi_parts[i].p_start; in efi_err_check()
1605 jstart = vtoc->efi_parts[j].p_start; in efi_err_check()
1607 endsect = jstart + jsize -1; in efi_err_check()
1624 if (resv_part == -1) { in efi_err_check()