Lines Matching full:disk
104 struct g_concat_disk *disk; in g_concat_nvalid() local
109 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_concat_nvalid()
110 if (disk->d_consumer != NULL) in g_concat_nvalid()
118 g_concat_remove_disk(struct g_concat_disk *disk) in g_concat_remove_disk() argument
124 KASSERT(disk->d_consumer != NULL, ("Non-valid disk in %s.", __func__)); in g_concat_remove_disk()
125 sc = disk->d_softc; in g_concat_remove_disk()
126 cp = disk->d_consumer; in g_concat_remove_disk()
128 if (!disk->d_removed) { in g_concat_remove_disk()
129 G_CONCAT_DEBUG(0, "Disk %s removed from %s.", in g_concat_remove_disk()
131 disk->d_removed = 1; in g_concat_remove_disk()
143 disk->d_consumer = NULL; in g_concat_remove_disk()
155 struct g_concat_disk *disk; in g_concat_orphan() local
164 disk = cp->private; in g_concat_orphan()
165 if (disk == NULL) /* Possible? */ in g_concat_orphan()
167 g_concat_remove_disk(disk); in g_concat_orphan()
174 struct g_concat_disk *disk; in g_concat_access() local
195 disk = cp1->private; in g_concat_access()
197 disk->d_removed) { in g_concat_access()
198 g_concat_remove_disk(disk); /* May destroy geom. */ in g_concat_access()
218 struct g_concat_disk *disk; in g_concat_candelete() local
223 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_concat_candelete()
224 if (!disk->d_removed && disk->d_candelete) in g_concat_candelete()
227 val = disk != NULL; in g_concat_candelete()
235 struct g_concat_disk *disk; in g_concat_kernel_dump() local
241 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_concat_kernel_dump()
242 if (disk->d_start <= gkd->offset && in g_concat_kernel_dump()
243 disk->d_end > gkd->offset) in g_concat_kernel_dump()
246 if (disk == NULL) { in g_concat_kernel_dump()
251 gkd->offset -= disk->d_start; in g_concat_kernel_dump()
252 if (gkd->length > disk->d_end - disk->d_start - gkd->offset) in g_concat_kernel_dump()
253 gkd->length = disk->d_end - disk->d_start - gkd->offset; in g_concat_kernel_dump()
260 g_io_request(cbp, disk->d_consumer); in g_concat_kernel_dump()
262 disk->d_consumer->provider->name); in g_concat_kernel_dump()
295 struct g_concat_disk *disk; in g_concat_passdown() local
300 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_concat_passdown()
312 cbp->bio_caller1 = disk->d_consumer; in g_concat_passdown()
313 cbp->bio_to = disk->d_consumer->provider; in g_concat_passdown()
328 struct g_concat_disk *disk; in g_concat_start() local
380 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_concat_start()
381 if (disk->d_end <= offset) in g_concat_start()
383 if (disk->d_start >= end) in g_concat_start()
386 off = offset - disk->d_start; in g_concat_start()
387 len = MIN(length, disk->d_end - offset); in g_concat_start()
419 cbp->bio_to = disk->d_consumer->provider; in g_concat_start()
420 cbp->bio_caller1 = disk; in g_concat_start()
430 disk = cbp->bio_caller1; in g_concat_start()
432 g_io_request(cbp, disk->d_consumer); in g_concat_start()
441 struct g_concat_disk *disk; in g_concat_check_and_run() local
455 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_concat_check_and_run()
456 dp = disk->d_consumer->provider; in g_concat_check_and_run()
457 disk->d_start = start; in g_concat_check_and_run()
458 disk->d_end = disk->d_start + dp->mediasize; in g_concat_check_and_run()
460 disk->d_end -= dp->sectorsize; in g_concat_check_and_run()
461 start = disk->d_end; in g_concat_check_and_run()
462 error = g_access(disk->d_consumer, 1, 0, 0); in g_concat_check_and_run()
464 error = g_getattr("GEOM::candelete", disk->d_consumer, in g_concat_check_and_run()
465 &disk->d_candelete); in g_concat_check_and_run()
467 disk->d_candelete = 0; in g_concat_check_and_run()
468 (void)g_access(disk->d_consumer, -1, 0, 0); in g_concat_check_and_run()
470 G_CONCAT_DEBUG(1, "Failed to access disk %s, error %d.", in g_concat_check_and_run()
472 if (disk == TAILQ_FIRST(&sc->sc_disks)) in g_concat_check_and_run()
525 * Add disk to given device.
530 struct g_concat_disk *disk; in g_concat_add_disk() local
545 for (disk = TAILQ_FIRST(&sc->sc_disks); no > 0; no--) { in g_concat_add_disk()
546 disk = TAILQ_NEXT(disk, d_next); in g_concat_add_disk()
549 /* Check if disk is not already attached. */ in g_concat_add_disk()
550 if (disk->d_consumer != NULL) { in g_concat_add_disk()
596 disk->d_hardcoded = md.md_provider[0] != '\0'; in g_concat_add_disk()
598 disk->d_hardcoded = false; in g_concat_add_disk()
601 cp->private = disk; in g_concat_add_disk()
602 disk->d_consumer = cp; in g_concat_add_disk()
603 disk->d_softc = sc; in g_concat_add_disk()
604 disk->d_start = 0; /* not yet */ in g_concat_add_disk()
605 disk->d_end = 0; /* not yet */ in g_concat_add_disk()
606 disk->d_removed = 0; in g_concat_add_disk()
608 G_CONCAT_DEBUG(0, "Disk %s attached to %s.", pp->name, sc->sc_name); in g_concat_add_disk()
628 struct g_concat_disk *disk; in g_concat_create() local
660 disk = malloc(sizeof(*disk), M_CONCAT, M_WAITOK | M_ZERO); in g_concat_create()
661 TAILQ_INSERT_TAIL(&sc->sc_disks, disk, d_next); in g_concat_create()
682 struct g_concat_disk *disk; in g_concat_destroy() local
714 while ((disk = TAILQ_FIRST(&sc->sc_disks)) != NULL) { in g_concat_destroy()
715 TAILQ_REMOVE(&sc->sc_disks, disk, d_next); in g_concat_destroy()
716 free(disk, M_CONCAT); in g_concat_destroy()
812 G_CONCAT_DEBUG(1, "Adding disk %s to %s.", pp->name, gp->name); in g_concat_taste()
816 "Cannot add disk %s to %s (error=%d).", pp->name, in g_concat_taste()
828 G_CONCAT_DEBUG(1, "Adding disk %s to %s.", pp->name, gp->name); in g_concat_taste()
832 "Cannot add disk %s to %s (error=%d).", pp->name, in g_concat_taste()
897 sbuf_printf(sb, "Can't attach disk(s) to %s:", gp->name); in g_concat_ctl_create()
908 G_CONCAT_DEBUG(1, "Disk %u (%s) not attached to %s.", in g_concat_ctl_create()
992 struct g_concat_disk *disk; in g_concat_find_disk() local
997 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_concat_find_disk()
998 if (disk->d_consumer == NULL) in g_concat_find_disk()
1000 if (disk->d_consumer->provider == NULL) in g_concat_find_disk()
1002 if (strcmp(disk->d_consumer->provider->name, name) == 0) in g_concat_find_disk()
1003 return (disk); in g_concat_find_disk()
1012 struct g_concat_disk *disk; in g_concat_write_metadata() local
1024 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_concat_write_metadata()
1025 pp = disk->d_consumer->provider; in g_concat_write_metadata()
1028 if (disk->d_hardcoded) in g_concat_write_metadata()
1031 md.md_provsize = disk->d_consumer->provider->mediasize; in g_concat_write_metadata()
1035 error = g_access(disk->d_consumer, 0, 1, 0); in g_concat_write_metadata()
1037 error = g_write_data(disk->d_consumer, in g_concat_write_metadata()
1040 (void)g_access(disk->d_consumer, 0, -1, 0); in g_concat_write_metadata()
1059 struct g_concat_disk *disk; in g_concat_ctl_append() local
1113 G_CONCAT_DEBUG(1, "Disk %s is invalid.", name); in g_concat_ctl_append()
1114 gctl_error(req, "Disk %s is invalid.", name); in g_concat_ctl_append()
1120 gctl_error(req, "Disk %s already appended.", name); in g_concat_ctl_append()
1147 G_CONCAT_DEBUG(1, "Failed to access disk %s, error %d.", name, error); in g_concat_ctl_append()
1155 gctl_error(req, "Failed to access disk %s (error=%d).", name, error); in g_concat_ctl_append()
1160 disk = malloc(sizeof(*disk), M_CONCAT, M_WAITOK | M_ZERO); in g_concat_ctl_append()
1161 disk->d_consumer = cp; in g_concat_ctl_append()
1162 disk->d_softc = sc; in g_concat_ctl_append()
1163 disk->d_start = TAILQ_LAST(&sc->sc_disks, g_concat_disks)->d_end; in g_concat_ctl_append()
1164 disk->d_end = disk->d_start + cp->provider->mediasize; in g_concat_ctl_append()
1165 disk->d_candelete = disk_candelete; in g_concat_ctl_append()
1166 disk->d_removed = 0; in g_concat_ctl_append()
1167 disk->d_hardcoded = *hardcode; in g_concat_ctl_append()
1168 cp->private = disk; in g_concat_ctl_append()
1169 TAILQ_INSERT_TAIL(&sc->sc_disks, disk, d_next); in g_concat_ctl_append()
1174 disk->d_end -= cp->provider->sectorsize; in g_concat_ctl_append()
1180 g_resize_provider(sc->sc_provider, disk->d_end); in g_concat_ctl_append()
1232 struct g_concat_disk *disk; in g_concat_dumpconf() local
1234 disk = cp->private; in g_concat_dumpconf()
1235 if (disk == NULL) in g_concat_dumpconf()
1238 (intmax_t)disk->d_end); in g_concat_dumpconf()
1240 (intmax_t)disk->d_start); in g_concat_dumpconf()