Lines Matching +full:partition +full:-
1 /*-
57 /* Convert size to a human-readable number. */
87 od = (struct open_disk *)dev->dd.d_opendata; in ptblread()
94 offset *= (od->sectorsize / 512); in ptblread()
96 * As the GPT backup partition is located at the end of the disk, in ptblread()
99 return (dev->dd.d_dev->dv_strategy(dev, F_READ | F_NORA, offset, in ptblread()
100 blocks * od->sectorsize, (char *)buf, NULL)); in ptblread()
116 od = (struct open_disk *)pa->dev->dd.d_opendata; in ptable_print()
117 sectsize = od->sectorsize; in ptable_print()
118 partsize = part->end - part->start + 1; in ptable_print()
119 snprintf(line, sizeof(line), " %s%s: %s", pa->prefix, pname, in ptable_print()
120 parttype2str(part->type)); in ptable_print()
124 if (pa->verbose) { in ptable_print()
138 if (part->type == PART_FREEBSD) { in ptable_print()
140 dev.dd.d_dev = pa->dev->dd.d_dev; in ptable_print()
141 dev.dd.d_unit = pa->dev->dd.d_unit; in ptable_print()
142 dev.d_slice = part->index; in ptable_print()
148 pa->prefix, pname); in ptable_print()
149 bsd.dev = pa->dev; in ptable_print()
151 bsd.verbose = pa->verbose; in ptable_print()
169 od = (struct open_disk *)dev->dd.d_opendata; in disk_print()
173 return (ptable_iterate(od->table, &pa, ptable_print)); in disk_print()
182 od = (struct open_disk *)dev->dd.d_opendata; in disk_read()
183 ret = dev->dd.d_dev->dv_strategy(dev, F_READ, dev->d_offset + offset, in disk_read()
184 blocks * od->sectorsize, buf, NULL); in disk_read()
195 od = (struct open_disk *)dev->dd.d_opendata; in disk_write()
196 ret = dev->dd.d_dev->dv_strategy(dev, F_WRITE, dev->d_offset + offset, in disk_write()
197 blocks * od->sectorsize, buf, NULL); in disk_write()
205 struct open_disk *od = dev->dd.d_opendata; in disk_ioctl()
212 *(u_int *)data = od->sectorsize; in disk_ioctl()
215 if (dev->d_offset == 0) in disk_ioctl()
216 *(uint64_t *)data = od->mediasize; in disk_ioctl()
218 *(uint64_t *)data = od->entrysize * od->sectorsize; in disk_ioctl()
234 int rc, slice, partition; in disk_open() local
246 dev->dd.d_opendata = od; in disk_open()
247 od->entrysize = 0; in disk_open()
248 od->mediasize = mediasize; in disk_open()
249 od->sectorsize = sectorsize; in disk_open()
259 dev->d_offset = 0; in disk_open()
261 slice = dev->d_slice; in disk_open()
262 partition = dev->d_partition; in disk_open()
264 DPRINTF("%s unit %d, slice %d, partition %d => %p", disk_fmtdev(dev), in disk_open()
265 dev->dd.d_unit, dev->d_slice, dev->d_partition, od); in disk_open()
268 od->table = ptable_open(&partdev, mediasize / sectorsize, sectorsize, in disk_open()
270 if (od->table == NULL) { in disk_open()
271 DPRINTF("Can't read partition table"); in disk_open()
276 if (ptable_getsize(od->table, &mediasize) != 0) { in disk_open()
280 od->mediasize = mediasize; in disk_open()
282 if (ptable_gettype(od->table) == PTABLE_BSD && in disk_open()
283 partition >= 0) { in disk_open()
285 rc = ptable_getpart(od->table, &part, partition); in disk_open()
287 dev->d_offset = part.start; in disk_open()
288 od->entrysize = part.end - part.start + 1; in disk_open()
290 } else if (ptable_gettype(od->table) == PTABLE_ISO9660) { in disk_open()
291 dev->d_offset = 0; in disk_open()
292 od->entrysize = mediasize; in disk_open()
294 /* Try to get information about partition */ in disk_open()
296 rc = ptable_getbestpart(od->table, &part); in disk_open()
298 rc = ptable_getpart(od->table, &part, slice); in disk_open()
299 if (rc != 0) /* Partition doesn't exist */ in disk_open()
301 dev->d_offset = part.start; in disk_open()
302 od->entrysize = part.end - part.start + 1; in disk_open()
304 if (ptable_gettype(od->table) == PTABLE_GPT) { in disk_open()
305 partition = D_PARTISGPT; in disk_open()
307 } else if (partition == D_PARTISGPT) { in disk_open()
309 * When we try to open GPT partition, but partition in disk_open()
310 * table isn't GPT, reset partition value to in disk_open()
313 partition = D_PARTWILD; in disk_open()
317 * If partition is D_PARTNONE, then disk_open() was called in disk_open()
320 if (partition == D_PARTNONE) in disk_open()
324 * If partition is D_PARTWILD and we are looking at a BSD slice, in disk_open()
328 if (partition == D_PARTWILD && in disk_open()
332 table = ptable_open(dev, part.end - part.start + 1, in disk_open()
333 od->sectorsize, ptblread); in disk_open()
340 * If slice contains BSD label and partition < 0, then in disk_open()
341 * assume the 'a' partition. Otherwise just return the in disk_open()
344 if (partition < 0) { in disk_open()
347 partition = 0; in disk_open()
349 rc = ptable_getpart(table, &part, partition); in disk_open()
352 dev->d_offset += part.start; in disk_open()
353 od->entrysize = part.end - part.start + 1; in disk_open()
360 if (od->table != NULL) in disk_open()
361 ptable_close(od->table); in disk_open()
365 /* Save the slice and partition number to the dev */ in disk_open()
366 dev->d_slice = slice; in disk_open()
367 dev->d_partition = partition; in disk_open()
369 (long long)dev->d_offset, od); in disk_open()
379 od = (struct open_disk *)dev->dd.d_opendata; in disk_close()
381 ptable_close(od->table); in disk_close()
393 assert(vdev->d_dev->dv_type == DEVT_DISK); in disk_fmtdev()
394 cp = buf + sprintf(buf, "%s%d", dev->dd.d_dev->dv_name, dev->dd.d_unit); in disk_fmtdev()
395 if (dev->d_slice > D_SLICENONE) { in disk_fmtdev()
397 if (dev->d_partition == D_PARTISGPT) { in disk_fmtdev()
398 sprintf(cp, "p%d:", dev->d_slice); in disk_fmtdev()
403 cp += sprintf(cp, "s%d", dev->d_slice); in disk_fmtdev()
406 if (dev->d_partition > D_PARTNONE) in disk_fmtdev()
407 cp += sprintf(cp, "%c", dev->d_partition + 'a'); in disk_fmtdev()
415 int unit, slice, partition; in disk_parsedev() local
421 unit = -1; in disk_parsedev()
424 * slice or partition info should be considered a request to search for in disk_parsedev()
425 * an appropriate partition. Otherwise we want to open the raw device in disk_parsedev()
430 partition = D_PARTWILD; in disk_parsedev()
433 partition = D_PARTNONE; in disk_parsedev()
449 partition = D_PARTISGPT; in disk_parsedev()
461 partition = *cp - 'a'; in disk_parsedev()
462 if (partition < 0) in disk_parsedev()
474 dev->dd.d_unit = unit; in disk_parsedev()
475 dev->d_slice = slice; in disk_parsedev()
476 dev->d_partition = partition; in disk_parsedev()
477 *idev = &dev->dd; in disk_parsedev()