Lines Matching +full:mdi +full:- +full:x
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
5 * Copyright (c) 2000 - 2008 Søren Schmidt <sos@FreeBSD.org>
199 sizeof(struct intel_raid_disk) * (ndisks - 1) + \
202 sizeof(uint32_t) * (ndisks - 1) * 4)
266 if (i > (mvol->migr_state ? 1 : 0)) in intel_get_map()
268 mmap = &mvol->map[0]; in intel_get_map()
269 for (; i > 0; i--) { in intel_get_map()
271 &mmap->disk_idx[mmap->total_disks]; in intel_get_map()
284 mvol = (struct intel_raid_vol *)&meta->disk[meta->total_disks]; in intel_get_volume()
285 for (; i > 0; i--) { in intel_get_volume()
286 mmap = intel_get_map(mvol, mvol->migr_state ? 1 : 0); in intel_get_volume()
288 &mmap->disk_idx[mmap->total_disks]; in intel_get_volume()
296 off_t offset = (off_t)mmap->offset_hi << 32; in intel_get_map_offset()
298 offset += mmap->offset; in intel_get_map_offset()
306 mmap->offset = offset & 0xffffffff; in intel_set_map_offset()
307 mmap->offset_hi = offset >> 32; in intel_set_map_offset()
313 off_t disk_sectors = (off_t)mmap->disk_sectors_hi << 32; in intel_get_map_disk_sectors()
315 disk_sectors += mmap->disk_sectors; in intel_get_map_disk_sectors()
323 mmap->disk_sectors = disk_sectors & 0xffffffff; in intel_set_map_disk_sectors()
324 mmap->disk_sectors_hi = disk_sectors >> 32; in intel_set_map_disk_sectors()
331 mmap->stripe_count = stripe_count & 0xffffffff; in intel_set_map_stripe_count()
332 mmap->stripe_count_hi = stripe_count >> 32; in intel_set_map_stripe_count()
338 off_t sectors = (off_t)disk->sectors_hi << 32; in intel_get_disk_sectors()
340 sectors += disk->sectors; in intel_get_disk_sectors()
348 disk->sectors = sectors & 0xffffffff; in intel_set_disk_sectors()
349 disk->sectors_hi = sectors >> 32; in intel_set_disk_sectors()
355 off_t curr_migr_unit = (off_t)vol->curr_migr_unit_hi << 32; in intel_get_vol_curr_migr_unit()
357 curr_migr_unit += vol->curr_migr_unit; in intel_get_vol_curr_migr_unit()
365 vol->curr_migr_unit = curr_migr_unit & 0xffffffff; in intel_set_vol_curr_migr_unit()
366 vol->curr_migr_unit_hi = curr_migr_unit >> 32; in intel_set_vol_curr_migr_unit()
452 printf("intel_id <%.24s>\n", meta->intel_id); in g_raid_md_intel_print()
453 printf("version <%.6s>\n", meta->version); in g_raid_md_intel_print()
454 printf("checksum 0x%08x\n", meta->checksum); in g_raid_md_intel_print()
455 printf("config_size 0x%08x\n", meta->config_size); in g_raid_md_intel_print()
456 printf("config_id 0x%08x\n", meta->config_id); in g_raid_md_intel_print()
457 printf("generation 0x%08x\n", meta->generation); in g_raid_md_intel_print()
458 printf("error_log_size %d\n", meta->error_log_size); in g_raid_md_intel_print()
459 printf("attributes 0x%b\n", meta->attributes, in g_raid_md_intel_print()
475 printf("total_disks %u\n", meta->total_disks); in g_raid_md_intel_print()
476 printf("total_volumes %u\n", meta->total_volumes); in g_raid_md_intel_print()
477 printf("error_log_pos %u\n", meta->error_log_pos); in g_raid_md_intel_print()
478 printf("cache_size %u\n", meta->cache_size); in g_raid_md_intel_print()
479 printf("orig_config_id 0x%08x\n", meta->orig_config_id); in g_raid_md_intel_print()
480 printf("pwr_cycle_count %u\n", meta->pwr_cycle_count); in g_raid_md_intel_print()
481 printf("bbm_log_size %u\n", meta->bbm_log_size); in g_raid_md_intel_print()
482 printf("Flags: S - Spare, A - Assigned, F - Failed, O - Online, D - Disabled\n"); in g_raid_md_intel_print()
484 for (i = 0; i < meta->total_disks; i++ ) { in g_raid_md_intel_print()
485 printf(" %d <%.16s> %u %u 0x%08x 0x%b %08x\n", i, 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()
491 for (i = 0; i < meta->total_volumes; i++) { in g_raid_md_intel_print()
494 printf(" name %.16s\n", mvol->name); in g_raid_md_intel_print()
495 printf(" total_sectors %ju\n", mvol->total_sectors); in g_raid_md_intel_print()
496 printf(" state 0x%b\n", mvol->state, in g_raid_md_intel_print()
511 printf(" reserved %u\n", mvol->reserved); in g_raid_md_intel_print()
512 printf(" migr_priority %u\n", mvol->migr_priority); in g_raid_md_intel_print()
513 printf(" num_sub_vols %u\n", mvol->num_sub_vols); in g_raid_md_intel_print()
514 printf(" tid %u\n", mvol->tid); in g_raid_md_intel_print()
515 printf(" cng_master_disk %u\n", mvol->cng_master_disk); in g_raid_md_intel_print()
516 printf(" cache_policy %u\n", mvol->cache_policy); in g_raid_md_intel_print()
517 printf(" cng_state %u (%s)\n", mvol->cng_state, in g_raid_md_intel_print()
518 intel_cngst2str(mvol->cng_state)); in g_raid_md_intel_print()
519 printf(" cng_sub_state %u\n", mvol->cng_sub_state); in g_raid_md_intel_print()
520 printf(" curr_migr_unit %u\n", mvol->curr_migr_unit); in g_raid_md_intel_print()
521 printf(" curr_migr_unit_hi %u\n", mvol->curr_migr_unit_hi); in g_raid_md_intel_print()
522 printf(" checkpoint_id %u\n", mvol->checkpoint_id); in g_raid_md_intel_print()
523 printf(" migr_state %u\n", mvol->migr_state); in g_raid_md_intel_print()
524 printf(" migr_type %u (%s)\n", mvol->migr_type, in g_raid_md_intel_print()
525 intel_mt2str(mvol->migr_type)); in g_raid_md_intel_print()
526 printf(" dirty %u\n", mvol->dirty); in g_raid_md_intel_print()
527 printf(" fs_state %u\n", mvol->fs_state); in g_raid_md_intel_print()
528 printf(" verify_errors %u\n", mvol->verify_errors); in g_raid_md_intel_print()
529 printf(" bad_blocks %u\n", mvol->bad_blocks); in g_raid_md_intel_print()
531 for (j = 0; j < (mvol->migr_state ? 2 : 1); j++) { in g_raid_md_intel_print()
534 printf(" offset %u\n", mmap->offset); in g_raid_md_intel_print()
535 printf(" offset_hi %u\n", mmap->offset_hi); in g_raid_md_intel_print()
536 printf(" disk_sectors %u\n", mmap->disk_sectors); in g_raid_md_intel_print()
537 printf(" disk_sectors_hi %u\n", mmap->disk_sectors_hi); in g_raid_md_intel_print()
538 printf(" stripe_count %u\n", mmap->stripe_count); in g_raid_md_intel_print()
539 printf(" stripe_count_hi %u\n", mmap->stripe_count_hi); in g_raid_md_intel_print()
540 printf(" strip_sectors %u\n", mmap->strip_sectors); in g_raid_md_intel_print()
541 printf(" status %u (%s)\n", mmap->status, in g_raid_md_intel_print()
542 intel_status2str(mmap->status)); in g_raid_md_intel_print()
543 printf(" type %u (%s)\n", mmap->type, in g_raid_md_intel_print()
544 intel_type2str(mmap->type)); in g_raid_md_intel_print()
545 printf(" total_disks %u\n", mmap->total_disks); in g_raid_md_intel_print()
546 printf(" total_domains %u\n", mmap->total_domains); in g_raid_md_intel_print()
547 printf(" failed_disk_num %u\n", mmap->failed_disk_num); in g_raid_md_intel_print()
548 printf(" ddf %u\n", mmap->ddf); in g_raid_md_intel_print()
550 for (k = 0; k < mmap->total_disks; k++) in g_raid_md_intel_print()
551 printf(" 0x%08x", mmap->disk_idx[k]); in g_raid_md_intel_print()
563 nmeta = malloc(meta->config_size, M_MD_INTEL, M_WAITOK); in intel_meta_copy()
564 memcpy(nmeta, meta, meta->config_size); in intel_meta_copy()
573 for (pos = 0; pos < meta->total_disks; pos++) { in intel_meta_find_disk()
574 if (strncmp(meta->disk[pos].serial, in intel_meta_find_disk()
578 return (-1); in intel_meta_find_disk()
592 pp = cp->provider; in intel_meta_read()
593 if (pp->sectorsize < sizeof(*meta)) in intel_meta_read()
597 pp->mediasize - pp->sectorsize * 2, pp->sectorsize, &error); in intel_meta_read()
600 pp->name, error); in intel_meta_read()
606 if (strncmp(meta->intel_id, INTEL_MAGIC, strlen(INTEL_MAGIC))) { in intel_meta_read()
607 G_RAID_DEBUG(1, "Intel signature check failed on %s", pp->name); in intel_meta_read()
611 if (meta->config_size > 65536 || in intel_meta_read()
612 meta->config_size < sizeof(struct intel_raid_conf)) { in intel_meta_read()
614 meta->config_size); in intel_meta_read()
618 size = meta->config_size; in intel_meta_read()
620 memcpy(meta, buf, min(size, pp->sectorsize)); in intel_meta_read()
624 if (meta->config_size > pp->sectorsize) { in intel_meta_read()
625 left = (meta->config_size - 1) / pp->sectorsize; in intel_meta_read()
627 pp->mediasize - pp->sectorsize * (2 + left), in intel_meta_read()
628 pp->sectorsize * left, &error); in intel_meta_read()
632 pp->name, error); in intel_meta_read()
636 memcpy(((char *)meta) + pp->sectorsize, buf, in intel_meta_read()
637 pp->sectorsize * left); in intel_meta_read()
643 i < (meta->config_size / sizeof(uint32_t)); i++) { in intel_meta_read()
646 checksum -= meta->checksum; in intel_meta_read()
647 if (checksum != meta->checksum) { in intel_meta_read()
648 G_RAID_DEBUG(1, "Intel checksum check failed on %s", pp->name); in intel_meta_read()
655 sizeof(struct intel_raid_disk) * (meta->total_disks - 1) + in intel_meta_read()
656 sizeof(struct intel_raid_vol) * meta->total_volumes; in intel_meta_read()
657 if (size > meta->config_size) { in intel_meta_read()
660 meta->config_size, size); in intel_meta_read()
664 for (i = 0; i < meta->total_volumes; i++) { in intel_meta_read()
667 size += 4 * (mmap->total_disks - 1); in intel_meta_read()
668 if (size > meta->config_size) in intel_meta_read()
670 if (mvol->migr_state) { in intel_meta_read()
672 if (size > meta->config_size) in intel_meta_read()
675 size += 4 * (mmap->total_disks - 1); in intel_meta_read()
676 if (size > meta->config_size) in intel_meta_read()
683 if (strncmp(meta->version, INTEL_VERSION_1300, 6) > 0) { in intel_meta_read()
685 meta->version); in intel_meta_read()
690 if (strncmp(meta->version, INTEL_VERSION_1300, 6) >= 0 && in intel_meta_read()
691 (meta->attributes & ~INTEL_ATTR_SUPPORTED) != 0) { in intel_meta_read()
692 G_RAID_DEBUG(1, "Intel unsupported attributes: 0x%08x", in intel_meta_read()
693 meta->attributes & ~INTEL_ATTR_SUPPORTED); in intel_meta_read()
699 for (i = 0; i < meta->total_volumes; i++) { in intel_meta_read()
701 for (j = 0; j < (mvol->migr_state ? 2 : 1); j++) { in intel_meta_read()
703 for (k = 0; k < mmap->total_disks; k++) { in intel_meta_read()
704 if ((mmap->disk_idx[k] & INTEL_DI_IDX) > in intel_meta_read()
705 meta->total_disks) { in intel_meta_read()
708 mmap->disk_idx[k] & INTEL_DI_IDX, in intel_meta_read()
709 meta->total_disks); in intel_meta_read()
718 for (i = 0; i < meta->total_volumes; i++) { in intel_meta_read()
721 if (mvol->migr_state && in intel_meta_read()
722 mvol->migr_type != INTEL_MT_INIT && in intel_meta_read()
723 mvol->migr_type != INTEL_MT_REBUILD && in intel_meta_read()
724 mvol->migr_type != INTEL_MT_VERIFY && in intel_meta_read()
725 mvol->migr_type != INTEL_MT_GEN_MIGR && in intel_meta_read()
726 mvol->migr_type != INTEL_MT_REPAIR) { in intel_meta_read()
728 " migration type %d", mvol->migr_type); in intel_meta_read()
732 /* Deny general migrations except SINGLE->RAID1. */ in intel_meta_read()
733 if (mvol->migr_state && in intel_meta_read()
734 mvol->migr_type == INTEL_MT_GEN_MIGR) { in intel_meta_read()
737 if (mmap1->total_disks != 1 || in intel_meta_read()
738 mmap->type != INTEL_T_RAID1 || in intel_meta_read()
739 mmap->total_disks != 2 || in intel_meta_read()
740 mmap->offset != mmap1->offset || in intel_meta_read()
741 mmap->disk_sectors != mmap1->disk_sectors || in intel_meta_read()
742 mmap->total_domains != mmap->total_disks || in intel_meta_read()
743 mmap->offset_hi != mmap1->offset_hi || in intel_meta_read()
744 mmap->disk_sectors_hi != mmap1->disk_sectors_hi || in intel_meta_read()
745 (mmap->disk_idx[0] != mmap1->disk_idx[0] && in intel_meta_read()
746 mmap->disk_idx[0] != mmap1->disk_idx[1])) { in intel_meta_read()
766 pp = cp->provider; in intel_meta_write()
769 meta->checksum = 0; in intel_meta_write()
771 i < (meta->config_size / sizeof(uint32_t)); i++) { in intel_meta_write()
774 meta->checksum = checksum; in intel_meta_write()
777 sectors = howmany(meta->config_size, pp->sectorsize); in intel_meta_write()
778 buf = malloc(sectors * pp->sectorsize, M_MD_INTEL, M_WAITOK | M_ZERO); in intel_meta_write()
780 memcpy(buf, ((char *)meta) + pp->sectorsize, in intel_meta_write()
781 (sectors - 1) * pp->sectorsize); in intel_meta_write()
783 memcpy(buf + (sectors - 1) * pp->sectorsize, meta, pp->sectorsize); in intel_meta_write()
786 pp->mediasize - pp->sectorsize * (1 + sectors), in intel_meta_write()
787 buf, pp->sectorsize * sectors); in intel_meta_write()
790 pp->name, error); in intel_meta_write()
804 pp = cp->provider; in intel_meta_erase()
805 buf = malloc(pp->sectorsize, M_MD_INTEL, M_WAITOK | M_ZERO); in intel_meta_erase()
807 pp->mediasize - 2 * pp->sectorsize, in intel_meta_erase()
808 buf, pp->sectorsize); in intel_meta_erase()
811 pp->name, error); in intel_meta_erase()
825 memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC) - 1); in intel_meta_write_spare()
826 memcpy(&meta->version[0], INTEL_VERSION_1000, in intel_meta_write_spare()
827 sizeof(INTEL_VERSION_1000) - 1); in intel_meta_write_spare()
828 meta->config_size = INTEL_MAX_MD_SIZE(1); in intel_meta_write_spare()
829 meta->config_id = meta->orig_config_id = arc4random(); in intel_meta_write_spare()
830 meta->generation = 1; in intel_meta_write_spare()
831 meta->total_disks = 1; in intel_meta_write_spare()
832 meta->disk[0] = *d; in intel_meta_write_spare()
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()
846 if (pd->pd_disk_pos == id) in g_raid_md_intel_get_disk()
897 TAILQ_FOREACH(mvol, &sc->sc_volumes, v_next) { in g_raid_md_intel_get_volume()
898 pv = mvol->v_md_data; in g_raid_md_intel_get_volume()
899 if (pv->pv_volume_pos == id) in g_raid_md_intel_get_volume()
912 struct g_raid_md_intel_object *mdi; in g_raid_md_intel_start_disk() local
920 sc = disk->d_softc; in g_raid_md_intel_start_disk()
921 md = sc->sc_md; in g_raid_md_intel_start_disk()
922 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_intel_start_disk()
923 meta = mdi->mdio_meta; 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()
928 disk_pos = intel_meta_find_disk(meta, pd->pd_disk_meta.serial); in g_raid_md_intel_start_disk()
932 if ((pd->pd_disk_meta.flags & INTEL_F_FAILED) && in g_raid_md_intel_start_disk()
933 !(pd->pd_disk_meta.flags & INTEL_F_DISABLED)) { in g_raid_md_intel_start_disk()
938 if (!mdi->mdio_started) 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()
944 TAILQ_FOREACH(tmpdisk, &sc->sc_disks, d_next) { in g_raid_md_intel_start_disk()
945 if (tmpdisk->d_state != G_RAID_DISK_S_OFFLINE && in g_raid_md_intel_start_disk()
946 tmpdisk->d_state != G_RAID_DISK_S_FAILED) in g_raid_md_intel_start_disk()
949 TAILQ_FOREACH(sd, &tmpdisk->d_subdisks, sd_next) { in g_raid_md_intel_start_disk()
951 intel_get_disk_sectors(&pd->pd_disk_meta); in g_raid_md_intel_start_disk()
953 if (sd->sd_offset + sd->sd_size + 4096 > in g_raid_md_intel_start_disk()
960 sd->sd_offset + sd->sd_size + 4096); in g_raid_md_intel_start_disk()
966 if (tmpdisk->d_state == G_RAID_DISK_S_OFFLINE) { in g_raid_md_intel_start_disk()
974 if (pd->pd_disk_meta.flags & INTEL_F_SPARE) { in g_raid_md_intel_start_disk()
984 oldpd = (struct g_raid_md_intel_perdisk *)olddisk->d_md_data; in g_raid_md_intel_start_disk()
985 disk_pos = oldpd->pd_disk_pos; in g_raid_md_intel_start_disk()
994 if (olddisk->d_state != G_RAID_DISK_S_OFFLINE) { in g_raid_md_intel_start_disk()
1000 oldpd = (struct g_raid_md_intel_perdisk *)olddisk->d_md_data; in g_raid_md_intel_start_disk()
1004 TAILQ_FOREACH_SAFE(sd, &olddisk->d_subdisks, sd_next, tmpsd) { in g_raid_md_intel_start_disk()
1005 TAILQ_REMOVE(&olddisk->d_subdisks, sd, sd_next); 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()
1009 oldpd->pd_disk_pos = -2; in g_raid_md_intel_start_disk()
1010 pd->pd_disk_pos = disk_pos; in g_raid_md_intel_start_disk()
1012 /* If it was placeholder -- destroy it. */ in g_raid_md_intel_start_disk()
1013 if (olddisk->d_state == G_RAID_DISK_S_OFFLINE) { in g_raid_md_intel_start_disk()
1019 memcpy(&meta->disk[disk_pos], &pd->pd_disk_meta, in g_raid_md_intel_start_disk()
1024 if ((meta->disk[disk_pos].flags & INTEL_F_DISABLED) && in g_raid_md_intel_start_disk()
1025 !(pd->pd_disk_meta.flags & INTEL_F_SPARE)) 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()
1031 else if (meta->disk[disk_pos].flags & INTEL_F_SPARE) in g_raid_md_intel_start_disk()
1035 TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { in g_raid_md_intel_start_disk()
1036 pv = sd->sd_volume->v_md_data; in g_raid_md_intel_start_disk()
1037 mvol = intel_get_volume(meta, pv->pv_volume_pos); in g_raid_md_intel_start_disk()
1039 if (mvol->migr_state) in g_raid_md_intel_start_disk()
1045 for (i = 0; i < mmap0->total_disks; i++) { in g_raid_md_intel_start_disk()
1046 if ((mmap0->disk_idx[i] & INTEL_DI_RBLD) == 0 && in g_raid_md_intel_start_disk()
1047 (mmap1->disk_idx[i] & INTEL_DI_RBLD) != 0) in g_raid_md_intel_start_disk()
1051 if ((meta->disk[disk_pos].flags & INTEL_F_DISABLED) && in g_raid_md_intel_start_disk()
1052 !(pd->pd_disk_meta.flags & INTEL_F_SPARE)) { 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()
1064 } else if (mvol->migr_state == 0) { in g_raid_md_intel_start_disk()
1065 if (mmap0->status == INTEL_S_UNINITIALIZED && in g_raid_md_intel_start_disk()
1066 (!pv->pv_cng || pv->pv_cng_master_disk != disk_pos)) { in g_raid_md_intel_start_disk()
1070 } else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { in g_raid_md_intel_start_disk()
1074 } else if (mvol->dirty && (!pv->pv_cng || in g_raid_md_intel_start_disk()
1075 pv->pv_cng_master_disk != disk_pos)) { in g_raid_md_intel_start_disk()
1084 } else if (mvol->migr_type == INTEL_MT_INIT || in g_raid_md_intel_start_disk()
1085 mvol->migr_type == INTEL_MT_REBUILD) { in g_raid_md_intel_start_disk()
1086 if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { in g_raid_md_intel_start_disk()
1090 } else if (mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { in g_raid_md_intel_start_disk()
1094 if (mvol->dirty) { in g_raid_md_intel_start_disk()
1095 sd->sd_rebuild_pos = 0; in g_raid_md_intel_start_disk()
1097 sd->sd_rebuild_pos = in g_raid_md_intel_start_disk()
1099 sd->sd_volume->v_strip_size * in g_raid_md_intel_start_disk()
1100 mmap0->total_domains; in g_raid_md_intel_start_disk()
1102 } else if (mvol->migr_type == INTEL_MT_INIT && in g_raid_md_intel_start_disk()
1107 } else if (mvol->dirty && (!pv->pv_cng || in g_raid_md_intel_start_disk()
1108 pv->pv_cng_master_disk != disk_pos)) { in g_raid_md_intel_start_disk()
1117 } else if (mvol->migr_type == INTEL_MT_VERIFY || in g_raid_md_intel_start_disk()
1118 mvol->migr_type == INTEL_MT_REPAIR) { in g_raid_md_intel_start_disk()
1119 if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { in g_raid_md_intel_start_disk()
1123 } else if ((mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) || in g_raid_md_intel_start_disk()
1128 if (mvol->dirty) { in g_raid_md_intel_start_disk()
1129 sd->sd_rebuild_pos = 0; in g_raid_md_intel_start_disk()
1131 sd->sd_rebuild_pos = in g_raid_md_intel_start_disk()
1133 sd->sd_volume->v_strip_size * in g_raid_md_intel_start_disk()
1134 mmap0->total_domains; in g_raid_md_intel_start_disk()
1136 } else if (mvol->dirty) { in g_raid_md_intel_start_disk()
1145 } else if (mvol->migr_type == INTEL_MT_GEN_MIGR) { in g_raid_md_intel_start_disk()
1146 if ((mmap1->disk_idx[0] & INTEL_DI_IDX) != disk_pos) { in g_raid_md_intel_start_disk()
1161 if (mdi->mdio_started) { in g_raid_md_intel_start_disk()
1162 mdi->mdio_incomplete = in g_raid_md_intel_start_disk()
1165 meta->total_disks); in g_raid_md_intel_start_disk()
1184 struct g_raid_md_intel_object *mdi; in g_raid_md_intel_refill() local
1190 md = sc->sc_md; in g_raid_md_intel_refill()
1191 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_intel_refill()
1192 meta = mdi->mdio_meta; in g_raid_md_intel_refill()
1198 if (na == meta->total_disks) in g_raid_md_intel_refill()
1201 G_RAID_DEBUG1(1, md->mdo_softc, in g_raid_md_intel_refill()
1203 "trying to refill.", na, meta->total_disks); in g_raid_md_intel_refill()
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()
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()
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()
1221 if (disk->d_state == G_RAID_DISK_S_ACTIVE) in g_raid_md_intel_refill()
1230 meta = mdi->mdio_meta; in g_raid_md_intel_refill()
1234 mdi->mdio_incomplete = (g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE) + in g_raid_md_intel_refill()
1235 g_raid_ndisks(sc, G_RAID_DISK_S_DISABLED) < meta->total_disks); in g_raid_md_intel_refill()
1238 if (mdi->mdio_incomplete) { in g_raid_md_intel_refill()
1250 struct g_raid_md_intel_object *mdi; in g_raid_md_intel_start() local
1261 md = sc->sc_md; in g_raid_md_intel_start()
1262 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_intel_start()
1263 meta = mdi->mdio_meta; in g_raid_md_intel_start()
1266 for (i = 0; i < meta->total_volumes; i++) { in g_raid_md_intel_start()
1269 vol = g_raid_create_volume(sc, mvol->name, mvol->tid - 1); in g_raid_md_intel_start()
1271 pv->pv_volume_pos = i; in g_raid_md_intel_start()
1272 pv->pv_cng = (mvol->state & INTEL_ST_CLONE_N_GO) != 0; in g_raid_md_intel_start()
1273 pv->pv_cng_man_sync = (mvol->state & INTEL_ST_CLONE_MAN_SYNC) != 0; in g_raid_md_intel_start()
1274 if (mvol->cng_master_disk < mmap->total_disks) in g_raid_md_intel_start()
1275 pv->pv_cng_master_disk = mvol->cng_master_disk; in g_raid_md_intel_start()
1276 vol->v_md_data = pv; in g_raid_md_intel_start()
1277 vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_NONE; in g_raid_md_intel_start()
1278 if (mmap->type == INTEL_T_RAID0) in g_raid_md_intel_start()
1279 vol->v_raid_level = G_RAID_VOLUME_RL_RAID0; in g_raid_md_intel_start()
1280 else if (mmap->type == INTEL_T_RAID1 && in g_raid_md_intel_start()
1281 mmap->total_domains >= 2 && in g_raid_md_intel_start()
1282 mmap->total_domains <= mmap->total_disks) { in g_raid_md_intel_start()
1284 if (mmap->total_domains == mmap->total_disks) in g_raid_md_intel_start()
1285 vol->v_raid_level = G_RAID_VOLUME_RL_RAID1; in g_raid_md_intel_start()
1287 vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E; in g_raid_md_intel_start()
1288 } else if (mmap->type == INTEL_T_RAID1) { in g_raid_md_intel_start()
1290 if (mmap->total_disks <= 2) in g_raid_md_intel_start()
1291 vol->v_raid_level = G_RAID_VOLUME_RL_RAID1; in g_raid_md_intel_start()
1293 vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E; in g_raid_md_intel_start()
1294 } else if (mmap->type == INTEL_T_RAID5) { in g_raid_md_intel_start()
1295 vol->v_raid_level = G_RAID_VOLUME_RL_RAID5; in g_raid_md_intel_start()
1296 vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_R5LA; in g_raid_md_intel_start()
1298 vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN; in g_raid_md_intel_start()
1299 vol->v_strip_size = (u_int)mmap->strip_sectors * 512; //ZZZ in g_raid_md_intel_start()
1300 vol->v_disks_count = mmap->total_disks; in g_raid_md_intel_start()
1301 vol->v_mediasize = (off_t)mvol->total_sectors * 512; //ZZZ in g_raid_md_intel_start()
1302 vol->v_sectorsize = 512; //ZZZ in g_raid_md_intel_start()
1303 for (j = 0; j < vol->v_disks_count; j++) { in g_raid_md_intel_start()
1304 sd = &vol->v_subdisks[j]; in g_raid_md_intel_start()
1305 sd->sd_offset = intel_get_map_offset(mmap) * 512; //ZZZ in g_raid_md_intel_start()
1306 sd->sd_size = intel_get_map_disk_sectors(mmap) * 512; //ZZZ in g_raid_md_intel_start()
1312 for (disk_pos = 0; disk_pos < meta->total_disks; disk_pos++) { in g_raid_md_intel_start()
1314 pd->pd_disk_pos = disk_pos; in g_raid_md_intel_start()
1315 pd->pd_disk_meta = meta->disk[disk_pos]; 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()
1319 for (i = 0; i < meta->total_volumes; i++) { in g_raid_md_intel_start()
1322 for (j = 0; j < mmap->total_disks; j++) { in g_raid_md_intel_start()
1323 if ((mmap->disk_idx[j] & INTEL_DI_IDX) == disk_pos) in g_raid_md_intel_start()
1326 if (j == mmap->total_disks) in g_raid_md_intel_start()
1329 sd = &vol->v_subdisks[j]; 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()
1345 mdi->mdio_started = 1; in g_raid_md_intel_start()
1352 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { in g_raid_md_intel_start()
1357 callout_stop(&mdi->mdio_start_co); in g_raid_md_intel_start()
1358 G_RAID_DEBUG1(1, sc, "root_mount_rel %p", mdi->mdio_rootmount); in g_raid_md_intel_start()
1359 root_mount_rel(mdi->mdio_rootmount); in g_raid_md_intel_start()
1360 mdi->mdio_rootmount = NULL; in g_raid_md_intel_start()
1368 struct g_raid_md_intel_object *mdi; in g_raid_md_intel_new_disk() local
1372 sc = disk->d_softc; in g_raid_md_intel_new_disk()
1373 md = sc->sc_md; in g_raid_md_intel_new_disk()
1374 mdi = (struct g_raid_md_intel_object *)md; 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()
1376 pdmeta = pd->pd_meta; in g_raid_md_intel_new_disk()
1378 if (mdi->mdio_started) { in g_raid_md_intel_new_disk()
1382 /* If we haven't started yet - check metadata freshness. */ in g_raid_md_intel_new_disk()
1383 if (mdi->mdio_meta == NULL || in g_raid_md_intel_new_disk()
1384 ((int32_t)(pdmeta->generation - mdi->mdio_generation)) > 0) { in g_raid_md_intel_new_disk()
1386 if (mdi->mdio_meta != NULL) in g_raid_md_intel_new_disk()
1387 free(mdi->mdio_meta, M_MD_INTEL); in g_raid_md_intel_new_disk()
1388 mdi->mdio_meta = intel_meta_copy(pdmeta); in g_raid_md_intel_new_disk()
1389 mdi->mdio_generation = mdi->mdio_meta->generation; in g_raid_md_intel_new_disk()
1390 mdi->mdio_disks_present = 1; in g_raid_md_intel_new_disk()
1391 } else if (pdmeta->generation == mdi->mdio_generation) { in g_raid_md_intel_new_disk()
1392 mdi->mdio_disks_present++; in g_raid_md_intel_new_disk()
1394 mdi->mdio_disks_present, in g_raid_md_intel_new_disk()
1395 mdi->mdio_meta->total_disks); in g_raid_md_intel_new_disk()
1399 /* If we collected all needed disks - start array. */ in g_raid_md_intel_new_disk()
1400 if (mdi->mdio_disks_present == mdi->mdio_meta->total_disks) in g_raid_md_intel_new_disk()
1410 struct g_raid_md_intel_object *mdi; in g_raid_intel_go() local
1413 md = sc->sc_md; in g_raid_intel_go()
1414 mdi = (struct g_raid_md_intel_object *)md; in g_raid_intel_go()
1415 if (!mdi->mdio_started) { in g_raid_intel_go()
1426 struct g_raid_md_intel_object *mdi; in g_raid_md_create_intel() local
1429 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_create_intel()
1430 mdi->mdio_config_id = mdi->mdio_orig_config_id = arc4random(); in g_raid_md_create_intel()
1431 mdi->mdio_generation = 0; in g_raid_md_create_intel()
1432 snprintf(name, sizeof(name), "Intel-%08x", mdi->mdio_config_id); in g_raid_md_create_intel()
1436 md->mdo_softc = sc; in g_raid_md_create_intel()
1437 *gp = sc->sc_geom; in g_raid_md_create_intel()
1461 len -= serlen; in g_raid_md_get_label()
1474 struct g_raid_md_intel_object *mdi, *mdi1; in g_raid_md_taste_intel() local
1485 G_RAID_DEBUG(1, "Tasting Intel on %s", cp->provider->name); in g_raid_md_taste_intel()
1486 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_taste_intel()
1487 pp = cp->provider; in g_raid_md_taste_intel()
1496 pp->name, error); in g_raid_md_taste_intel()
1501 if (pp->geom->rank == 1) in g_raid_md_taste_intel()
1509 "Intel vendor mismatch 0x%04x != 0x8086", in g_raid_md_taste_intel()
1527 if (intel_get_disk_sectors(&meta->disk[disk_pos]) != in g_raid_md_taste_intel()
1528 (pp->mediasize / pp->sectorsize)) { in g_raid_md_taste_intel()
1530 intel_get_disk_sectors(&meta->disk[disk_pos]), in g_raid_md_taste_intel()
1531 (off_t)(pp->mediasize / pp->sectorsize)); in g_raid_md_taste_intel()
1536 spare = meta->disk[disk_pos].flags & INTEL_F_SPARE; in g_raid_md_taste_intel()
1542 LIST_FOREACH(geom, &mp->geom, geom) { in g_raid_md_taste_intel()
1543 sc = geom->softc; in g_raid_md_taste_intel()
1546 if (sc->sc_stopping != 0) in g_raid_md_taste_intel()
1548 if (sc->sc_md->mdo_class != md->mdo_class) in g_raid_md_taste_intel()
1550 mdi1 = (struct g_raid_md_intel_object *)sc->sc_md; in g_raid_md_taste_intel()
1552 if (mdi1->mdio_incomplete) in g_raid_md_taste_intel()
1555 if (mdi1->mdio_config_id == meta->config_id) in g_raid_md_taste_intel()
1562 G_RAID_DEBUG(1, "Found matching array %s", sc->sc_name); in g_raid_md_taste_intel()
1565 } else if (spare) { /* Not found needy node -- left for later. */ in g_raid_md_taste_intel()
1569 } else { /* Not found matching node -- create one. */ in g_raid_md_taste_intel()
1571 mdi->mdio_config_id = meta->config_id; in g_raid_md_taste_intel()
1572 mdi->mdio_orig_config_id = meta->orig_config_id; in g_raid_md_taste_intel()
1573 snprintf(name, sizeof(name), "Intel-%08x", meta->config_id); in g_raid_md_taste_intel()
1575 md->mdo_softc = sc; in g_raid_md_taste_intel()
1576 geom = sc->sc_geom; in g_raid_md_taste_intel()
1577 callout_init(&mdi->mdio_start_co, 1); in g_raid_md_taste_intel()
1578 callout_reset(&mdi->mdio_start_co, g_raid_start_timeout * hz, in g_raid_md_taste_intel()
1580 mdi->mdio_rootmount = root_mount_hold("GRAID-Intel"); in g_raid_md_taste_intel()
1581 G_RAID_DEBUG1(1, sc, "root_mount_hold %p", mdi->mdio_rootmount); in g_raid_md_taste_intel()
1585 g_access(cp, -1, 0, 0); in g_raid_md_taste_intel()
1588 rcp->flags |= G_CF_DIRECT_RECEIVE; in g_raid_md_taste_intel()
1594 sx_xlock(&sc->sc_lock); in g_raid_md_taste_intel()
1597 pd->pd_meta = meta; in g_raid_md_taste_intel()
1598 pd->pd_disk_pos = -1; in g_raid_md_taste_intel()
1600 memcpy(&pd->pd_disk_meta.serial[0], serial, INTEL_SERIAL_LEN); in g_raid_md_taste_intel()
1601 intel_set_disk_sectors(&pd->pd_disk_meta, in g_raid_md_taste_intel()
1602 pp->mediasize / pp->sectorsize); in g_raid_md_taste_intel()
1603 pd->pd_disk_meta.id = 0; in g_raid_md_taste_intel()
1604 pd->pd_disk_meta.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()
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()
1617 sx_xunlock(&sc->sc_lock); in g_raid_md_taste_intel()
1634 struct g_raid_md_intel_object *mdi; in g_raid_md_event_intel() local
1637 sc = md->mdo_softc; in g_raid_md_event_intel()
1638 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_event_intel()
1642 if (!mdi->mdio_started) in g_raid_md_event_intel()
1646 return (-1); in g_raid_md_event_intel()
1648 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_event_intel()
1652 if (pd->pd_disk_pos >= 0) { 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()
1665 /* Otherwise -- delete. */ in g_raid_md_event_intel()
1674 if (g_raid_ndisks(sc, -1) == in g_raid_md_event_intel()
1681 return (-2); in g_raid_md_event_intel()
1692 struct g_raid_md_intel_object *mdi; in g_raid_md_ctl_intel() local
1706 sc = md->mdo_softc; in g_raid_md_ctl_intel()
1707 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_ctl_intel()
1714 return (-1); in g_raid_md_ctl_intel()
1719 return (-2); in g_raid_md_ctl_intel()
1724 return (-3); in g_raid_md_ctl_intel()
1727 levelname = "RAID5-LA"; in g_raid_md_ctl_intel()
1730 return (-4); in g_raid_md_ctl_intel()
1732 numdisks = *nargs - 3; in g_raid_md_ctl_intel()
1737 "(0x%02x/0x%02x), or number of disks (%d).", in g_raid_md_ctl_intel()
1739 return (-5); in g_raid_md_ctl_intel()
1750 error = -6; in g_raid_md_ctl_intel()
1763 error = -7; in g_raid_md_ctl_intel()
1766 pp = cp->provider; in g_raid_md_ctl_intel()
1769 pd->pd_disk_pos = i; 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()
1774 strcpy(&pd->pd_disk_meta.serial[0], "NONE"); in g_raid_md_ctl_intel()
1775 pd->pd_disk_meta.id = 0xffffffff; in g_raid_md_ctl_intel()
1776 pd->pd_disk_meta.flags = INTEL_F_ASSIGNED; in g_raid_md_ctl_intel()
1779 cp->private = disk; in g_raid_md_ctl_intel()
1783 &pd->pd_disk_meta.serial[0], INTEL_SERIAL_LEN); in g_raid_md_ctl_intel()
1788 error = -8; in g_raid_md_ctl_intel()
1794 intel_set_disk_sectors(&pd->pd_disk_meta, in g_raid_md_ctl_intel()
1795 pp->mediasize / pp->sectorsize); in g_raid_md_ctl_intel()
1796 if (size > pp->mediasize) in g_raid_md_ctl_intel()
1797 size = pp->mediasize; in g_raid_md_ctl_intel()
1798 if (sectorsize < pp->sectorsize) in g_raid_md_ctl_intel()
1799 sectorsize = pp->sectorsize; in g_raid_md_ctl_intel()
1800 pd->pd_disk_meta.id = 0; in g_raid_md_ctl_intel()
1801 pd->pd_disk_meta.flags = INTEL_F_ASSIGNED | INTEL_F_ONLINE; in g_raid_md_ctl_intel()
1808 return (-8); in g_raid_md_ctl_intel()
1812 size -= ((4096 + sectorsize - 1) / sectorsize) * sectorsize; in g_raid_md_ctl_intel()
1822 return (-9); in g_raid_md_ctl_intel()
1835 return (-10); in g_raid_md_ctl_intel()
1839 return (-11); in g_raid_md_ctl_intel()
1843 return (-12); in g_raid_md_ctl_intel()
1850 size -= (size % sectorsize); in g_raid_md_ctl_intel()
1853 size -= (size % (2 * strip)); in g_raid_md_ctl_intel()
1855 size -= (size % strip); in g_raid_md_ctl_intel()
1858 return (-13); in g_raid_md_ctl_intel()
1862 mdi->mdio_started = 1; in g_raid_md_ctl_intel()
1863 vol = g_raid_create_volume(sc, volname, -1); in g_raid_md_ctl_intel()
1865 pv->pv_volume_pos = 0; in g_raid_md_ctl_intel()
1866 vol->v_md_data = pv; in g_raid_md_ctl_intel()
1867 vol->v_raid_level = level; in g_raid_md_ctl_intel()
1868 vol->v_raid_level_qualifier = qual; in g_raid_md_ctl_intel()
1869 vol->v_strip_size = strip; in g_raid_md_ctl_intel()
1870 vol->v_disks_count = numdisks; in g_raid_md_ctl_intel()
1872 vol->v_mediasize = size * numdisks; in g_raid_md_ctl_intel()
1874 vol->v_mediasize = size; in g_raid_md_ctl_intel()
1876 vol->v_mediasize = size * (numdisks - 1); in g_raid_md_ctl_intel()
1878 vol->v_mediasize = ((size * numdisks) / strip / 2) * in g_raid_md_ctl_intel()
1881 vol->v_sectorsize = sectorsize; 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()
1887 sd = &vol->v_subdisks[pd->pd_disk_pos]; in g_raid_md_ctl_intel()
1888 sd->sd_disk = disk; in g_raid_md_ctl_intel()
1889 sd->sd_offset = 0; in g_raid_md_ctl_intel()
1890 sd->sd_size = size; in g_raid_md_ctl_intel()
1891 TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); in g_raid_md_ctl_intel()
1892 if (sd->sd_disk->d_consumer != NULL) { in g_raid_md_ctl_intel()
1922 return (-1); in g_raid_md_ctl_intel()
1927 return (-2); in g_raid_md_ctl_intel()
1932 return (-3); in g_raid_md_ctl_intel()
1935 levelname = "RAID5-LA"; in g_raid_md_ctl_intel()
1938 return (-4); in g_raid_md_ctl_intel()
1944 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { in g_raid_md_ctl_intel()
1950 return (-6); in g_raid_md_ctl_intel()
1954 return (-7); in g_raid_md_ctl_intel()
1957 numdisks = vol1->v_disks_count; in g_raid_md_ctl_intel()
1962 "(0x%02x/0x%02x), or number of disks (%d).", in g_raid_md_ctl_intel()
1964 return (-5); 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()
1975 intel_get_disk_sectors(&pd->pd_disk_meta); 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()
1989 size -= ((4096 + sectorsize - 1) / sectorsize) * sectorsize; in g_raid_md_ctl_intel()
1992 sd = &vol1->v_subdisks[0]; in g_raid_md_ctl_intel()
1993 if (sd->sd_offset > in g_raid_md_ctl_intel()
1994 size - (sd->sd_offset + sd->sd_size)) { in g_raid_md_ctl_intel()
1996 size = sd->sd_offset; in g_raid_md_ctl_intel()
1998 off = sd->sd_offset + sd->sd_size; in g_raid_md_ctl_intel()
1999 size = size - (sd->sd_offset + sd->sd_size); in g_raid_md_ctl_intel()
2010 return (-10); in g_raid_md_ctl_intel()
2014 return (-11); in g_raid_md_ctl_intel()
2018 return (-12); in g_raid_md_ctl_intel()
2025 size -= strip - off % strip; in g_raid_md_ctl_intel()
2026 off += strip - off % strip; in g_raid_md_ctl_intel()
2037 return (-9); in g_raid_md_ctl_intel()
2044 size -= (size % sectorsize); in g_raid_md_ctl_intel()
2046 size -= (size % strip); in g_raid_md_ctl_intel()
2049 return (-13); in g_raid_md_ctl_intel()
2053 return (-14); in g_raid_md_ctl_intel()
2057 vol = g_raid_create_volume(sc, volname, -1); in g_raid_md_ctl_intel()
2059 pv->pv_volume_pos = i; in g_raid_md_ctl_intel()
2060 vol->v_md_data = pv; in g_raid_md_ctl_intel()
2061 vol->v_raid_level = level; in g_raid_md_ctl_intel()
2062 vol->v_raid_level_qualifier = qual; in g_raid_md_ctl_intel()
2063 vol->v_strip_size = strip; in g_raid_md_ctl_intel()
2064 vol->v_disks_count = numdisks; in g_raid_md_ctl_intel()
2066 vol->v_mediasize = size * numdisks; in g_raid_md_ctl_intel()
2068 vol->v_mediasize = size; in g_raid_md_ctl_intel()
2070 vol->v_mediasize = size * (numdisks - 1); in g_raid_md_ctl_intel()
2072 vol->v_mediasize = ((size * numdisks) / strip / 2) * in g_raid_md_ctl_intel()
2075 vol->v_sectorsize = sectorsize; in g_raid_md_ctl_intel()
2080 disk = vol1->v_subdisks[i].sd_disk; in g_raid_md_ctl_intel()
2081 sd = &vol->v_subdisks[i]; in g_raid_md_ctl_intel()
2082 sd->sd_disk = disk; in g_raid_md_ctl_intel()
2083 sd->sd_offset = off; in g_raid_md_ctl_intel()
2084 sd->sd_size = size; 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()
2107 if (nodename != NULL && strcasecmp(sc->sc_name, nodename) != 0) in g_raid_md_ctl_intel()
2117 return (-4); 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()
2128 /* Destroy specified volume. If it was last - all node. */ in g_raid_md_ctl_intel()
2131 return (-1); in g_raid_md_ctl_intel()
2137 return (-2); in g_raid_md_ctl_intel()
2141 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { in g_raid_md_ctl_intel()
2142 if (strcmp(vol->v_name, volname) == 0) in g_raid_md_ctl_intel()
2144 pp = vol->v_provider; in g_raid_md_ctl_intel()
2147 if (strcmp(pp->name, volname) == 0) in g_raid_md_ctl_intel()
2149 if (strncmp(pp->name, "raid/", 5) == 0 && in g_raid_md_ctl_intel()
2150 strcmp(pp->name + 5, volname) == 0) in g_raid_md_ctl_intel()
2156 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { in g_raid_md_ctl_intel()
2157 if (vol->v_global_id == i) in g_raid_md_ctl_intel()
2164 return (-3); in g_raid_md_ctl_intel()
2170 vol->v_provider_open != 0) { in g_raid_md_ctl_intel()
2172 return (-4); in g_raid_md_ctl_intel()
2177 TAILQ_FOREACH(vol1, &sc->sc_volumes, v_next) 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()
2195 return (-1); in g_raid_md_ctl_intel()
2202 error = -2; 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()
2218 error = -3; in g_raid_md_ctl_intel()
2227 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_ctl_intel()
2230 intel_meta_erase(disk->d_consumer); in g_raid_md_ctl_intel()
2233 if (pd->pd_disk_pos >= 0) { 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()
2244 /* Otherwise -- delete. */ in g_raid_md_ctl_intel()
2254 if (g_raid_ndisks(sc, -1) == in g_raid_md_ctl_intel()
2264 return (-1); in g_raid_md_ctl_intel()
2273 error = -3; in g_raid_md_ctl_intel()
2284 error = -4; in g_raid_md_ctl_intel()
2287 pp = cp->provider; in g_raid_md_ctl_intel()
2298 error = -7; in g_raid_md_ctl_intel()
2303 pd->pd_disk_pos = -1; 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()
2312 memcpy(&pd->pd_disk_meta.serial[0], &serial[0], in g_raid_md_ctl_intel()
2314 intel_set_disk_sectors(&pd->pd_disk_meta, in g_raid_md_ctl_intel()
2315 pp->mediasize / pp->sectorsize); in g_raid_md_ctl_intel()
2316 pd->pd_disk_meta.id = 0; in g_raid_md_ctl_intel()
2317 pd->pd_disk_meta.flags = INTEL_F_SPARE; in g_raid_md_ctl_intel()
2321 if (disk->d_state == G_RAID_DISK_S_SPARE) { in g_raid_md_ctl_intel()
2322 intel_meta_write_spare(cp, &pd->pd_disk_meta); in g_raid_md_ctl_intel()
2324 } else if (disk->d_state != G_RAID_DISK_S_ACTIVE) { in g_raid_md_ctl_intel()
2328 error = -8; in g_raid_md_ctl_intel()
2338 return (-100); in g_raid_md_ctl_intel()
2349 struct g_raid_md_intel_object *mdi; in g_raid_md_write_intel() local
2359 sc = md->mdo_softc; in g_raid_md_write_intel()
2360 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_write_intel()
2362 if (sc->sc_stopping == G_RAID_DESTROY_HARD) in g_raid_md_write_intel()
2366 mdi->mdio_generation++; in g_raid_md_write_intel()
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()
2372 if (pd->pd_disk_pos < 0) in g_raid_md_write_intel()
2375 if (disk->d_state == G_RAID_DISK_S_ACTIVE) { in g_raid_md_write_intel()
2376 pd->pd_disk_meta.flags = in g_raid_md_write_intel()
2378 } else if (disk->d_state == G_RAID_DISK_S_FAILED) { in g_raid_md_write_intel()
2379 pd->pd_disk_meta.flags = INTEL_F_FAILED | in g_raid_md_write_intel()
2381 } else if (disk->d_state == G_RAID_DISK_S_DISABLED) { in g_raid_md_write_intel()
2382 pd->pd_disk_meta.flags = INTEL_F_FAILED | in g_raid_md_write_intel()
2385 if (!(pd->pd_disk_meta.flags & INTEL_F_DISABLED)) in g_raid_md_write_intel()
2386 pd->pd_disk_meta.flags = INTEL_F_ASSIGNED; in g_raid_md_write_intel()
2387 if (pd->pd_disk_meta.id != 0xffffffff) { in g_raid_md_write_intel()
2388 pd->pd_disk_meta.id = 0xffffffff; in g_raid_md_write_intel()
2389 len = strlen(pd->pd_disk_meta.serial); in g_raid_md_write_intel()
2390 len = min(len, INTEL_SERIAL_LEN - 3); in g_raid_md_write_intel()
2391 strcpy(pd->pd_disk_meta.serial + len, ":0"); in g_raid_md_write_intel()
2399 memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC) - 1); in g_raid_md_write_intel()
2400 meta->config_size = INTEL_MAX_MD_SIZE(numdisks); in g_raid_md_write_intel()
2401 meta->config_id = mdi->mdio_config_id; in g_raid_md_write_intel()
2402 meta->orig_config_id = mdi->mdio_orig_config_id; in g_raid_md_write_intel()
2403 meta->generation = mdi->mdio_generation; in g_raid_md_write_intel()
2404 meta->attributes = INTEL_ATTR_CHECKSUM; in g_raid_md_write_intel()
2405 meta->total_disks = numdisks; 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()
2408 if (pd->pd_disk_pos < 0) in g_raid_md_write_intel()
2410 meta->disk[pd->pd_disk_pos] = pd->pd_disk_meta; in g_raid_md_write_intel()
2411 if (pd->pd_disk_meta.sectors_hi != 0) in g_raid_md_write_intel()
2412 meta->attributes |= INTEL_ATTR_2TB_DISK; in g_raid_md_write_intel()
2418 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { in g_raid_md_write_intel()
2419 pv = vol->v_md_data; in g_raid_md_write_intel()
2420 if (vol->v_stopping) in g_raid_md_write_intel()
2425 pv->pv_volume_pos = vi; in g_raid_md_write_intel()
2427 for (sdi = 0; sdi < vol->v_disks_count; sdi++) { in g_raid_md_write_intel()
2428 sd = &vol->v_subdisks[sdi]; in g_raid_md_write_intel()
2429 if (sd->sd_disk != NULL) in g_raid_md_write_intel()
2432 if (sdi >= vol->v_disks_count) in g_raid_md_write_intel()
2434 if (vol->v_mediasize >= 0x20000000000llu) in g_raid_md_write_intel()
2435 meta->attributes |= INTEL_ATTR_2TB; in g_raid_md_write_intel()
2436 if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0) in g_raid_md_write_intel()
2437 meta->attributes |= INTEL_ATTR_RAID0; in g_raid_md_write_intel()
2438 else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1) in g_raid_md_write_intel()
2439 meta->attributes |= INTEL_ATTR_RAID1; in g_raid_md_write_intel()
2440 else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID5) in g_raid_md_write_intel()
2441 meta->attributes |= INTEL_ATTR_RAID5; in g_raid_md_write_intel()
2442 else if ((vol->v_disks_count & 1) == 0) in g_raid_md_write_intel()
2443 meta->attributes |= INTEL_ATTR_RAID10; in g_raid_md_write_intel()
2445 meta->attributes |= INTEL_ATTR_RAID1E; in g_raid_md_write_intel()
2446 if (pv->pv_cng) in g_raid_md_write_intel()
2447 meta->attributes |= INTEL_ATTR_RAIDCNG; in g_raid_md_write_intel()
2448 if (vol->v_strip_size > 131072) in g_raid_md_write_intel()
2449 meta->attributes |= INTEL_ATTR_EXT_STRIP; in g_raid_md_write_intel()
2451 if (pv->pv_cng) in g_raid_md_write_intel()
2453 else if (vol->v_disks_count > 4) in g_raid_md_write_intel()
2455 else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID5) in g_raid_md_write_intel()
2457 else if (vol->v_disks_count > 2) in g_raid_md_write_intel()
2459 else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1) in g_raid_md_write_intel()
2466 strlcpy(&mvol->name[0], vol->v_name, sizeof(mvol->name)); in g_raid_md_write_intel()
2467 mvol->total_sectors = vol->v_mediasize / sectorsize; in g_raid_md_write_intel()
2468 mvol->state = (INTEL_ST_READ_COALESCING | in g_raid_md_write_intel()
2470 mvol->tid = vol->v_global_id + 1; in g_raid_md_write_intel()
2471 if (pv->pv_cng) { in g_raid_md_write_intel()
2472 mvol->state |= INTEL_ST_CLONE_N_GO; in g_raid_md_write_intel()
2473 if (pv->pv_cng_man_sync) in g_raid_md_write_intel()
2474 mvol->state |= INTEL_ST_CLONE_MAN_SYNC; in g_raid_md_write_intel()
2475 mvol->cng_master_disk = pv->pv_cng_master_disk; in g_raid_md_write_intel()
2476 if (vol->v_subdisks[pv->pv_cng_master_disk].sd_state == in g_raid_md_write_intel()
2478 mvol->cng_state = INTEL_CNGST_MASTER_MISSING; in g_raid_md_write_intel()
2479 else if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL) in g_raid_md_write_intel()
2480 mvol->cng_state = INTEL_CNGST_NEEDS_UPDATE; in g_raid_md_write_intel()
2482 mvol->cng_state = INTEL_CNGST_UPDATED; in g_raid_md_write_intel()
2489 for (sdi = 0; sdi < vol->v_disks_count; sdi++) { in g_raid_md_write_intel()
2490 sd = &vol->v_subdisks[sdi]; in g_raid_md_write_intel()
2491 if (sd->sd_state == G_RAID_SUBDISK_S_REBUILD) in g_raid_md_write_intel()
2493 else if (sd->sd_state == G_RAID_SUBDISK_S_RESYNC && in g_raid_md_write_intel()
2496 else if (sd->sd_state == G_RAID_SUBDISK_S_STALE) in g_raid_md_write_intel()
2498 if ((sd->sd_state == G_RAID_SUBDISK_S_REBUILD || in g_raid_md_write_intel()
2499 sd->sd_state == G_RAID_SUBDISK_S_RESYNC) && in g_raid_md_write_intel()
2500 sd->sd_rebuild_pos < pos) in g_raid_md_write_intel()
2501 pos = sd->sd_rebuild_pos; in g_raid_md_write_intel()
2504 mvol->migr_state = 1; in g_raid_md_write_intel()
2505 mvol->migr_type = INTEL_MT_REBUILD; in g_raid_md_write_intel()
2507 mvol->migr_state = 1; in g_raid_md_write_intel()
2508 /* mvol->migr_type = INTEL_MT_REPAIR; */ in g_raid_md_write_intel()
2509 mvol->migr_type = INTEL_MT_VERIFY; in g_raid_md_write_intel()
2510 mvol->state |= INTEL_ST_VERIFY_AND_FIX; in g_raid_md_write_intel()
2512 mvol->migr_state = 0; in g_raid_md_write_intel()
2513 mvol->dirty = (vol->v_dirty || stale); in g_raid_md_write_intel()
2518 intel_set_map_offset(mmap0, sd->sd_offset / sectorsize); in g_raid_md_write_intel()
2519 intel_set_map_disk_sectors(mmap0, sd->sd_size / sectorsize); in g_raid_md_write_intel()
2520 mmap0->strip_sectors = vol->v_strip_size / sectorsize; in g_raid_md_write_intel()
2521 if (vol->v_state == G_RAID_VOLUME_S_BROKEN) in g_raid_md_write_intel()
2522 mmap0->status = INTEL_S_FAILURE; in g_raid_md_write_intel()
2523 else if (vol->v_state == G_RAID_VOLUME_S_DEGRADED) in g_raid_md_write_intel()
2524 mmap0->status = INTEL_S_DEGRADED; in g_raid_md_write_intel()
2526 == g_raid_nsubdisks(vol, -1)) in g_raid_md_write_intel()
2527 mmap0->status = INTEL_S_UNINITIALIZED; in g_raid_md_write_intel()
2529 mmap0->status = INTEL_S_READY; in g_raid_md_write_intel()
2530 if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0) in g_raid_md_write_intel()
2531 mmap0->type = INTEL_T_RAID0; in g_raid_md_write_intel()
2532 else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 || in g_raid_md_write_intel()
2533 vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E) in g_raid_md_write_intel()
2534 mmap0->type = INTEL_T_RAID1; in g_raid_md_write_intel()
2536 mmap0->type = INTEL_T_RAID5; in g_raid_md_write_intel()
2537 mmap0->total_disks = vol->v_disks_count; in g_raid_md_write_intel()
2538 if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1) in g_raid_md_write_intel()
2539 mmap0->total_domains = vol->v_disks_count; in g_raid_md_write_intel()
2540 else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E) in g_raid_md_write_intel()
2541 mmap0->total_domains = 2; in g_raid_md_write_intel()
2543 mmap0->total_domains = 1; in g_raid_md_write_intel()
2545 sd->sd_size / vol->v_strip_size / mmap0->total_domains); in g_raid_md_write_intel()
2546 mmap0->failed_disk_num = 0xff; in g_raid_md_write_intel()
2547 mmap0->ddf = 1; in g_raid_md_write_intel()
2549 /* If there are two maps - copy common and update. */ in g_raid_md_write_intel()
2550 if (mvol->migr_state) { in g_raid_md_write_intel()
2552 pos / vol->v_strip_size / mmap0->total_domains); in g_raid_md_write_intel()
2555 mmap0->status = INTEL_S_READY; in g_raid_md_write_intel()
2560 for (sdi = 0; sdi < vol->v_disks_count; sdi++) { in g_raid_md_write_intel()
2561 sd = &vol->v_subdisks[sdi]; in g_raid_md_write_intel()
2563 sd->sd_disk->d_md_data; in g_raid_md_write_intel()
2564 mmap0->disk_idx[sdi] = pd->pd_disk_pos; in g_raid_md_write_intel()
2565 if (mvol->migr_state) in g_raid_md_write_intel()
2566 mmap1->disk_idx[sdi] = pd->pd_disk_pos; in g_raid_md_write_intel()
2567 if (sd->sd_state == G_RAID_SUBDISK_S_REBUILD || in g_raid_md_write_intel()
2568 sd->sd_state == G_RAID_SUBDISK_S_RESYNC) { in g_raid_md_write_intel()
2569 mmap1->disk_idx[sdi] |= INTEL_DI_RBLD; in g_raid_md_write_intel()
2570 } else if (sd->sd_state != G_RAID_SUBDISK_S_ACTIVE && in g_raid_md_write_intel()
2571 sd->sd_state != G_RAID_SUBDISK_S_STALE && in g_raid_md_write_intel()
2572 sd->sd_state != G_RAID_SUBDISK_S_UNINITIALIZED) { in g_raid_md_write_intel()
2573 mmap0->disk_idx[sdi] |= INTEL_DI_RBLD; in g_raid_md_write_intel()
2574 if (mvol->migr_state) in g_raid_md_write_intel()
2575 mmap1->disk_idx[sdi] |= INTEL_DI_RBLD; in g_raid_md_write_intel()
2577 if ((sd->sd_state == G_RAID_SUBDISK_S_NONE || in g_raid_md_write_intel()
2578 sd->sd_state == G_RAID_SUBDISK_S_FAILED || in g_raid_md_write_intel()
2579 sd->sd_state == G_RAID_SUBDISK_S_REBUILD) && in g_raid_md_write_intel()
2580 mmap0->failed_disk_num == 0xff) { in g_raid_md_write_intel()
2581 mmap0->failed_disk_num = sdi; in g_raid_md_write_intel()
2582 if (mvol->migr_state) in g_raid_md_write_intel()
2583 mmap1->failed_disk_num = sdi; in g_raid_md_write_intel()
2588 meta->total_volumes = vi; in g_raid_md_write_intel()
2589 if (vi > 1 || meta->attributes & in g_raid_md_write_intel()
2593 meta->attributes &= INTEL_ATTR_CHECKSUM; in g_raid_md_write_intel()
2594 memcpy(&meta->version[0], version, sizeof(INTEL_VERSION_1000) - 1); in g_raid_md_write_intel()
2598 if (mdi->mdio_meta != NULL) in g_raid_md_write_intel()
2599 free(mdi->mdio_meta, M_MD_INTEL); in g_raid_md_write_intel()
2600 mdi->mdio_meta = meta; 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()
2605 if (pd->pd_meta != NULL) { in g_raid_md_write_intel()
2606 free(pd->pd_meta, M_MD_INTEL); in g_raid_md_write_intel()
2607 pd->pd_meta = NULL; in g_raid_md_write_intel()
2609 pd->pd_meta = intel_meta_copy(meta); in g_raid_md_write_intel()
2610 intel_meta_write(disk->d_consumer, meta); in g_raid_md_write_intel()
2620 struct g_raid_md_intel_object *mdi; in g_raid_md_fail_disk_intel() local
2624 sc = md->mdo_softc; in g_raid_md_fail_disk_intel()
2625 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_fail_disk_intel()
2626 pd = (struct g_raid_md_intel_perdisk *)tdisk->d_md_data; in g_raid_md_fail_disk_intel()
2629 if (pd->pd_disk_pos < 0) in g_raid_md_fail_disk_intel()
2630 return (-1); 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()
2637 pd->pd_disk_meta.flags = INTEL_F_FAILED; in g_raid_md_fail_disk_intel()
2638 g_raid_md_intel_print(mdi->mdio_meta); in g_raid_md_fail_disk_intel()
2639 if (tdisk->d_consumer) in g_raid_md_fail_disk_intel()
2640 intel_meta_write(tdisk->d_consumer, mdi->mdio_meta); in g_raid_md_fail_disk_intel()
2644 TAILQ_FOREACH(sd, &tdisk->d_subdisks, sd_next) { in g_raid_md_fail_disk_intel()
2655 if (g_raid_ndisks(sc, -1) == in g_raid_md_fail_disk_intel()
2669 pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; in g_raid_md_free_disk_intel()
2670 if (pd->pd_meta != NULL) { in g_raid_md_free_disk_intel()
2671 free(pd->pd_meta, M_MD_INTEL); in g_raid_md_free_disk_intel()
2672 pd->pd_meta = NULL; in g_raid_md_free_disk_intel()
2675 disk->d_md_data = NULL; in g_raid_md_free_disk_intel()
2685 pv = (struct g_raid_md_intel_pervolume *)vol->v_md_data; in g_raid_md_free_volume_intel()
2687 vol->v_md_data = NULL; in g_raid_md_free_volume_intel()
2694 struct g_raid_md_intel_object *mdi; in g_raid_md_free_intel() local
2696 mdi = (struct g_raid_md_intel_object *)md; in g_raid_md_free_intel()
2697 if (!mdi->mdio_started) { in g_raid_md_free_intel()
2698 mdi->mdio_started = 0; in g_raid_md_free_intel()
2699 callout_stop(&mdi->mdio_start_co); in g_raid_md_free_intel()
2700 G_RAID_DEBUG1(1, md->mdo_softc, in g_raid_md_free_intel()
2701 "root_mount_rel %p", mdi->mdio_rootmount); in g_raid_md_free_intel()
2702 root_mount_rel(mdi->mdio_rootmount); in g_raid_md_free_intel()
2703 mdi->mdio_rootmount = NULL; in g_raid_md_free_intel()
2705 if (mdi->mdio_meta != NULL) { in g_raid_md_free_intel()
2706 free(mdi->mdio_meta, M_MD_INTEL); in g_raid_md_free_intel()
2707 mdi->mdio_meta = NULL; in g_raid_md_free_intel()