Lines Matching full:disk
206 * Generate fake Configuration ID based on disk IDs.
207 * Note: it will change after each disk set change.
357 struct g_raid_disk *disk; in g_raid_md_jmicron_get_disk() local
360 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_jmicron_get_disk()
361 pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; in g_raid_md_jmicron_get_disk()
365 return (disk); in g_raid_md_jmicron_get_disk()
420 g_raid_md_jmicron_start_disk(struct g_raid_disk *disk) in g_raid_md_jmicron_start_disk() argument
431 sc = disk->d_softc; in g_raid_md_jmicron_start_disk()
435 pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; in g_raid_md_jmicron_start_disk()
438 /* Find disk position in metadata by its serial. */ in g_raid_md_jmicron_start_disk()
444 G_RAID_DEBUG1(1, sc, "Unknown, probably new or stale disk"); in g_raid_md_jmicron_start_disk()
449 * If we have already started - try to get use of the disk. in g_raid_md_jmicron_start_disk()
456 /* Make sure this disk is big enough. */ in g_raid_md_jmicron_start_disk()
461 "Disk too small (%ju < %ju)", in g_raid_md_jmicron_start_disk()
478 g_raid_change_disk_state(disk, in g_raid_md_jmicron_start_disk()
482 g_raid_change_disk_state(disk, in g_raid_md_jmicron_start_disk()
496 panic("No disk at position %d!", disk_pos); in g_raid_md_jmicron_start_disk()
498 G_RAID_DEBUG1(1, sc, "More than one disk for pos %d", in g_raid_md_jmicron_start_disk()
500 g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE); in g_raid_md_jmicron_start_disk()
506 /* Replace failed disk or placeholder with new disk. */ in g_raid_md_jmicron_start_disk()
509 TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); in g_raid_md_jmicron_start_disk()
510 sd->sd_disk = disk; in g_raid_md_jmicron_start_disk()
525 /* Welcome the new disk. */ in g_raid_md_jmicron_start_disk()
526 g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); in g_raid_md_jmicron_start_disk()
527 TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { in g_raid_md_jmicron_start_disk()
541 /* Stale disk, almost same as new. */ in g_raid_md_jmicron_start_disk()
546 /* Cold-inserted or rebuilding disk. */ in g_raid_md_jmicron_start_disk()
550 /* Dirty or resyncing disk.. */ in g_raid_md_jmicron_start_disk()
554 /* Up to date disk. */ in g_raid_md_jmicron_start_disk()
586 struct g_raid_disk *disk; in g_raid_md_jmicron_refill() local
604 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_jmicron_refill()
605 if (disk->d_state == G_RAID_DISK_S_STALE) { in g_raid_md_jmicron_refill()
606 update += g_raid_md_jmicron_start_disk(disk); in g_raid_md_jmicron_refill()
607 if (disk->d_state == G_RAID_DISK_S_ACTIVE) in g_raid_md_jmicron_refill()
611 if (disk != NULL) in g_raid_md_jmicron_refill()
615 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_jmicron_refill()
616 if (disk->d_state == G_RAID_DISK_S_SPARE) { in g_raid_md_jmicron_refill()
617 update += g_raid_md_jmicron_start_disk(disk); in g_raid_md_jmicron_refill()
618 if (disk->d_state == G_RAID_DISK_S_ACTIVE) in g_raid_md_jmicron_refill()
622 } while (disk != NULL); in g_raid_md_jmicron_refill()
650 struct g_raid_disk *disk; in g_raid_md_jmicron_start() local
698 /* Create disk placeholders to store data for later writing. */ in g_raid_md_jmicron_start()
703 disk = g_raid_create_disk(sc); in g_raid_md_jmicron_start()
704 disk->d_md_data = (void *)pd; in g_raid_md_jmicron_start()
705 disk->d_state = G_RAID_DISK_S_OFFLINE; in g_raid_md_jmicron_start()
707 sd->sd_disk = disk; in g_raid_md_jmicron_start()
708 TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); in g_raid_md_jmicron_start()
713 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_jmicron_start()
714 if (disk->d_state == G_RAID_DISK_S_NONE) { in g_raid_md_jmicron_start()
715 g_raid_md_jmicron_start_disk(disk); in g_raid_md_jmicron_start()
719 } while (disk != NULL); in g_raid_md_jmicron_start()
737 g_raid_md_jmicron_new_disk(struct g_raid_disk *disk) in g_raid_md_jmicron_new_disk() argument
745 sc = disk->d_softc; in g_raid_md_jmicron_new_disk()
748 pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; in g_raid_md_jmicron_new_disk()
752 if (g_raid_md_jmicron_start_disk(disk)) in g_raid_md_jmicron_new_disk()
770 G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", in g_raid_md_jmicron_new_disk()
825 struct g_raid_disk *disk; in g_raid_md_taste_jmicron() local
862 /* Check this disk position in obtained metadata. */ in g_raid_md_taste_jmicron()
872 G_RAID_DEBUG(1, "JMicron disk position %d", disk_pos); in g_raid_md_taste_jmicron()
944 disk = g_raid_create_disk(sc); in g_raid_md_taste_jmicron()
945 disk->d_md_data = (void *)pd; in g_raid_md_taste_jmicron()
946 disk->d_consumer = rcp; in g_raid_md_taste_jmicron()
947 rcp->private = disk; in g_raid_md_taste_jmicron()
949 g_raid_get_disk_info(disk); in g_raid_md_taste_jmicron()
951 g_raid_md_jmicron_new_disk(disk); in g_raid_md_taste_jmicron()
964 struct g_raid_disk *disk, u_int event) in g_raid_md_event_jmicron() argument
973 if (disk == NULL) { in g_raid_md_event_jmicron()
982 pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; in g_raid_md_event_jmicron()
985 /* If disk was assigned, just update statuses. */ in g_raid_md_event_jmicron()
987 g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); in g_raid_md_event_jmicron()
988 if (disk->d_consumer) { in g_raid_md_event_jmicron()
989 g_raid_kill_consumer(sc, disk->d_consumer); in g_raid_md_event_jmicron()
990 disk->d_consumer = NULL; in g_raid_md_event_jmicron()
992 TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { in g_raid_md_event_jmicron()
1000 g_raid_change_disk_state(disk, G_RAID_DISK_S_NONE); in g_raid_md_event_jmicron()
1001 g_raid_destroy_disk(disk); in g_raid_md_event_jmicron()
1025 struct g_raid_disk *disk; in g_raid_md_ctl_jmicron() local
1081 gctl_error(req, "No disk name (%s).", arg); in g_raid_md_ctl_jmicron()
1103 disk = g_raid_create_disk(sc); in g_raid_md_ctl_jmicron()
1104 disk->d_md_data = (void *)pd; in g_raid_md_ctl_jmicron()
1105 disk->d_consumer = cp; in g_raid_md_ctl_jmicron()
1108 cp->private = disk; in g_raid_md_ctl_jmicron()
1111 g_raid_get_disk_info(disk); in g_raid_md_ctl_jmicron()
1206 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_ctl_jmicron()
1207 pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; in g_raid_md_ctl_jmicron()
1209 sd->sd_disk = disk; in g_raid_md_ctl_jmicron()
1212 TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); in g_raid_md_ctl_jmicron()
1214 g_raid_change_disk_state(disk, in g_raid_md_ctl_jmicron()
1221 g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); in g_raid_md_ctl_jmicron()
1245 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_ctl_jmicron()
1246 if (disk->d_consumer) in g_raid_md_ctl_jmicron()
1247 jmicron_meta_erase(disk->d_consumer); in g_raid_md_ctl_jmicron()
1262 gctl_error(req, "No disk name (%s).", arg); in g_raid_md_ctl_jmicron()
1269 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_ctl_jmicron()
1270 if (disk->d_consumer != NULL && in g_raid_md_ctl_jmicron()
1271 disk->d_consumer->provider != NULL && in g_raid_md_ctl_jmicron()
1272 strcmp(disk->d_consumer->provider->name, in g_raid_md_ctl_jmicron()
1276 if (disk == NULL) { in g_raid_md_ctl_jmicron()
1277 gctl_error(req, "Disk '%s' not found.", in g_raid_md_ctl_jmicron()
1284 g_raid_md_fail_disk_jmicron(md, NULL, disk); in g_raid_md_ctl_jmicron()
1288 pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; in g_raid_md_ctl_jmicron()
1290 /* Erase metadata on deleting disk. */ in g_raid_md_ctl_jmicron()
1291 jmicron_meta_erase(disk->d_consumer); in g_raid_md_ctl_jmicron()
1293 /* If disk was assigned, just update statuses. */ in g_raid_md_ctl_jmicron()
1295 g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); in g_raid_md_ctl_jmicron()
1296 g_raid_kill_consumer(sc, disk->d_consumer); in g_raid_md_ctl_jmicron()
1297 disk->d_consumer = NULL; in g_raid_md_ctl_jmicron()
1298 TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { in g_raid_md_ctl_jmicron()
1306 g_raid_change_disk_state(disk, G_RAID_DISK_S_NONE); in g_raid_md_ctl_jmicron()
1307 g_raid_destroy_disk(disk); in g_raid_md_ctl_jmicron()
1329 /* Get disk name. */ in g_raid_md_ctl_jmicron()
1333 gctl_error(req, "No disk name (%s).", arg); in g_raid_md_ctl_jmicron()
1342 gctl_error(req, "Can't open disk '%s'.", in g_raid_md_ctl_jmicron()
1355 disk = g_raid_create_disk(sc); in g_raid_md_ctl_jmicron()
1356 disk->d_consumer = cp; in g_raid_md_ctl_jmicron()
1357 disk->d_md_data = (void *)pd; in g_raid_md_ctl_jmicron()
1358 cp->private = disk; in g_raid_md_ctl_jmicron()
1361 g_raid_get_disk_info(disk); in g_raid_md_ctl_jmicron()
1363 /* Welcome the "new" disk. */ in g_raid_md_ctl_jmicron()
1364 update += g_raid_md_jmicron_start_disk(disk); in g_raid_md_ctl_jmicron()
1365 if (disk->d_state != G_RAID_DISK_S_ACTIVE && in g_raid_md_ctl_jmicron()
1366 disk->d_state != G_RAID_DISK_S_SPARE) { in g_raid_md_ctl_jmicron()
1367 gctl_error(req, "Disk '%s' doesn't fit.", in g_raid_md_ctl_jmicron()
1369 g_raid_destroy_disk(disk); in g_raid_md_ctl_jmicron()
1391 struct g_raid_disk *disk; in g_raid_md_write_jmicron() local
1441 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_write_jmicron()
1442 pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; in g_raid_md_write_jmicron()
1443 if (disk->d_state != G_RAID_DISK_S_SPARE) in g_raid_md_write_jmicron()
1454 TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { in g_raid_md_write_jmicron()
1455 pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; in g_raid_md_write_jmicron()
1456 if (disk->d_state != G_RAID_DISK_S_ACTIVE && in g_raid_md_write_jmicron()
1457 disk->d_state != G_RAID_DISK_S_SPARE) in g_raid_md_write_jmicron()
1465 if ((sd = TAILQ_FIRST(&disk->d_subdisks)) != NULL) { in g_raid_md_write_jmicron()
1478 g_raid_get_diskname(disk)); in g_raid_md_write_jmicron()
1480 jmicron_meta_write(disk->d_consumer, pd->pd_meta); in g_raid_md_write_jmicron()
1496 /* We can't fail disk that is not a part of array now. */ in g_raid_md_fail_disk_jmicron()
1526 struct g_raid_disk *disk) in g_raid_md_free_disk_jmicron() argument
1530 pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; in g_raid_md_free_disk_jmicron()
1536 disk->d_md_data = NULL; in g_raid_md_free_disk_jmicron()