Lines Matching refs:un

82 mirror_resume_writes(mm_unit_t *un)
89 if (MD_MNSET_SETNO(MD_UN2SET(un))) {
92 printf("mirror_resume_writes: mnum %x\n", MD_SID(un));
94 mutex_enter(&un->un_suspend_wr_mx);
95 un->un_suspend_wr_flag = 0;
96 cv_broadcast(&un->un_suspend_wr_cv);
97 mutex_exit(&un->un_suspend_wr_mx);
98 mutex_enter(&un->un_rs_thread_mx);
99 un->un_rs_thread_flags &= ~MD_RI_BLOCK;
100 cv_signal(&un->un_rs_thread_cv);
101 mutex_exit(&un->un_rs_thread_mx);
108 mm_unit_t *un;
149 un = (mm_unit_t *)MD_UNIT(mnum);
151 if (un->c.un_type != MD_METAMIRROR) {
156 return (un);
166 mm_unit_t *un;
212 un = (mm_unit_t *)mddb_getrecaddr_resize(recid, sizeof (*un), 0);
222 if (err = ddi_copyin((caddr_t)(uintptr_t)msp->mdp, un,
229 un->c.un_flag |= MD_EFILABEL;
232 un->c.un_revision |= MD_FN_META_DEV;
233 MD_RECID(un) = recid;
234 MD_CAPAB(un) = MD_CAN_PARENT | MD_CAN_META_CHILD | MD_CAN_SP;
235 MD_PARENT(un) = MD_NO_PARENT;
240 sm = &un->un_sm[i];
261 if (err = mirror_build_incore(un, 0)) {
274 mirror_commit(un, ALL_SUBMIRRORS, 0);
275 md_create_unit_incore(MD_SID(un), &mirror_md_ops, 0);
278 MD_SID(un));
291 mm_unit_t *un;
296 if ((un = mirror_getun(migph->id, &migph->mde, RD_LOCK, lock)) == NULL)
300 migph->size = un->c.un_size;
304 if (migph->size < un->c.un_size) {
307 if (ddi_copyout(un, (caddr_t)(uintptr_t)migph->mdp,
308 un->c.un_size, mode))
320 mm_unit_t *un;
330 if ((un = mirror_getun(mgdph->mnum,
337 if (!SMS_BY_INDEX_IS(un, i, SMS_INUSE))
340 unit_dev = un->un_sm[i].sm_dev;
365 mm_unit_t *un;
371 if ((un = mirror_getun(mnum, &mirp->mde, NO_LOCK, NULL)) == NULL)
374 if (MD_HAS_PARENT(un->c.un_parent)) {
395 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE))
398 if (!SMS_BY_INDEX_IS(un, smi, SMS_RUNNING)) {
406 reset_mirror(un, mnum, 1);
428 mm_unit_t *un,
432 md_get_geom((md_unit_t *)un, geomp);
439 mm_unit_t *un,
443 md_get_vtoc((md_unit_t *)un, vtocp);
450 mm_unit_t *un,
454 return (md_set_vtoc((md_unit_t *)un, vtocp));
459 mm_unit_t *un,
463 md_get_extvtoc((md_unit_t *)un, vtocp);
470 mm_unit_t *un,
474 return (md_set_extvtoc((md_unit_t *)un, vtocp));
479 mm_unit_t *un,
483 md_get_cgapart((md_unit_t *)un, dkmapp);
488 mirror_getcomp_by_dev(mm_unit_t *un, replace_params_t *params,
508 setno = MD_MIN2SET(MD_SID(un));
515 sm = &un->un_sm[i];
516 smic = &un->un_smic[i];
524 compcnt = (*(smic->sm_get_component_count))(sm->sm_dev, un);
598 mm_unit_t *un;
617 if ((un = mirror_getun(mnum, &params->mde, WRITERS, lock)) == NULL) {
631 if (MD_STATUS(un) & (MD_UN_RESYNC_ACTIVE | MD_UN_OPT_NOT_DONE)) {
636 if (mirror_getcomp_by_dev(un, params, &smi, &ci) == 0) {
640 if (un->un_nsm == 1) {
645 if (mirror_other_sources(un, smi, ci, 0) != 0) {
651 sm = &un->un_sm[smi];
773 set_sm_comp_state(un, smi, ci, CS_RESYNC, recids, MD_STATE_NO_XMIT,
797 mirror_openfail_console_info(un, smi, ci);
807 MD_UN2SET(un), MD_SID(un));
810 MD_UN2SET(un), MD_SID(un));
818 un->un_rs_resync_done = un->un_rs_resync_2_do = 0;
819 un->un_rs_type = MD_RS_NONE;
820 mirror_resume_writes(un);
821 if (!MD_MNSET_SETNO(MD_UN2SET(un)))
828 mirror_resume_writes(un);
853 mm_unit_t *un;
874 if ((un = mirror_getun(mnum, &att->mde, WRITERS, lock)) == NULL) {
878 setno = MD_UN2SET(un);
881 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE))
889 sm = &un->un_sm[smi];
890 smic = &un->un_smic[smi];
906 if (un->c.un_total_blocks > su->c.un_total_blocks) {
912 if ((su->c.un_flag & MD_LABELED) && !(un->c.un_flag & MD_LABELED)) {
947 md_set_parent(sm_dev, MD_SID(un));
949 build_submirror(un, smi, 0);
950 un->un_nsm++;
951 mirror_commit(un, SMI2BIT(smi), 0);
954 MD_UN2SET(un), MD_SID(un));
956 mirror_resume_writes(un);
965 mirror_resume_writes(un);
1010 mm_unit_t *un;
1028 if ((un = mirror_getun(mnum, &det->mde, WRITERS, lock)) == NULL) {
1034 mirror_resume_writes(un);
1041 if (MD_STATUS(un) & (MD_UN_RESYNC_ACTIVE | MD_UN_OPT_NOT_DONE)) {
1042 mirror_resume_writes(un);
1047 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE)) {
1050 if (un->un_sm[smi].sm_dev == det->submirror) {
1057 mirror_resume_writes(un);
1061 if (un->un_nsm == 1) {
1062 mirror_resume_writes(un);
1066 if (mirror_other_sources(un, smi, WHOLE_SM, 0) != 0) {
1067 mirror_resume_writes(un);
1071 sm = &un->un_sm[smi];
1072 smic = &un->un_smic[smi];
1096 un->un_nsm--;
1100 sv.setno = MD_UN2SET(un);
1108 * (void) mirror_grow_unit(un, &mde);
1115 mirror_commit(un, 0, recids);
1119 MD_UN2SET(un), MD_SID(un));
1131 old_sm = &un->un_sm[smi];
1132 new_sm = &un->un_sm[smi - 1];
1141 old_smic = &un->un_smic[smi];
1142 new_smic = &un->un_smic[smi - 1];
1147 mirror_commit(un, 0, NULL);
1148 mirror_resume_writes(un);
1173 mm_unit_t *un;
1181 if ((un = mirror_getun(mnum, &miop->mde, WR_LOCK, lock)) == NULL) {
1189 if (MD_STATUS(un) & (MD_UN_RESYNC_ACTIVE | MD_UN_OPT_NOT_DONE)) {
1190 mirror_resume_writes(un);
1197 if ((ui->ui_tstate & MD_ABR_CAP) || un->un_abr_count) {
1198 mirror_resume_writes(un);
1203 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE))
1205 if (un->un_sm[smi].sm_dev == miop->submirror)
1210 mirror_resume_writes(un);
1214 sm = &un->un_sm[smi];
1215 smic = &un->un_smic[smi];
1217 mirror_resume_writes(un);
1221 if (mirror_other_sources(un, smi, WHOLE_SM, 0) != 0) {
1222 mirror_resume_writes(un);
1226 mirror_resume_writes(un);
1228 MD_STATUS(un) |= MD_UN_OFFLINE_SM;
1229 mirror_commit(un, NO_SUBMIRRORS, 0);
1231 MD_UN2SET(un), MD_SID(un));
1256 mm_unit_t *un;
1264 if ((un = mirror_getun(mnum, &miop->mde, WR_LOCK, lock)) == NULL) {
1269 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE))
1271 if (un->un_sm[smi].sm_dev == miop->submirror)
1275 mirror_resume_writes(un);
1279 sm = &un->un_sm[smi];
1280 smic = &un->un_smic[smi];
1282 mirror_resume_writes(un);
1290 if (MD_STATUS(un) & (MD_UN_RESYNC_ACTIVE | MD_UN_OPT_NOT_DONE)) {
1291 mirror_resume_writes(un);
1296 mirror_commit(un, NO_SUBMIRRORS, 0);
1299 MD_UN2SET(un), MD_SID(un));
1303 if (MD_MNSET_SETNO(MD_UN2SET(un)))
1304 (void) mddb_reread_rr(setno, un->un_rr_dirty_recid);
1306 bcopy((caddr_t)un->un_dirty_bm, (caddr_t)un->un_resync_bm,
1307 howmany(un->un_rrd_num, NBBY));
1308 MD_STATUS(un) |= MD_UN_OPT_NOT_DONE;
1310 mirror_resume_writes(un);
1319 mm_unit_t *un,
1329 minor_t mnum = MD_SID(un);
1337 if (MD_STATUS(un) & (MD_UN_RESYNC_ACTIVE | MD_UN_OPT_NOT_DONE)) {
1338 MD_STATUS(un) |= MD_UN_GROW_PENDING;
1339 mirror_commit(un, NO_SUBMIRRORS, 0);
1340 return (mdmderror(ep, MDE_GROW_DELAYED, MD_SID(un)));
1348 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE))
1350 sm = &un->un_sm[smi];
1368 if (total_blocks <= un->c.un_total_blocks)
1376 spc = un->c.un_nhead * un->c.un_nsect;
1379 un->c.un_total_blocks = current_tb;
1380 md_nblocks_set(mnum, un->c.un_total_blocks);
1381 un->c.un_actual_tb = total_blocks;
1384 if (((un->c.un_revision & MD_64BIT_META_DEV) == 0) &&
1385 (un->c.un_total_blocks > MD_MAX_BLKS_FOR_SMALL_DEVS)) {
1392 mddb_recid_t old_recid = un->c.un_record_id;
1398 typ1 = (mddb_type_t)md_getshared_key(MD_UN2SET(un),
1404 if (un->c.un_revision & MD_FN_META_DEV)
1409 un->c.un_revision |= MD_64BIT_META_DEV;
1411 un->c.un_flag |= MD_EFILABEL;
1416 old_vtoc = un->c.un_vtoc_id;
1418 un->c.un_vtoc_id =
1421 MD_RECID(un) = recid;
1429 mirror_commit(un, NO_SUBMIRRORS, 0);
1435 * a new efi record has been created for this un.
1443 if ((current_tb/un->un_rrd_blksize) > MD_MAX_NUM_RR) {
1444 if (mirror_resize_resync_regions(un, current_tb)) {
1445 return (mdmderror(ep, MDE_RR_ALLOC_ERROR, MD_SID(un)));
1449 MD_UN2SET(un), MD_SID(un));
1453 if (mirror_add_resync_regions(un, current_tb)) {
1454 return (mdmderror(ep, MDE_RR_ALLOC_ERROR, MD_SID(un)));
1459 MD_UN2SET(un), MD_SID(un));
1470 mm_unit_t *un;
1475 if ((un = mirror_getun(mgph->mnum,
1479 if (MD_STATUS(un) & MD_UN_GROW_PENDING)
1482 return (mirror_grow_unit(un, &mgph->mde));
1492 mm_unit_t *un;
1496 if ((un = mirror_getun(mmp->mnum, &mmp->mde, WR_LOCK, lock)) == NULL)
1500 un->un_read_option = pp->read_option;
1503 un->un_write_option = pp->write_option;
1506 un->un_pass_num = pp->pass_num;
1508 mirror_commit(un, NO_SUBMIRRORS, 0);
1511 MD_UN2SET(un), MD_SID(un));
1521 mm_unit_t *un;
1529 if ((un = mirror_getun(mnum, &ri->mde, STALE_OK|NO_LOCK, NULL)) == NULL)
1539 if (MD_STATUS(un) & (MD_UN_RESYNC_ACTIVE|MD_UN_RESYNC_CANCEL)) {
1540 if (MD_STATUS(un) & MD_UN_RESYNC_ACTIVE)
1543 ri->ri_flags |= (un->un_rs_thread_flags & MD_RI_BLOCK);
1544 d = un->un_rs_resync_2_do;
1546 percent = un->un_rs_resync_done;
1547 if (un->c.un_total_blocks >
1562 if (un->un_nsm < 2) {
1567 for (rr = 0; rr < un->un_rrd_num; rr++)
1568 if (IS_REGION_DIRTY(rr, un))
1570 d = un->un_rrd_num;
1597 mm_unit_t *un;
1600 if ((un = mirror_getun(p->d.mnum, &p->mde, RD_LOCK, lock)) == NULL)
1603 setno = MD_UN2SET(un);
1607 p->d.owner = un->un_mirror_owner;
1662 mm_unit_t *un = MD_UNIT(ownp->mnum);
1666 un->un_mirror_owner_status = 0;
1668 mutex_enter(&un->un_owner_mx);
1669 un->un_owner_state |= MM_MN_OWNER_SENT;
1670 mutex_exit(&un->un_owner_mx);
1683 mutex_enter(&un->un_owner_mx);
1684 un->un_owner_state &= ~(MM_MN_BECOME_OWNER|MM_MN_OWNER_SENT);
1685 mutex_exit(&un->un_owner_mx);
1686 un->un_mirror_owner_status =
1693 mutex_enter(&un->un_owner_mx);
1694 if (un->un_owner_state & MM_MN_BECOME_OWNER) {
1695 un->un_mirror_owner = md_mn_mynode_id;
1697 if (un->un_rr_dirty_recid)
1698 (void) mddb_setowner(un->un_rr_dirty_recid,
1704 ps1 = un->un_rs_prev_overlap;
1710 un->un_owner_state &= ~(MM_MN_OWNER_SENT|MM_MN_BECOME_OWNER);
1711 mutex_exit(&un->un_owner_mx);
1712 un->un_mirror_owner_status =
1716 if (un->un_rs_thread_flags & MD_RI_BLOCK_OWNER) {
1717 mutex_enter(&un->un_rs_thread_mx);
1718 un->un_rs_thread_flags &= ~MD_RI_BLOCK_OWNER;
1719 cv_signal(&un->un_rs_thread_cv);
1720 mutex_exit(&un->un_rs_thread_mx);
1753 * un->un_owner_state has MM_MN_PREVENT_CHANGE set.
1757 * un->un_owner_state has MM_MN_PREVENT_CHANGE cleared.
1787 mm_unit_t *un;
1790 if ((un = mirror_getun(p->d.mnum, &p->mde, RD_LOCK, lock)) == NULL)
1807 return (mirror_choose_owner(un, &p->d));
1809 return (mirror_choose_owner(un, NULL));
1850 un = md_ioctl_writerlock(lock, ui);
1857 if (!(ui->ui_tstate & MD_ABR_CAP) && un->un_pass_num) {
1858 MD_STATUS(un) |= MD_UN_OPT_NOT_DONE;
1860 (void) mddb_reread_rr(setno, un->un_rr_dirty_recid);
1861 bcopy((caddr_t)un->un_dirty_bm,
1862 (caddr_t)un->un_resync_bm,
1863 howmany(un->un_rrd_num, NBBY));
1865 if ((SUBMIRROR_IS_READABLE(un, i)) ||
1866 SMS_BY_INDEX_IS(un, i,
1868 un->un_sm[i].sm_flags |=
1872 mutex_enter(&un->un_owner_mx);
1873 un->un_owner_state &= ~MD_MN_MM_PREVENT_CHANGE;
1874 mutex_exit(&un->un_owner_mx);
1875 ps = un->un_rs_prev_overlap;
1882 un = md_ioctl_readerlock(lock, ui);
1885 mutex_enter(&un->un_owner_mx);
1886 if (!(un->un_owner_state & MM_MN_BECOME_OWNER)) {
1891 if (un->un_mirror_owner == p->d.owner) {
1897 un->un_owner_state |= MM_MN_PREVENT_CHANGE;
1899 un->un_owner_state &= ~MM_MN_PREVENT_CHANGE;
1901 mutex_exit(&un->un_owner_mx);
1911 if ((un->un_owner_state & MM_MN_PREVENT_CHANGE) &&
1913 mutex_exit(&un->un_owner_mx);
1917 p->d.owner, un->un_mirror_owner, md_shortname(MD_SID(un)));
1927 un->un_owner_state &= ~MM_MN_OWNER_SENT;
1928 un->un_owner_state |= MM_MN_BECOME_OWNER;
1929 un->un_owner_state |= (p->d.flags & MD_MN_MM_PREVENT_CHANGE) ?
1931 un->un_owner_state &= (p->d.flags & MD_MN_MM_ALLOW_CHANGE) ?
1934 mutex_exit(&un->un_owner_mx);
1935 } else if ((un->un_mirror_owner == md_mn_mynode_id) ||
1936 un->un_owner_state & MM_MN_BECOME_OWNER) {
1937 mutex_exit(&un->un_owner_mx);
1944 un = md_ioctl_writerlock(lock, ui);
1946 mutex_enter(&un->un_rs_thread_mx);
1947 un->un_rs_thread_flags |= MD_RI_BLOCK_OWNER;
1948 mutex_exit(&un->un_rs_thread_mx);
1949 mutex_enter(&un->un_owner_mx);
1950 un->un_mirror_owner = p->d.owner;
1953 if (un->un_rr_dirty_recid)
1954 (void) mddb_setowner(un->un_rr_dirty_recid, p->d.owner);
1955 un->un_owner_state &= ~MM_MN_BECOME_OWNER;
1956 un->un_owner_state |= (p->d.flags & MD_MN_MM_PREVENT_CHANGE) ?
1958 un->un_owner_state &= (p->d.flags & MD_MN_MM_ALLOW_CHANGE) ?
1960 mutex_exit(&un->un_owner_mx);
1968 un->un_mirror_owner = p->d.owner;
1970 if (un->un_rr_dirty_recid)
1971 (void) mddb_setowner(un->un_rr_dirty_recid, p->d.owner);
1972 un->un_owner_state |= (p->d.flags & MD_MN_MM_PREVENT_CHANGE) ?
1974 un->un_owner_state &= (p->d.flags & MD_MN_MM_ALLOW_CHANGE) ?
1976 mutex_exit(&un->un_owner_mx);
1990 mm_unit_t *un;
1998 if ((un = mirror_getun(p->mnum, &p->mde, WR_LOCK, lockp)) == NULL)
2006 (void) check_comp_4_hotspares(un, p->sm, p->comp, MD_HOTSPARE_NO_XMIT,
2026 mm_unit_t *un;
2029 if ((un = mirror_getun(p->mnum, &p->mde, RD_LOCK, lock)) == NULL)
2037 p->flags = un->un_mirror_owner_status;
2050 mm_unit_t *un;
2062 if ((un = mirror_getun(p->mnum, &p->mde, WR_LOCK, lockp)) == NULL)
2070 sm = &un->un_sm[p->sm];
2071 smic = &un->un_smic[p->sm];
2098 mirror_resume_writes(un);
2131 un->un_changecnt++;
2132 shared->ms_lasterrcnt = un->un_changecnt;
2140 mirror_commit(un, SMI2BIT(p->sm), 0);
2143 mirror_resume_writes(un);
2148 MD_UN2SET(un), MD_SID(un));
2151 MD_UN2SET(un), MD_SID(un));
2168 mm_unit_t *un;
2174 if ((un = mirror_getun(p->mnum, &p->mde, NO_LOCK, NULL)) == NULL)
2188 mutex_enter(&un->un_rs_thread_mx);
2189 un->un_rs_thread_flags |= MD_RI_BLOCK;
2190 mutex_exit(&un->un_rs_thread_mx);
2192 mutex_enter(&un->un_suspend_wr_mx);
2193 un->un_suspend_wr_flag = 1;
2194 mutex_exit(&un->un_suspend_wr_mx);
2209 mm_unit_t *un;
2216 if ((un = mirror_getun(p->mnum, &p->mde, RD_LOCK, lockp)) == NULL)
2229 mirror_process_unit_resync(un);
2230 if (!(un->c.un_status & MD_UN_RESYNC_ACTIVE)) {
2231 mutex_enter(&un->un_owner_mx);
2232 un->un_mirror_owner = 0;
2233 mutex_exit(&un->un_owner_mx);
2260 * un - unit reference
2264 mirror_choose_owner(mm_unit_t *un, md_mn_req_owner_t *ownp)
2270 setno = MD_UN2SET(un);
2279 "rcnt = %d\n", MD_SID(un), md_set[setno].s_rcnt);
2290 msg->msg_chooseid_mnum = MD_SID(un);
2327 * un mirror to obtain status from
2333 mirror_get_status(mm_unit_t *un, IOLOCK *lockp)
2341 set_t setno = MD_UN2SET(un);
2342 mdi_unit_t *ui = MDI_UNIT(MD_SID(un));
2351 msg.mir_state_mnum = MD_SID(un);
2407 printf("mirror_get_status: %s\n", md_shortname(MD_SID(un)));
2410 sm = &un->un_sm[smi];
2439 mm_unit_t *un;
2445 if ((un = mirror_getun(p->mnum, &mde, WR_LOCK, lockp)) == NULL) {
2462 mirror_get_status(un, lockp);
3024 mm_unit_t *un;
3034 ((un = MD_UNIT(mnum)) == NULL))
3037 err = md_check_ioctl_against_unit(cmd, un->c);
3085 if ((err = mirror_get_geom(un, p)) == 0) {
3104 if ((err = mirror_get_vtoc(un, vtoc)) != 0) {
3160 err = mirror_set_vtoc(un, vtoc);
3175 if ((err = mirror_get_extvtoc(un, extvtoc)) != 0) {
3201 err = mirror_set_extvtoc(un, extvtoc);
3211 if ((err = mirror_get_cgapart(un, &dmp)) != 0) {
3297 if (un->c.un_status & MD_UN_OFFLINE_SM) {
3460 mm_unit_t *un = (mm_unit_t *)delta->unp;
3462 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE)) {
3465 sm = &un->un_sm[smi];
3542 mm_unit_t *un = (mm_unit_t *)delta->unp;
3544 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE)) {
3547 sm = &un->un_sm[smi];
3645 mm_unit_t *un = (mm_unit_t *)delta->unp;
3647 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE)) {
3650 sm = &un->un_sm[smi];
3748 mm_unit_t *un,
3762 if (!un || !ui) {
3768 ASSERT(MD_CAPAB(un) & MD_CAN_META_CHILD);
3769 if (!(MD_CAPAB(un) & MD_CAN_META_CHILD)) {
3774 if (MD_PARENT(un) == MD_MULTI_PARENT) {
3779 toplevel = !MD_HAS_PARENT(MD_PARENT(un));
3782 related = (!toplevel) && (MD_PARENT(un) == to_min);
3791 if (!SMS_BY_INDEX_IS(un, smi, SMS_INUSE)) {
3795 sm = &un->un_sm[smi];
3844 mm_unit_t *un;
3858 un = (mm_unit_t *)delta->unp;
3861 sm = &un->un_sm[i];
3862 smic = &un->un_smic[i];
3874 compcnt = (*(smic->sm_get_component_count))(sm->sm_dev, un);
3926 err = mirror_may_renexch_self(un, delta->uip, rtxnp);