Lines Matching full:disk

41 #include <sys/disk.h>
188 struct intel_raid_disk disk[1]; /* total_disks entries. */ member
284 mvol = (struct intel_raid_vol *)&meta->disk[meta->total_disks]; in intel_get_volume()
336 intel_get_disk_sectors(struct intel_raid_disk *disk) in intel_get_disk_sectors() argument
338 off_t sectors = (off_t)disk->sectors_hi << 32; in intel_get_disk_sectors()
340 sectors += disk->sectors; in intel_get_disk_sectors()
345 intel_set_disk_sectors(struct intel_raid_disk *disk, off_t sectors) in intel_set_disk_sectors() argument
348 disk->sectors = sectors & 0xffffffff; in intel_set_disk_sectors()
349 disk->sectors_hi = sectors >> 32; in intel_set_disk_sectors()
483 printf("DISK# serial disk_sectors disk_sectors_hi disk_id flags owner\n"); in g_raid_md_intel_print()
486 meta->disk[i].serial, meta->disk[i].sectors, in g_raid_md_intel_print()
487 meta->disk[i].sectors_hi, meta->disk[i].id, in g_raid_md_intel_print()
488 meta->disk[i].flags, "\20\01S\02A\03F\04O\05D", in g_raid_md_intel_print()
489 meta->disk[i].owner_cfg_num); in g_raid_md_intel_print()
574 if (strncmp(meta->disk[pos].serial, in intel_meta_find_disk()
698 /* Validate disk indexes. */ in intel_meta_read()
706 G_RAID_DEBUG(1, "Intel metadata disk" in intel_meta_read()
823 /* Fill anchor and single disk. */ in intel_meta_write_spare()
832 meta->disk[0] = *d; in intel_meta_write_spare()
841 struct g_raid_disk *disk; in g_raid_md_intel_get_disk() local
844 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_intel_get_disk()
845 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_intel_get_disk()
849 return (disk); in g_raid_md_intel_get_disk()
906 g_raid_md_intel_start_disk(struct g_raid_disk *disk) in g_raid_md_intel_start_disk() argument
920 sc = disk->d_softc; in g_raid_md_intel_start_disk()
924 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_intel_start_disk()
927 /* Find disk position in metadata by its serial. */ in g_raid_md_intel_start_disk()
930 G_RAID_DEBUG1(1, sc, "Unknown, probably new or stale disk"); in g_raid_md_intel_start_disk()
931 /* Failed stale disk is useless for us. */ in g_raid_md_intel_start_disk()
934 g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE_FAILED); in g_raid_md_intel_start_disk()
941 * If we have already started - try to get use of the disk. in g_raid_md_intel_start_disk()
948 /* Make sure this disk is big enough. */ in g_raid_md_intel_start_disk()
956 "Disk too small (%llu < %llu)", in g_raid_md_intel_start_disk()
975 g_raid_change_disk_state(disk, in g_raid_md_intel_start_disk()
979 g_raid_change_disk_state(disk, in g_raid_md_intel_start_disk()
993 panic("No disk at position %d!", disk_pos); in g_raid_md_intel_start_disk()
995 G_RAID_DEBUG1(1, sc, "More than one disk for pos %d", in g_raid_md_intel_start_disk()
997 g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE); in g_raid_md_intel_start_disk()
1003 /* Replace failed disk or placeholder with new disk. */ in g_raid_md_intel_start_disk()
1006 TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); in g_raid_md_intel_start_disk()
1007 sd->sd_disk = disk; in g_raid_md_intel_start_disk()
1019 memcpy(&meta->disk[disk_pos], &pd->pd_disk_meta, in g_raid_md_intel_start_disk()
1023 /* Welcome the new disk. */ in g_raid_md_intel_start_disk()
1024 if ((meta->disk[disk_pos].flags & INTEL_F_DISABLED) && in g_raid_md_intel_start_disk()
1026 g_raid_change_disk_state(disk, G_RAID_DISK_S_DISABLED); in g_raid_md_intel_start_disk()
1028 g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); in g_raid_md_intel_start_disk()
1029 else if (meta->disk[disk_pos].flags & INTEL_F_FAILED) in g_raid_md_intel_start_disk()
1030 g_raid_change_disk_state(disk, G_RAID_DISK_S_FAILED); in g_raid_md_intel_start_disk()
1031 else if (meta->disk[disk_pos].flags & INTEL_F_SPARE) in g_raid_md_intel_start_disk()
1032 g_raid_change_disk_state(disk, G_RAID_DISK_S_SPARE); in g_raid_md_intel_start_disk()
1034 g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); in g_raid_md_intel_start_disk()
1035 TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { in g_raid_md_intel_start_disk()
1051 if ((meta->disk[disk_pos].flags & INTEL_F_DISABLED) && in g_raid_md_intel_start_disk()
1053 /* Disabled disk, useless. */ in g_raid_md_intel_start_disk()
1057 /* Stale disk, almost same as new. */ in g_raid_md_intel_start_disk()
1060 } else if (meta->disk[disk_pos].flags & INTEL_F_FAILED) { in g_raid_md_intel_start_disk()
1061 /* Failed disk, almost useless. */ in g_raid_md_intel_start_disk()
1071 /* Freshly inserted disk. */ in g_raid_md_intel_start_disk()
1080 /* Up to date disk. */ in g_raid_md_intel_start_disk()
1087 /* Freshly inserted disk. */ in g_raid_md_intel_start_disk()
1091 /* Rebuilding disk. */ in g_raid_md_intel_start_disk()
1113 /* Up to date disk. */ in g_raid_md_intel_start_disk()
1120 /* Freshly inserted disk. */ in g_raid_md_intel_start_disk()
1125 /* Resyncing disk. */ in g_raid_md_intel_start_disk()
1141 /* Up to date disk. */ in g_raid_md_intel_start_disk()
1147 /* Freshly inserted disk. */ in g_raid_md_intel_start_disk()
1151 /* Up to date disk. */ in g_raid_md_intel_start_disk()
1186 struct g_raid_disk *disk; in g_raid_md_intel_refill() local
1206 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_intel_refill()
1207 if (disk->d_state == G_RAID_DISK_S_STALE) { in g_raid_md_intel_refill()
1208 update += g_raid_md_intel_start_disk(disk); in g_raid_md_intel_refill()
1209 if (disk->d_state == G_RAID_DISK_S_ACTIVE || in g_raid_md_intel_refill()
1210 disk->d_state == G_RAID_DISK_S_DISABLED) in g_raid_md_intel_refill()
1214 if (disk != NULL) in g_raid_md_intel_refill()
1218 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_intel_refill()
1219 if (disk->d_state == G_RAID_DISK_S_SPARE) { in g_raid_md_intel_refill()
1220 update += g_raid_md_intel_start_disk(disk); in g_raid_md_intel_refill()
1221 if (disk->d_state == G_RAID_DISK_S_ACTIVE) in g_raid_md_intel_refill()
1225 } while (disk != NULL); in g_raid_md_intel_refill()
1258 struct g_raid_disk *disk; in g_raid_md_intel_start() local
1311 /* Create disk placeholders to store data for later writing. */ in g_raid_md_intel_start()
1315 pd->pd_disk_meta = meta->disk[disk_pos]; in g_raid_md_intel_start()
1316 disk = g_raid_create_disk(sc); in g_raid_md_intel_start()
1317 disk->d_md_data = (void *)pd; in g_raid_md_intel_start()
1318 disk->d_state = G_RAID_DISK_S_OFFLINE; in g_raid_md_intel_start()
1330 sd->sd_disk = disk; in g_raid_md_intel_start()
1331 TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); in g_raid_md_intel_start()
1337 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_intel_start()
1338 if (disk->d_state == G_RAID_DISK_S_NONE) { in g_raid_md_intel_start()
1339 g_raid_md_intel_start_disk(disk); in g_raid_md_intel_start()
1343 } while (disk != NULL); in g_raid_md_intel_start()
1364 g_raid_md_intel_new_disk(struct g_raid_disk *disk) in g_raid_md_intel_new_disk() argument
1372 sc = disk->d_softc; in g_raid_md_intel_new_disk()
1375 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_intel_new_disk()
1379 if (g_raid_md_intel_start_disk(disk)) in g_raid_md_intel_new_disk()
1385 G_RAID_DEBUG1(1, sc, "Newer disk"); in g_raid_md_intel_new_disk()
1393 G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d up)", in g_raid_md_intel_new_disk()
1397 G_RAID_DEBUG1(1, sc, "Older disk"); in g_raid_md_intel_new_disk()
1476 struct g_raid_disk *disk; in g_raid_md_taste_intel() local
1521 /* Check this disk position in obtained metadata. */ in g_raid_md_taste_intel()
1527 if (intel_get_disk_sectors(&meta->disk[disk_pos]) != in g_raid_md_taste_intel()
1530 intel_get_disk_sectors(&meta->disk[disk_pos]), in g_raid_md_taste_intel()
1535 G_RAID_DEBUG(1, "Intel disk position %d", disk_pos); in g_raid_md_taste_intel()
1536 spare = meta->disk[disk_pos].flags & INTEL_F_SPARE; in g_raid_md_taste_intel()
1606 pd->pd_disk_meta = meta->disk[disk_pos]; in g_raid_md_taste_intel()
1608 disk = g_raid_create_disk(sc); in g_raid_md_taste_intel()
1609 disk->d_md_data = (void *)pd; in g_raid_md_taste_intel()
1610 disk->d_consumer = rcp; in g_raid_md_taste_intel()
1611 rcp->private = disk; in g_raid_md_taste_intel()
1613 g_raid_get_disk_info(disk); in g_raid_md_taste_intel()
1615 g_raid_md_intel_new_disk(disk); in g_raid_md_taste_intel()
1630 struct g_raid_disk *disk, u_int event) in g_raid_md_event_intel() argument
1639 if (disk == NULL) { in g_raid_md_event_intel()
1648 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_event_intel()
1651 /* If disk was assigned, just update statuses. */ in g_raid_md_event_intel()
1653 g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); in g_raid_md_event_intel()
1654 if (disk->d_consumer) { in g_raid_md_event_intel()
1655 g_raid_kill_consumer(sc, disk->d_consumer); in g_raid_md_event_intel()
1656 disk->d_consumer = NULL; in g_raid_md_event_intel()
1658 TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { in g_raid_md_event_intel()
1666 g_raid_change_disk_state(disk, G_RAID_DISK_S_NONE); in g_raid_md_event_intel()
1667 g_raid_destroy_disk(disk); in g_raid_md_event_intel()
1691 struct g_raid_disk *disk; in g_raid_md_ctl_intel() local
1749 gctl_error(req, "No disk name (%s).", arg); in g_raid_md_ctl_intel()
1760 gctl_error(req, "Can't open disk '%s'.", in g_raid_md_ctl_intel()
1770 disk = g_raid_create_disk(sc); in g_raid_md_ctl_intel()
1771 disk->d_md_data = (void *)pd; in g_raid_md_ctl_intel()
1772 disk->d_consumer = cp; in g_raid_md_ctl_intel()
1779 cp->private = disk; in g_raid_md_ctl_intel()
1792 g_raid_get_disk_info(disk); in g_raid_md_ctl_intel()
1885 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_ctl_intel()
1886 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_ctl_intel()
1888 sd->sd_disk = disk; in g_raid_md_ctl_intel()
1891 TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); in g_raid_md_ctl_intel()
1893 g_raid_change_disk_state(disk, in g_raid_md_ctl_intel()
1904 g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); in g_raid_md_ctl_intel()
1971 disk = vol1->v_subdisks[i].sd_disk; in g_raid_md_ctl_intel()
1973 disk->d_md_data; in g_raid_md_ctl_intel()
1979 if (disk->d_consumer != NULL && in g_raid_md_ctl_intel()
1980 disk->d_consumer->provider != NULL && in g_raid_md_ctl_intel()
1981 disk->d_consumer->provider->sectorsize > in g_raid_md_ctl_intel()
1984 disk->d_consumer->provider->sectorsize; in g_raid_md_ctl_intel()
2080 disk = vol1->v_subdisks[i].sd_disk; in g_raid_md_ctl_intel()
2082 sd->sd_disk = disk; in g_raid_md_ctl_intel()
2085 TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); in g_raid_md_ctl_intel()
2086 if (disk->d_state == G_RAID_DISK_S_ACTIVE) { in g_raid_md_ctl_intel()
2120 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_ctl_intel()
2121 if (disk->d_consumer) in g_raid_md_ctl_intel()
2122 intel_meta_erase(disk->d_consumer); in g_raid_md_ctl_intel()
2183 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_ctl_intel()
2184 if (disk->d_consumer) in g_raid_md_ctl_intel()
2185 intel_meta_erase(disk->d_consumer); in g_raid_md_ctl_intel()
2201 gctl_error(req, "No disk name (%s).", arg); in g_raid_md_ctl_intel()
2208 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_ctl_intel()
2209 if (disk->d_consumer != NULL && in g_raid_md_ctl_intel()
2210 disk->d_consumer->provider != NULL && in g_raid_md_ctl_intel()
2211 strcmp(disk->d_consumer->provider->name, in g_raid_md_ctl_intel()
2215 if (disk == NULL) { in g_raid_md_ctl_intel()
2216 gctl_error(req, "Disk '%s' not found.", in g_raid_md_ctl_intel()
2223 g_raid_md_fail_disk_intel(md, NULL, disk); in g_raid_md_ctl_intel()
2227 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_ctl_intel()
2229 /* Erase metadata on deleting disk. */ in g_raid_md_ctl_intel()
2230 intel_meta_erase(disk->d_consumer); in g_raid_md_ctl_intel()
2232 /* If disk was assigned, just update statuses. */ in g_raid_md_ctl_intel()
2234 g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); in g_raid_md_ctl_intel()
2235 g_raid_kill_consumer(sc, disk->d_consumer); in g_raid_md_ctl_intel()
2236 disk->d_consumer = NULL; in g_raid_md_ctl_intel()
2237 TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { in g_raid_md_ctl_intel()
2245 g_raid_change_disk_state(disk, G_RAID_DISK_S_NONE); in g_raid_md_ctl_intel()
2246 g_raid_destroy_disk(disk); in g_raid_md_ctl_intel()
2268 /* Get disk name. */ in g_raid_md_ctl_intel()
2272 gctl_error(req, "No disk name (%s).", arg); in g_raid_md_ctl_intel()
2281 gctl_error(req, "Can't open disk '%s'.", in g_raid_md_ctl_intel()
2290 /* Read disk serial. */ in g_raid_md_ctl_intel()
2305 disk = g_raid_create_disk(sc); in g_raid_md_ctl_intel()
2306 disk->d_consumer = cp; in g_raid_md_ctl_intel()
2307 disk->d_md_data = (void *)pd; in g_raid_md_ctl_intel()
2308 cp->private = disk; in g_raid_md_ctl_intel()
2310 g_raid_get_disk_info(disk); in g_raid_md_ctl_intel()
2319 /* Welcome the "new" disk. */ in g_raid_md_ctl_intel()
2320 update += g_raid_md_intel_start_disk(disk); in g_raid_md_ctl_intel()
2321 if (disk->d_state == G_RAID_DISK_S_SPARE) { in g_raid_md_ctl_intel()
2323 g_raid_destroy_disk(disk); in g_raid_md_ctl_intel()
2324 } else if (disk->d_state != G_RAID_DISK_S_ACTIVE) { in g_raid_md_ctl_intel()
2325 gctl_error(req, "Disk '%s' doesn't fit.", in g_raid_md_ctl_intel()
2327 g_raid_destroy_disk(disk); in g_raid_md_ctl_intel()
2348 struct g_raid_disk *disk; in g_raid_md_write_intel() local
2370 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_write_intel()
2371 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_write_intel()
2375 if (disk->d_state == G_RAID_DISK_S_ACTIVE) { in g_raid_md_write_intel()
2378 } else if (disk->d_state == G_RAID_DISK_S_FAILED) { in g_raid_md_write_intel()
2381 } else if (disk->d_state == G_RAID_DISK_S_DISABLED) { in g_raid_md_write_intel()
2406 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_write_intel()
2407 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_write_intel()
2410 meta->disk[pd->pd_disk_pos] = pd->pd_disk_meta; in g_raid_md_write_intel()
2559 /* Write disk indexes and put rebuild flags. */ in g_raid_md_write_intel()
2601 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_write_intel()
2602 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_write_intel()
2603 if (disk->d_state != G_RAID_DISK_S_ACTIVE) in g_raid_md_write_intel()
2610 intel_meta_write(disk->d_consumer, meta); in g_raid_md_write_intel()
2628 /* We can't fail disk that is not a part of array now. */ in g_raid_md_fail_disk_intel()
2633 * Mark disk as failed in metadata and try to write that metadata in g_raid_md_fail_disk_intel()
2634 * to the disk itself to prevent it's later resurrection as STALE. in g_raid_md_fail_disk_intel()
2636 mdi->mdio_meta->disk[pd->pd_disk_pos].flags = INTEL_F_FAILED; in g_raid_md_fail_disk_intel()
2665 struct g_raid_disk *disk) in g_raid_md_free_disk_intel() argument
2669 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_free_disk_intel()
2675 disk->d_md_data = NULL; in g_raid_md_free_disk_intel()