Lines Matching refs:un

144 	mr_unit_t	*un;
185 un = (mr_unit_t *)MD_UNIT(mnum);
187 if (un->c.un_type != MD_METARAID) {
192 return (un);
199 * PARAMETERS: mr_unit_t *un - RAID unit to update in the MD database
206 raid_commit(mr_unit_t *un, mddb_recid_t *extras)
212 if (md_get_setstatus(MD_UN2SET(un)) & MD_SET_STALE)
230 if (un != NULL) {
231 ASSERT(MDI_UNIT(MD_SID(un)) ? UNIT_WRITER_HELD(un) : 1);
232 recids[ri++] = un->c.un_record_id;
250 raid_check_pw(mr_unit_t *un)
255 minor_t mnum = MD_SID(un);
262 for (i = 0; i < un->un_totalcolumncnt; i++) {
265 colptr = &un->un_column[i];
273 tmpdev = md_resolve_bydevid(mnum, tmpdev, HOTSPARED(un, i) ?
299 if (un->c.un_revision & MD_64BIT_META_DEV) {
309 if (un->c.un_revision & MD_64BIT_META_DEV) {
340 mr_unit_t *un;
342 un = cur->ci_un;
346 mutex_enter(&un->un_mx);
348 un->un_init_iocnt += btodb(cur->ci_buf.b_bcount);
349 mutex_exit(&un->un_mx);
388 mutex_enter(&un->un_mx);
390 uniqtime32(&un->un_column[cur->ci_col].un_devtimestamp);
391 mutex_exit(&un->un_mx);
392 cv_broadcast(&un->un_cv);
436 mr_unit_t *un;
470 un = md_unit_readerlock(ui);
474 if ((un->un_init_colcnt > 0) && (un->un_resync_index != -1)) {
487 MD_SID(un));
488 un->un_init_colcnt = 0;
489 un->un_init_iocnt = 0;
490 end_off = un->un_pwsize + (un->un_segsize * un->un_segsincolumn);
491 zerosize = (size_t)MIN((diskaddr_t)un->un_maxio, end_off);
496 for (ix = 0; ix < un->un_totalcolumncnt; ix++) {
497 if (un->un_column[ix].un_devstate != RCS_INIT)
502 un->un_init_colcnt++;
505 cur->ci_un = un;
510 cur->ci_blkno = un->un_column[ix].un_pwstart;
511 cur->ci_lastblk = cur->ci_blkno + un->un_pwsize
512 + (un->un_segsize * un->un_segsincolumn);
520 cur->ci_buf.b_edev = md_dev64_to_dev(un->un_column[ix].un_dev);
526 cur->ci_buf.b_lblkno = un->un_column[ix].un_pwstart;
529 if (! (un->un_column[ix].un_devflags & MD_RAID_DEV_ISOPEN)) {
530 md_dev64_t tmpdev = un->un_column[ix].un_dev;
537 HOTSPARED(un, ix) ?
538 un->un_column[ix].un_hs_key :
539 un->un_column[ix].un_orig_key);
542 un->un_column[ix].un_devflags |=
544 un->un_column[ix].un_dev = tmpdev;
551 state = un->un_state;
552 colcnt = un->un_init_colcnt;
553 mutex_enter(&un->un_mx);
555 cv_wait(&un->un_cv, &un->un_mx);
564 (void) init_pw_area(un,
565 un->un_column[col].un_dev,
566 un->un_column[col].un_pwstart,
575 mutex_exit(&un->un_mx);
580 un = (mr_unit_t *)md_unit_writerlock(ui);
604 un->un_state = RUS_OKAY;
606 un->c.un_total_blocks = un->un_grow_tb;
607 md_nblocks_set(mnum, un->c.un_total_blocks);
608 un->un_grow_tb = 0;
609 if (raid_state_cnt(un, RCS_OKAY) ==
610 un->un_totalcolumncnt)
611 un->un_state = RUS_OKAY;
615 un->un_state = RUS_DOI;
617 uniqtime32(&un->un_timestamp);
618 MD_STATUS(un) &= ~MD_UN_GROW_PENDING;
619 un->un_init_colcnt = 0;
620 un->un_init_iocnt = 0;
621 raid_commit(un, NULL);
626 if (un->un_state & RUS_DOI) {
628 SVM_TAG_METADEVICE, setno, MD_SID(un));
631 SVM_TAG_METADEVICE, setno, MD_SID(un));
635 SVM_TAG_METADEVICE, setno, MD_SID(un));
652 mr_unit_t *un;
671 un = md_unit_readerlock(ui);
672 un->un_percent_done = 0;
681 un = md_unit_writerlock(ui);
682 MD_STATUS(un) &= ~MD_UN_GROW_PENDING;
684 for (i = 0; i < un->un_totalcolumncnt; i++)
685 if (COLUMN_STATE(un, i) == RCS_INIT)
686 raid_set_state(un, i, RCS_ERRED, 0);
687 if (un->un_state & RUS_INIT)
688 un->un_state = RUS_DOI;
689 raid_commit(un, NULL);
691 if (un->un_state & RUS_DOI) {
693 SVM_TAG_METADEVICE, MD_UN2SET(un), MD_SID(un));
696 SVM_TAG_METADEVICE, MD_UN2SET(un), MD_SID(un));
715 mr_unit_t *un = MD_UNIT(mnum);
730 iosize = dbtob(un->un_segsize);
733 total_segments = un->un_segsincolumn;
735 MD_UN2SET(un), MD_SID(un));
736 un->un_percent_done = 0;
741 ((un->un_origcolumncnt - 1) * un->un_segsize);
756 un->un_percent_done = (uint_t)((line * 1000) /
757 un->un_segsincolumn);
759 if (un->un_percent_done > 1000)
760 un->un_percent_done = 1000;
769 un = md_unit_writerlock(ui);
771 (raid_state_cnt(un, RCS_OKAY) == un->un_totalcolumncnt))
772 un->un_state = RUS_OKAY;
773 raid_commit(un, NULL);
776 raid_state_cnt(un, RCS_OKAY) != un->un_totalcolumncnt) {
778 SVM_TAG_METADEVICE, MD_UN2SET(un), MD_SID(un));
781 MD_UN2SET(un), MD_SID(un));
797 mr_unit_t *un;
802 un = (mr_unit_t *)MD_UNIT(mnum);
814 for (i = 0; i < un->un_totalcolumncnt; i++)
815 raid_set_state(un, i, RCS_ERRED, 0);
831 mr_unit_t *un;
835 un = md_unit_readerlock(MDI_UNIT(mnum));
837 if (MD_STATUS(un) & MD_UN_GROW_PENDING) {
842 if ((MD_STATUS(un) & MD_UN_RESYNC_ACTIVE) ||
843 (raid_state_cnt(un, RCS_RESYNC))) {
848 if ((raid_state_cnt(un, RCS_INIT) != 0) || (un->un_state & RUS_INIT)) {
853 if ((raid_state_cnt(un, RCS_OKAY) != un->un_totalcolumncnt) ||
854 (! (un->un_state & RUS_OKAY))) {
862 if ((un = raid_getun(mnum, &mrp->mde, WRITERS, lock)) == NULL)
865 if ((raid_state_cnt(un, RCS_OKAY) != un->un_totalcolumncnt) ||
866 (! (un->un_state & RUS_OKAY))) {
870 raid_set_state(un, 0, RCS_REGEN, 0);
871 raid_commit(un, NULL);
889 mr_unit_t *un;
931 un = (mr_unit_t *)mddb_getrecaddr(mr_recid);
941 if (err = ddi_copyin((caddr_t)(uintptr_t)msp->mdp, un,
948 un->c.un_flag |= MD_EFILABEL;
957 num_recs = un->un_totalcolumncnt + 3;
962 MD_SID(un) = mnum;
963 MD_RECID(un) = recids[0];
964 MD_CAPAB(un) = MD_CAN_PARENT | MD_CAN_SP;
965 MD_PARENT(un) = MD_NO_PARENT;
966 un->un_resync_copysize = 0;
967 un->c.un_revision |= MD_FN_META_DEV;
969 if (UNIT_STATE(un) == RUS_INIT)
970 MD_STATUS(un) |= MD_UN_GROW_PENDING;
972 if ((UNIT_STATE(un) != RUS_INIT) && raid_check_pw(un)) {
978 if (err = raid_build_incore(un, 0)) {
979 if (un->mr_ic) {
980 kmem_free(un->un_column_ic, sizeof (mr_column_ic_t) *
981 un->un_totalcolumncnt);
982 kmem_free(un->mr_ic, sizeof (*un->mr_ic));
998 if (un->un_hsp_id != -1) {
1000 err = md_hot_spare_ifc(HSP_INCREF, un->un_hsp_id, 0, 0,
1017 for (col = 0; col < un->un_totalcolumncnt; col++) {
1018 mr_column_t *mr_col = &un->un_column[col];
1024 md_set_parent(mr_col->un_dev, MD_SID(un));
1035 MD_SID(un));
1043 if (UNIT_STATE(un) != RUS_INIT)
1067 mr_unit_t *un;
1075 if ((un = raid_getun(mnum, &migph->mde,
1080 migph->size = un->c.un_size;
1084 if (migph->size < un->c.un_size) {
1087 if (ddi_copyout(un, (void *)(uintptr_t)migph->mdp,
1088 un->c.un_size, mode))
1114 mr_unit_t *un;
1133 un = md_unit_readerlock(MDI_UNIT(mnum));
1135 if ((MD_STATUS(un) & MD_UN_RESYNC_ACTIVE) ||
1136 (raid_state_cnt(un, RCS_RESYNC) != 0)) {
1141 if (un->un_state & RUS_DOI) {
1146 if ((raid_state_cnt(un, RCS_INIT) != 0) || (un->un_state & RUS_INIT) ||
1147 (MD_STATUS(un) & MD_UN_GROW_PENDING)) {
1155 if ((un = raid_getun(mnum, ep, WRITERS, lock)) == NULL)
1162 for (ix = 0; ix < un->un_totalcolumncnt; ix++) {
1163 md_dev64_t tmpdevt = un->un_column[ix].un_orig_dev;
1169 un->un_column[ix].un_orig_key);
1170 un->un_column[ix].un_orig_dev = tmpdevt;
1173 if (un->un_column[ix].un_orig_dev == odev) {
1177 if (un->un_column[ix].un_orig_dev == NODEV64) {
1185 if (un->un_column[ix].un_orig_key == devkey) {
1200 if ((MD_STATUS(un) & MD_UN_RESYNC_ACTIVE) ||
1201 (raid_state_cnt(un, RCS_RESYNC) != 0))
1204 if (un->un_state & RUS_DOI)
1206 un->un_column[col].un_dev));
1208 if ((raid_state_cnt(un, RCS_INIT) != 0) || (un->un_state & RUS_INIT) ||
1209 (MD_STATUS(un) & MD_UN_GROW_PENDING))
1219 if (un->un_state == RUS_LAST_ERRED) {
1225 if (un->un_column[col].un_devstate != RCS_ERRED) {
1226 for (ix = 0; ix < un->un_totalcolumncnt; ix++) {
1227 if (un->un_column[ix].un_devstate & RCS_ERRED)
1230 un->un_column[ix].un_dev));
1235 if ((un->un_column[col].un_devstate != RCS_LAST_ERRED) &&
1236 (un->un_column[col].un_devstate != RCS_ERRED))
1238 mnum, un->un_column[col].un_dev));
1241 if (un->un_state == RUS_ERRED) {
1242 if (! (un->un_column[col].un_devstate &
1245 mnum, un->un_column[ix].un_dev));
1248 ASSERT(!(un->un_column[col].un_devflags & MD_RAID_ALT_ISOPEN));
1249 ASSERT(!(un->un_column[col].un_devflags & MD_RAID_WRITE_ALT));
1251 state = un->un_column[col].un_devstate;
1253 MD_STATUS(un) |= MD_UN_GROW_PENDING;
1254 un->un_percent_done = 0;
1255 raid_set_state(un, col, RCS_INIT, 0);
1280 md_set_parent(tmpdev, MD_SID(un));
1285 un->un_column[col].un_orig_dev = tmpdev;
1286 un->un_column[col].un_orig_key = mrp->new_key;
1287 un->un_column[col].un_orig_pwstart = mrp->start_blk;
1288 un->un_column[col].un_orig_devstart =
1289 mrp->start_blk + un->un_pwsize;
1304 if (HOTSPARED(un, col)) {
1306 un->un_column[col].un_alt_dev = mrp->new_dev;
1307 un->un_column[col].un_alt_pwstart = mrp->start_blk;
1308 un->un_column[col].un_alt_devstart =
1309 mrp->start_blk + un->un_pwsize;
1310 un->un_column[col].un_devflags |= MD_RAID_COPY_RESYNC;
1316 if (un->un_column[col].un_devflags & MD_RAID_DEV_ISOPEN)
1318 un->un_column[col].un_devflags |= MD_RAID_DEV_ISOPEN;
1319 un->un_column[col].un_dev = mrp->new_dev;
1320 un->un_column[col].un_pwstart = mrp->start_blk;
1321 un->un_column[col].un_devstart =
1322 mrp->start_blk + un->un_pwsize;
1324 un->un_column[col].un_devflags |=
1340 md_dev64_t tmpdev = un->un_column[col].un_orig_dev;
1341 mdkey_t raidkey = un->un_column[col].un_orig_key;
1385 if (un->un_column[col].un_orig_dev == NODEV64)
1386 un->un_column[col].un_orig_dev = tmpdev;
1388 if (HOTSPARED(un, col)) {
1389 un->un_column[col].un_alt_dev =
1390 un->un_column[col].un_orig_dev;
1391 un->un_column[col].un_alt_pwstart =
1392 un->un_column[col].un_orig_pwstart;
1393 un->un_column[col].un_alt_devstart =
1394 un->un_column[col].un_orig_devstart;
1395 un->un_column[col].un_devflags |= MD_RAID_COPY_RESYNC;
1397 if (!(un->un_column[col].un_devflags &
1401 un->un_column[col].un_dev = tmpdev;
1418 un->un_column[col].un_dev =
1419 un->un_column[col].un_orig_dev;
1421 un->un_column[col].un_devflags |= MD_RAID_DEV_ISOPEN;
1422 un->un_column[col].un_devflags |= MD_RAID_REGEN_RESYNC;
1426 un->un_column[col].un_devflags |= MD_RAID_HAS_LABEL;
1428 un->un_column[col].un_devflags &= ~MD_RAID_HAS_LABEL;
1431 raid_commit(un, extra_recids);
1442 setno, MD_SID(un));
1445 setno, MD_SID(un));
1448 if (un->un_column[col].un_devstate & RCS_INIT)
1460 un = md_unit_writerlock(MDI_UNIT(mnum));
1462 raid_set_state(un, col, state, 1);
1464 raid_set_state(un, col, RCS_ERRED, 0);
1466 raid_set_state(un, col, state, 1);
1467 raid_commit(un, NULL);
1492 mr_unit_t *un;
1501 if ((un = raid_getun(mnum, &rip->mde, WRITERS, lock)) == NULL)
1504 if (un->un_state & RUS_DOI)
1507 if (un->c.un_status & MD_UN_RESYNC_ACTIVE)
1513 if (un->un_state & RUS_REGEN)
1516 if (raid_state_cnt(un, RCS_RESYNC))
1519 if (raid_state_cnt(un, RCS_INIT) || (un->un_state & RUS_INIT))
1527 MD_STATUS(un) |= MD_UN_GROW_PENDING;
1542 un = md_unit_writerlock(MDI_UNIT(mnum));
1543 MD_STATUS(un) |= MD_UN_RESYNC_ACTIVE;
1549 for (ix = 0; un->un_totalcolumncnt; ix++) {
1550 if (un->un_column[ix].un_devstate & RCS_RESYNC) {
1551 if ((un->un_column[ix].un_devflags &
1553 HOTSPARED(un, ix)) {
1554 un->un_column[ix].un_alt_dev =
1555 un->un_column[ix].un_orig_dev;
1556 un->un_column[ix].un_alt_devstart =
1557 un->un_column[ix].un_orig_devstart;
1558 un->un_column[ix].un_alt_pwstart =
1559 un->un_column[ix].un_orig_pwstart;
1564 ASSERT(un->un_column[ix].un_devflags &
1567 un->un_column[ix].un_devflags |= MD_RAID_RESYNC;
1605 mr_unit_t *un;
1613 if ((un = raid_getun(mnum, &rip->mde, RD_LOCK, lock)) == NULL)
1617 if (MD_STATUS(un) & MD_UN_RESYNC_ACTIVE) {
1618 d = un->un_segsincolumn;
1619 percent = d ? ((1000 * un->un_resync_line_index) / d) : 0;
1626 if (UNIT_STATE(un) & RUS_INIT) {
1627 d = un->un_segsize * un->un_segsincolumn *
1628 un->un_totalcolumncnt;
1630 d ? ((1000 * (u_longlong_t)un->un_init_iocnt) / d) : 0;
1635 } else if (MD_STATUS(un) & MD_UN_GROW_PENDING) {
1636 d = un->un_segsize * un->un_segsincolumn * un->un_init_colcnt;
1638 d ? (((u_longlong_t)un->un_init_iocnt * 1000) / d) : 0;
1645 if (un->un_state & RUS_REGEN)
1646 rip->ri_percent_done = un->un_percent_done;
1649 for (ix = 0; ix < un->un_totalcolumncnt; ix++) {
1650 switch (un->un_column[ix].un_devstate) {
1660 d = un->un_totalcolumncnt;
1681 mr_unit_t *un, *new_un;
1705 un = md_unit_readerlock(ui);
1707 if (MD_STATUS(un) & MD_UN_GROW_PENDING) {
1712 if (MD_STATUS(un) & MD_UN_RESYNC_ACTIVE) {
1717 if (UNIT_STATE(un) & RUS_LAST_ERRED) {
1722 if (UNIT_STATE(un) & RUS_DOI) {
1727 if ((raid_state_cnt(un, RCS_INIT) != 0) || (un->un_state & RUS_INIT)) {
1734 if ((un = raid_getun(mnum, &mgph->mde, WRITERS, lock)) ==
1738 if (MD_STATUS(un) & MD_UN_GROW_PENDING)
1741 if (MD_STATUS(un) & MD_UN_RESYNC_ACTIVE)
1744 if (un->c.un_size >= mgph->size)
1747 if (UNIT_STATE(un) & RUS_LAST_ERRED)
1750 if (UNIT_STATE(un) & RUS_DOI)
1753 if ((raid_state_cnt(un, RCS_INIT) != 0) || (un->un_state & RUS_INIT))
1766 if (un->c.un_revision & MD_FN_META_DEV)
1805 if (un->un_totalcolumncnt >= new_un->un_totalcolumncnt) {
1823 bcopy((caddr_t)un, (caddr_t)new_un, un->c.un_size);
1835 ASSERT(new_un->mr_ic == un->mr_ic);
1840 mrc = un->un_column_ic;
1854 sizeof (mr_column_ic_t) * un->un_totalcolumncnt);
1855 kmem_free(mrc, sizeof (mr_column_ic_t) * un->un_totalcolumncnt);
1865 if (((un->c.un_revision & MD_64BIT_META_DEV) == 0) &&
1866 (un->c.un_vtoc_id != 0)) {
1867 old_vtoc = un->c.un_vtoc_id;
1885 for (col = un->un_totalcolumncnt;
1892 for (i = un->un_totalcolumncnt; i < col; i++) {
1898 kmem_free(new_un->mr_ic, sizeof (*un->mr_ic));
1923 mddb_deleterec_wrapper(un->c.un_record_id);
1934 * a new efi record has been created for this un.
1988 mr_unit_t *un;
1999 if ((un = raid_getun(mnum, &mirp->mde, NO_LOCK, NULL)) ==
2006 if (MD_HAS_PARENT(MD_PARENT(un))) {
2011 un = (mr_unit_t *)md_unit_openclose_enter(ui);
2018 if (UNIT_STATE(un) != RUS_OKAY && !mirp->force) {
2023 reset_raid(un, mnum, 1);
2047 * PARAMETERS: mr_unit_t *un - RAID unit to get the geometry for
2055 mr_unit_t *un,
2059 md_get_geom((md_unit_t *)un, geomp);
2067 * PARAMETERS: mr_unit_t *un - RAID unit to get the VTOC from
2075 mr_unit_t *un,
2079 md_get_vtoc((md_unit_t *)un, vtocp);
2087 * PARAMETERS: mr_unit_t *un - RAID unit to set the VTOC on
2095 mr_unit_t *un,
2099 return (md_set_vtoc((md_unit_t *)un, vtocp));
2106 * PARAMETERS: mr_unit_t *un - RAID unit to get the VTOC from
2114 mr_unit_t *un,
2118 md_get_extvtoc((md_unit_t *)un, vtocp);
2126 * PARAMETERS: mr_unit_t *un - RAID unit to set the VTOC on
2134 mr_unit_t *un,
2138 return (md_set_extvtoc((md_unit_t *)un, vtocp));
2146 * PARAMETERS: mr_unit_t *un - RAID unit to set the VTOC on
2155 mr_unit_t *un,
2159 md_get_cgapart((md_unit_t *)un, dkmapp);
2182 mr_unit_t *un;
2194 if ((un = raid_getun(mnum, &mgdph->mde, RD_LOCK, lock)) == NULL)
2199 for (cnt = 0, i = 0; i < un->un_totalcolumncnt; i++, cnt++) {
2201 unit_dev = un->un_column[i].un_orig_dev;
2212 if (HOTSPARED(un, i)) {
2217 unit_dev = un->un_column[i].un_dev;
2251 mr_unit_t *un;
2260 if ((un = raid_getun(mnum, &mrp->mde, WR_LOCK, lock)) == NULL)
2267 for (ix = 0; ix < un->un_totalcolumncnt; ix++) {
2268 if (HOTSPARED(un, ix)) {
2288 if (un->un_hsp_id != -1) {
2290 err = md_hot_spare_ifc(HSP_DECREF, un->un_hsp_id, 0, 0,
2308 un->un_hsp_id = mrp->params.hsp_id;
2310 raid_commit(un, recids);
2312 MD_UN2SET(un), MD_SID(un));
2315 if ((un->un_hsp_id != -1) && (un->un_state == RUS_ERRED))
2657 mr_unit_t *un;
2667 ((un = MD_UNIT(mnum)) == NULL))
2671 err = md_check_ioctl_against_unit(cmd, un->c);
2719 if ((err = raid_get_geom(un, p)) == 0) {
2737 if ((err = raid_get_vtoc(un, vtoc)) != 0) {
2792 err = raid_set_vtoc(un, vtoc);
2806 if ((err = raid_get_extvtoc(un, extvtoc)) != 0) {
2831 err = raid_set_extvtoc(un, extvtoc);
2841 if ((err = raid_get_cgapart(un, &dmp)) != 0) {
2902 * PARAMETERS: mr_unit_t *un - unit struct of raid unit to be renamed
2911 mr_unit_t *un,
2923 if (!un || !ui) {
2929 ASSERT(!(MD_CAPAB(un) & MD_CAN_META_CHILD));
2930 if (MD_CAPAB(un) & MD_CAN_META_CHILD) {
2935 if (MD_PARENT(un) == MD_MULTI_PARENT) {
2940 toplevel = !MD_HAS_PARENT(MD_PARENT(un));
2943 related = (!toplevel) && (MD_PARENT(un) == to_min);
2995 mr_unit_t *un;
3007 un = (mr_unit_t *)delta->unp;
3009 for (column = 0; column < un->un_totalcolumncnt; column++) {
3012 colstate = un->un_column[column].un_devstate;
3045 if (HOTSPARED(un, column)) {
3125 mr_unit_t *un = (mr_unit_t *)delta->unp;
3126 minor_t mnum = MD_SID(un);
3142 for (col = 0; col < un->un_totalcolumncnt; col++) {
3143 if (un->un_column[col].un_devstate & RCS_OKAY)
3144 (void) init_pw_area(un,
3145 un->un_column[col].un_dev,
3146 un->un_column[col].un_pwstart, col);