Lines Matching defs:krdc

83  * krdc->group->lock is used to protect state changes of a configured rdc
127 static void halt_sync(rdc_k_info_t *krdc);
134 int rdc_enable_diskq(rdc_k_info_t *krdc);
136 int rdc_suspend_diskq(rdc_k_info_t *krdc);
137 int rdc_resume_diskq(rdc_k_info_t *krdc);
139 void rdc_fail_diskq(rdc_k_info_t *krdc, int wait, int dolog);
140 void rdc_unfail_diskq(rdc_k_info_t *krdc);
142 int rdc_stamp_diskq(rdc_k_info_t *krdc, int rsrvd, int flags);
143 void rdc_qfiller_thr(rdc_k_info_t *krdc);
260 rdc_k_info_t *krdc;
271 krdc = &rdc_k_info[i];
272 mutex_destroy(&krdc->dc_sleep);
273 mutex_destroy(&krdc->bmapmutex);
274 mutex_destroy(&krdc->kstat_mutex);
275 mutex_destroy(&krdc->bmp_kstat_mutex);
276 mutex_destroy(&krdc->syncbitmutex);
277 cv_destroy(&krdc->busycv);
278 cv_destroy(&krdc->closingcv);
279 cv_destroy(&krdc->haltcv);
280 cv_destroy(&krdc->synccv);
316 rdc_k_info_t *krdc;
348 krdc = &rdc_k_info[i];
349 bzero(krdc, sizeof (*krdc));
350 krdc->index = i;
351 mutex_init(&krdc->dc_sleep, NULL, MUTEX_DRIVER, NULL);
352 mutex_init(&krdc->bmapmutex, NULL, MUTEX_DRIVER, NULL);
353 mutex_init(&krdc->kstat_mutex, NULL, MUTEX_DRIVER, NULL);
354 mutex_init(&krdc->bmp_kstat_mutex, NULL, MUTEX_DRIVER, NULL);
355 mutex_init(&krdc->syncbitmutex, NULL, MUTEX_DRIVER, NULL);
356 cv_init(&krdc->busycv, NULL, CV_DRIVER, NULL);
357 cv_init(&krdc->closingcv, NULL, CV_DRIVER, NULL);
358 cv_init(&krdc->haltcv, NULL, CV_DRIVER, NULL);
359 cv_init(&krdc->synccv, NULL, CV_DRIVER, NULL);
395 rdc_k_info_t *krdc;
398 krdc = &rdc_k_info[index];
400 krdc->remote_index = -1;
401 krdc->dcio_bitmap = NULL;
402 krdc->bitmap_ref = NULL;
403 krdc->bitmap_size = 0;
404 krdc->bitmap_write = 0;
405 krdc->disk_status = 0;
406 krdc->many_next = krdc;
427 rdc_k_info_t *krdc;
432 krdc = &rdc_k_info[index];
435 krdc->remote_index = -1;
436 krdc->dcio_bitmap = NULL;
437 krdc->bitmap_ref = NULL;
438 krdc->bitmap_size = 0;
439 krdc->bitmap_write = 0;
440 krdc->disk_status = 0;
441 krdc->many_next = krdc;
463 rdc_many_enter(rdc_k_info_t *krdc)
465 ASSERT(!MUTEX_HELD(&krdc->bmapmutex));
472 rdc_many_exit(rdc_k_info_t *krdc)
478 rdc_group_enter(rdc_k_info_t *krdc)
482 ASSERT(!MUTEX_HELD(&krdc->bmapmutex));
484 mutex_enter(&krdc->group->lock);
488 rdc_group_exit(rdc_k_info_t *krdc)
490 mutex_exit(&krdc->group->lock);
498 wait_busy(rdc_k_info_t *krdc)
502 while (krdc->busy_count > 0)
503 cv_wait(&krdc->busycv, &rdc_conf_lock);
511 set_busy(rdc_k_info_t *krdc)
515 wait_busy(krdc);
517 krdc->busy_count++;
525 wakeup_busy(rdc_k_info_t *krdc)
529 if (krdc->busy_count <= 0)
532 krdc->busy_count--;
533 cv_broadcast(&krdc->busycv);
542 remove_from_group(rdc_k_info_t *krdc)
549 rdc_many_enter(krdc);
550 group = krdc->group;
564 if (krdc->group->ra_queue.qfill_sleeping != RDC_QFILL_DEAD) {
566 while (krdc->group->ra_queue.qfflags & RDC_QFILLSTOP) {
567 if (krdc->group->ra_queue.qfill_sleeping ==
581 rdc_many_exit(krdc);
582 krdc->group = NULL;
590 * krdc->group = NULL;
595 for (p = krdc->group_next; p->group_next != krdc; p = p->group_next)
597 p->group_next = krdc->group_next;
599 rdc_many_exit(krdc);
607 add_to_group(rdc_k_info_t *krdc, int options, int cmd)
609 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
624 rdc_many_enter(krdc);
641 rdc_many_exit(krdc);
647 rdc_many_exit(krdc);
656 rdc_many_exit(krdc);
662 rdc_many_exit(krdc);
669 rdc_many_exit(krdc);
674 krdc->group = ktmp->group;
675 krdc->group_next = ktmp->group_next;
676 ktmp->group_next = krdc;
682 rdc_many_exit(krdc);
688 krdc->group = group;
689 krdc->group_next = krdc;
697 trc = nst_create(_rdc_ioset, rdc_qfiller_thr, (void *)krdc, NST_SLEEP);
705 krdc->group->flags |= RDC_MEMQUE;
707 krdc->group->flags |= RDC_DISKQUE;
712 rc = rdc_resume_diskq(krdc);
715 rc = rdc_enable_diskq(krdc);
720 krdc->group->flags &= ~RDC_DISKQUE;
721 krdc->group->flags |= RDC_MEMQUE;
727 rdc_many_exit(krdc);
736 change_group(rdc_k_info_t *krdc, int options)
738 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
756 rdc_many_enter(krdc);
758 old_group = krdc->group;
759 next = krdc->group_next;
769 if (ktmp == krdc)
802 krdc->group = ktmp->group;
803 krdc->group_next = ktmp->group_next;
804 ktmp->group_next = krdc;
813 krdc->group = group;
814 krdc->group_next = krdc;
816 trc = nst_create(_rdc_ioset, rdc_qfiller_thr, (void *)krdc, NST_SLEEP);
824 krdc->group->flags |= RDC_MEMQUE;
826 krdc->group->flags |= RDC_DISKQUE;
827 if ((rc = rdc_enable_diskq(krdc)) < 0)
832 krdc->type_flag |= RDC_ASYNCMODE;
835 krdc->type_flag &= ~RDC_ASYNCMODE;
869 rdc_many_exit(krdc);
875 for (ktmp = next; ktmp->group_next != krdc; ktmp = ktmp->group_next)
879 rdc_many_exit(krdc);
885 rdc_many_exit(krdc);
896 rdc_k_info_t *krdc = &rdc_k_info[urdc->index];
899 DTRACE_PROBE2(rdc_set_flags, int, krdc->index, int, flags);
908 MUTEX_HELD(&krdc->group->lock));
910 mutex_enter(&krdc->bmapmutex);
915 mutex_exit(&krdc->bmapmutex);
926 ASSERT(MUTEX_HELD(&krdc->bmapmutex));
939 rdc_k_info_t *krdc = &rdc_k_info[urdc->index];
942 DTRACE_PROBE2(rdc_clr_flags, int, krdc->index, int, flags);
950 MUTEX_HELD(&krdc->group->lock));
963 ASSERT(MUTEX_HELD(&krdc->bmapmutex));
998 rdc_k_info_t *krdc = &rdc_k_info[urdc->index];
999 rdc_k_info_t *this = krdc;
1011 for (krdc = krdc->many_next; krdc != this; krdc = krdc->many_next) {
1012 urdc = &rdc_u_info[krdc->index];
1026 rdc_k_info_t *krdc = &rdc_k_info[urdc->index];
1027 rdc_k_info_t *this = krdc;
1049 for (krdc = krdc->many_next; krdc != this; krdc = krdc->many_next) {
1050 utmp = &rdc_u_info[krdc->index];
1064 for (krdc = krdc->many_next; krdc != this;
1065 krdc = krdc->many_next) {
1066 utmp = &rdc_u_info[krdc->index];
1158 rdc_k_info_t *krdc;
1196 krdc = &rdc_k_info[index];
1198 this = krdc;
1211 if (IS_MANY(krdc) && IS_STATE(urdc, RDC_PRIMARY)) {
1212 rdc_many_enter(krdc);
1213 for (krdc = krdc->many_next; krdc != this;
1214 krdc = krdc->many_next) {
1215 urdc = &rdc_u_info[krdc->index];
1220 rdc_many_exit(krdc);
1222 } while (krdc != this);
1227 urdc = &rdc_u_info[krdc->index];
1230 bd.size = min(krdc->bitmap_size, (nsc_size_t)update->size);
1241 urdc->bits_set = RDC_COUNT_BITMAP(krdc);
1242 if (IS_MANY(krdc) && IS_STATE(urdc, RDC_PRIMARY)) {
1243 rdc_many_enter(krdc);
1244 for (krdc = krdc->many_next; krdc != this;
1245 krdc = krdc->many_next) {
1246 index = krdc->index;
1251 rdc_many_exit(krdc);
1253 } while (krdc != this);
1258 rdc_many_enter(krdc);
1260 rdc_many_exit(krdc);
1263 if (krdc->bitmap_write > 0)
1264 (void) rdc_write_bitmap(krdc);
1276 rdc_check(rdc_k_info_t *krdc, rdc_set_t *rdc_set)
1278 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
1280 ASSERT(MUTEX_HELD(&krdc->group->lock));
1336 rdc_k_info_t *krdc;
1343 krdc = &rdc_k_info[index];
1345 ASSERT(krdc->index == index);
1375 rdc_k_info_t *krdc;
1381 krdc = &rdc_k_info[index];
1383 ASSERT(krdc->index == index);
1389 if (allow_disabling == 0 && krdc->type_flag & RDC_UNREGISTER)
1425 rdc_k_info_t *krdc;
1432 krdc = &rdc_k_info[index];
1434 ASSERT(krdc->index == index);
1437 if (!IS_CONFIGURED(krdc))
1467 rdc_k_info_t *krdc;
1474 krdc = &rdc_k_info[index];
1476 if (!IS_CONFIGURED(krdc))
1508 rdc_k_info_t *krdc;
1515 krdc = &rdc_k_info[index];
1517 ASSERT(krdc->index == index);
1520 if (!IS_CONFIGURED(krdc))
1557 rdc_k_info_t *krdc;
1564 krdc = &rdc_k_info[index];
1566 ASSERT(krdc->index == index);
1569 if (!IS_CONFIGURED(krdc))
1600 rdc_k_info_t *krdc;
1607 krdc = &rdc_k_info[index];
1609 ASSERT(krdc->index == index);
1649 rdc_lookup_multimany(rdc_k_info_t *krdc, const int ismany)
1651 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
1662 /* this host is the primary of the krdc set */
1678 /* this host is the secondary of the krdc set */
1707 * krdc but shares the same data volume as krdc.
1711 NSC_MAXPATH) == 0 && (krdc != ktmp)) {
1717 * krdc but shares the same data volume as krdc.
1721 NSC_MAXPATH) == 0 && (krdc != ktmp)) {
1744 rdc_k_info_t *krdc;
1751 krdc = &rdc_k_info[index];
1753 ASSERT(krdc->index == index);
1756 if (!IS_CONFIGURED(krdc))
1771 rdc_open_direct(rdc_k_info_t *krdc)
1773 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
1776 if (krdc->remote_fd == NULL)
1777 krdc->remote_fd = nsc_open(urdc->direct_file,
1779 return (krdc->remote_fd);
1783 rdc_close_direct(rdc_k_info_t *krdc)
1785 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
1788 if (krdc->remote_fd) {
1789 if (nsc_close(krdc->remote_fd) == 0) {
1790 krdc->remote_fd = NULL;
1804 cmn_err(CE_CONT, "!krdc %p, %s %s (many_nxt %p multi_nxt %p)\n",
1816 add_to_multi(rdc_k_info_t *krdc)
1824 urdc = &rdc_u_info[krdc->index];
1829 /* Now find companion krdc */
1830 mindex = rdc_lookup_multimany(krdc, FALSE);
1868 krdc->multi_next = ktmp;
1869 ktmp->multi_next = krdc;
1872 krdc->multi_next = NULL;
1875 krdc->index);
1888 add_to_many(rdc_k_info_t *krdc)
1895 rdc_many_enter(krdc);
1897 if (add_to_multi(krdc) < 0) {
1898 rdc_many_exit(krdc);
1902 oindex = rdc_lookup_multimany(krdc, TRUE);
1905 print_many(krdc);
1907 rdc_many_exit(krdc);
1916 krdc->many_next = okrdc->many_next;
1917 okrdc->many_next = krdc;
1922 rdc_many_exit(krdc);
1998 rdc_k_info_t *krdc;
2130 krdc = &rdc_k_info[index];
2162 rdc_dev_close(krdc);
2167 if ((rc = add_to_group(krdc, options, RDC_CMD_ENABLE)) != 0) {
2169 rdc_dev_close(krdc);
2186 grp = krdc->group;
2193 if (krdc->maxfbas != maxfbas)
2197 NSC_SZFMT, maxfbas, krdc->maxfbas);
2199 krdc->maxfbas = min(krdc->maxfbas, maxfbas);
2215 if (rdc_open_direct(krdc) == NULL)
2219 krdc->many_next = krdc;
2221 ASSERT(krdc->type_flag == 0);
2222 krdc->type_flag = RDC_CONFIGURED;
2228 krdc->type_flag |= RDC_ASYNCMODE;
2230 set_busy(krdc);
2233 if (add_to_many(krdc) < 0) {
2236 rdc_group_enter(krdc);
2244 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2248 rdc_group_enter(krdc);
2251 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2306 /* Don't set krdc->intf here */
2308 if (rdc_enable_bitmap(krdc, options & RDC_OPT_SETBMP) < 0)
2311 RDC_ZERO_BITREF(krdc);
2312 if (krdc->lsrv == NULL)
2313 krdc->lsrv = svp;
2316 cmn_err(CE_WARN, "!_rdc_enable: krdc->lsrv already set: %p",
2317 (void *) krdc->lsrv);
2324 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2328 krdc->remote_index = -1;
2332 rdc_group_exit(krdc);
2334 if (rdc_intercept(krdc) != 0) {
2335 rdc_group_enter(krdc);
2357 wakeup_busy(krdc);
2369 rdc_group_exit(krdc);
2370 (void) rdc_unintercept(krdc);
2371 rdc_group_enter(krdc);
2376 rdc_group_exit(krdc);
2377 if (krdc->intf) {
2378 rdc_if_t *ip = krdc->intf;
2380 krdc->intf = NULL;
2384 rdc_group_enter(krdc);
2386 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2388 rdc_dev_close(krdc);
2389 rdc_close_direct(krdc);
2393 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2395 rdc_group_exit(krdc);
2400 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2402 remove_from_group(krdc);
2404 if (IS_MANY(krdc) || IS_MULTI(krdc))
2405 remove_from_many(krdc);
2409 ASSERT(krdc->type_flag & RDC_CONFIGURED);
2410 krdc->type_flag = 0;
2411 wakeup_busy(krdc);
2458 _rdc_disable(rdc_k_info_t *krdc, rdc_config_t *uap, spcs_s_info_t kstatus)
2460 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
2462 int index = krdc->index;
2466 ASSERT(krdc->group != NULL);
2467 rdc_group_enter(krdc);
2469 ASSERT(rdc_check(krdc, rdc_set) == 0);
2472 rdc_check(krdc, rdc_set)) {
2473 rdc_group_exit(krdc);
2481 halt_sync(krdc);
2484 q = &krdc->group->diskq;
2486 if (IS_ASYNC(urdc) && RDC_IS_DISKQ(krdc->group) &&
2488 krdc->type_flag &= ~RDC_DISABLEPEND;
2489 rdc_group_exit(krdc);
2493 rdc_group_exit(krdc);
2494 (void) rdc_unintercept(krdc);
2502 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2509 if (IS_ASYNC(urdc) && !RDC_IS_DISKQ(krdc->group)) {
2512 net_queue *qp = &krdc->group->ra_queue;
2515 if (!krdc->group->rdc_writer)
2516 (void) rdc_writer(krdc->index);
2518 (void) rdc_drain_queue(krdc->index);
2520 } while (krdc->group->rdc_writer && tries--);
2523 if (rdc_drain_queue(krdc->index) != 0) {
2525 mutex_enter(&krdc->group->ra_queue.net_qlock);
2526 krdc->group->asyncdis = 1;
2527 cv_broadcast(&krdc->group->asyncqcv);
2528 mutex_exit(&krdc->group->ra_queue.net_qlock);
2541 } while (krdc->group->rdc_thrnum > 0);
2546 ip = krdc->intf;
2547 krdc->intf = 0;
2555 rdc_group_enter(krdc);
2558 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2561 rdc_group_exit(krdc);
2562 while (rdc_dump_alloc_bufs_cd(krdc->index) == EAGAIN)
2564 rdc_group_enter(krdc);
2566 (void) rdc_clear_state(krdc);
2568 rdc_free_bitmap(krdc, RDC_CMD_DISABLE);
2569 rdc_close_bitmap(krdc);
2571 rdc_dev_close(krdc);
2572 rdc_close_direct(krdc);
2575 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2577 rdc_group_exit(krdc);
2583 if (krdc->group && RDC_IS_DISKQ(krdc->group) &&
2584 krdc->group->count == 1) { /* stop protecting queue */
2585 rdc_unintercept_diskq(krdc->group);
2591 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
2593 wait_busy(krdc);
2595 if (IS_MANY(krdc) || IS_MULTI(krdc))
2596 remove_from_many(krdc);
2598 remove_from_group(krdc);
2600 krdc->remote_index = -1;
2601 ASSERT(krdc->type_flag & RDC_CONFIGURED);
2602 ASSERT(krdc->type_flag & RDC_DISABLEPEND);
2603 krdc->type_flag = 0;
2605 if (krdc->dcio_bitmap)
2609 krdc->dcio_bitmap = NULL;
2610 krdc->bitmap_ref = NULL;
2611 krdc->bitmap_size = 0;
2612 krdc->maxfbas = 0;
2613 krdc->bitmap_write = 0;
2614 krdc->disk_status = 0;
2615 rdc_destroy_svinfo(krdc->lsrv);
2616 krdc->lsrv = NULL;
2617 krdc->multi_next = NULL;
2630 rdc_k_info_t *krdc;
2638 krdc = &rdc_k_info[index];
2639 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
2646 krdc->type_flag |= RDC_DISABLEPEND;
2647 wait_busy(krdc);
2648 if (krdc->type_flag == 0) {
2657 rc = _rdc_disable(krdc, uparms, kstatus);
2671 rdc_k_info_t *krdc = &rdc_k_info[urdc->index];
2678 rdc_many_enter(krdc);
2685 if ((options & RDC_OPT_REVERSE) && (IS_MULTI(krdc))) {
2687 ktmp = krdc->multi_next;
2693 if (IS_MANY(krdc)) {
2694 for (ktmp = krdc->many_next; ktmp != krdc;
2710 rdc_many_exit(krdc);
2728 rdc_many_exit(krdc);
2746 rdc_many_exit(krdc);
2758 rdc_many_exit(krdc);
2771 if (IS_MANY(krdc) && (options & RDC_OPT_REVERSE)) {
2772 for (ktmp = krdc->many_next; ktmp != krdc;
2789 rdc_many_exit(krdc);
2799 rdc_k_info_t *krdc = syncinfo->krdc;
2803 DTRACE_PROBE2(rdc_sync_loop_netwrite_start, int, krdc->index,
2807 rc = nsc_alloc_buf(RDC_U_FD(krdc), syncinfo->offset, syncinfo->len,
2810 if (!RDC_SUCCESS(rc) || krdc->remote_index < 0) {
2815 rdc_group_enter(krdc);
2816 if ((krdc->disk_status == 1) || (krdc->dcio_bitmap == NULL)) {
2817 rdc_group_exit(krdc);
2820 rdc_group_exit(krdc);
2822 if ((rc = rdc_net_write(krdc->index, krdc->remote_index, handle,
2824 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
2863 rdc_k_info_t *krdc = syncinfo->krdc;
2864 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
2867 rc = nsc_alloc_buf(RDC_U_FD(krdc), syncinfo->offset, syncinfo->len,
2870 if (!RDC_SUCCESS(rc) || krdc->remote_index < 0) {
2873 rdc_group_enter(krdc);
2874 if ((krdc->disk_status == 1) || (krdc->dcio_bitmap == NULL)) {
2875 rdc_group_exit(krdc);
2878 rdc_group_exit(krdc);
2880 rc = rdc_net_read(krdc->index, krdc->remote_index, handle,
2888 rdc_set_bitmap_many(krdc, handle->sb_pos, handle->sb_len);
2893 rdc_many_enter(krdc);
2895 rdc_many_exit(krdc);
2920 rdc_k_info_t *krdc = syncinfo->krdc;
2921 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
2922 rdc_thrsync_t *sync = &krdc->syncs;
2926 rc = _rdc_rsrv_devs(krdc, RDC_RAW, RDC_INTERNAL);
2935 _rdc_rlse_devs(krdc, RDC_RAW);
2937 if (krdc->dcio_bitmap == NULL) {
2946 RDC_CLR_BITMAP(krdc, syncinfo->offset, syncinfo->len, \
2968 * krdc specific stuff
2978 nsc_size_t len, rdc_k_info_t *krdc, sync_status_t *stats)
2990 tmp->krdc = krdc;
3045 _rdc_sync(rdc_k_info_t *krdc)
3048 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
3064 rdc_thrsync_t *sync = &krdc->syncs;
3080 sts = _rdc_rsrv_devs(krdc, rtype, RDC_INTERNAL);
3094 alloc_h = nsc_alloc_handle(RDC_U_FD(krdc), NULL, NULL, NULL);
3114 rdc_group_enter(krdc);
3117 krdc->group->synccount++;
3118 rdc_group_exit(krdc);
3126 rdc_group_enter(krdc);
3127 ASSERT(krdc->aux_state & RDC_AUXSYNCIP);
3128 if (krdc->disk_status == 1 || krdc->dcio_bitmap == NULL) {
3129 rdc_group_exit(krdc);
3130 if (krdc->disk_status == 1) {
3137 rdc_group_exit(krdc);
3140 mutex_enter(&krdc->syncbitmutex);
3141 krdc->syncbitpos = FBA_TO_LOG_NUM(offset);
3146 while (krdc->syncbitpos <= maxbit &&
3147 !RDC_BIT_ISSET(krdc, krdc->syncbitpos)) {
3149 krdc->syncbitpos++;
3155 mutex_exit(&krdc->syncbitmutex);
3161 while (krdc->syncbitpos <= maxbit &&
3162 RDC_BIT_ISSET(krdc, krdc->syncbitpos)) {
3164 krdc->syncbitpos++;
3166 if (len >= krdc->maxfbas)
3177 ASSERT(krdc->maxfbas != 0);
3178 len = min(len, krdc->maxfbas);
3193 krdc->syncbitpos = FBA_TO_LOG_NUM(offset + len);
3194 mutex_exit(&krdc->syncbitmutex);
3228 offset, len, krdc, ss) < 0) {
3264 sts = nsc_alloc_buf(RDC_U_FD(krdc), offset, len,
3267 sts = nsc_alloc_buf(RDC_U_FD(krdc), offset, len,
3283 sts = rdc_net_read(krdc->index, krdc->remote_index,
3295 rdc_set_bitmap_many(krdc, handle->sb_pos,
3305 rdc_many_enter(krdc);
3308 rdc_many_exit(krdc);
3316 int, krdc->index, nsc_buf_t *, handle);
3318 if ((sts = rdc_net_write(krdc->index,
3319 krdc->remote_index, handle, handle->sb_pos,
3349 if (krdc->dcio_bitmap == NULL) {
3359 RDC_CLR_BITMAP(krdc, offset, len, bitmask, \
3367 if (krdc->devices->id_release || nsc_waiting(RDC_U_FD(krdc))) {
3374 _rdc_rlse_devs(krdc, rtype);
3379 sts = _rdc_rsrv_devs(krdc, rtype, RDC_INTERNAL);
3389 alloc_h = nsc_alloc_handle(RDC_U_FD(krdc),
3409 krdc->group->synccount--;
3452 _rdc_rlse_devs(krdc, rtype);
3456 rdc_group_enter(krdc);
3457 ASSERT(krdc->aux_state & RDC_AUXSYNCIP);
3462 (void) rdc_net_state(krdc->index, CCIO_DONE);
3464 (void) rdc_net_state(krdc->index, CCIO_ENABLELOG);
3469 rdc_many_enter(krdc);
3471 rdc_many_exit(krdc);
3473 if (krdc->type_flag & RDC_ASYNCMODE)
3476 rdc_many_enter(krdc);
3478 rdc_many_exit(krdc);
3480 krdc->remote_index = -1;
3483 rdc_group_exit(krdc);
3488 krdc->sync_done = RDC_COMPLETED;
3490 krdc->sync_done = RDC_FAILED;
3491 cv_broadcast(&krdc->synccv);
3505 rdc_k_info_t *krdc;
3518 krdc = &rdc_k_info[index];
3519 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
3528 group = krdc->group;
3529 set_busy(krdc);
3531 if ((krdc->type_flag == 0) || (krdc->type_flag & RDC_DISABLEPEND)) {
3540 rdc_group_enter(krdc);
3549 if (rdc_check(krdc, rdc_set)) {
3575 svp = krdc->lsrv;
3576 krdc->intf = rdc_add_to_if(svp, &(urdc->primary.addr),
3579 if (!krdc->intf) {
3588 rdc_get_details(krdc);
3596 if (krdc->dcio_bitmap == NULL) {
3597 if (rdc_resume_bitmap(krdc) < 0) {
3604 if ((rdc_get_vflags(urdc) & RDC_BMP_FAILED) && (krdc->bitmapfd)) {
3605 if (rdc_reset_bitmap(krdc)) {
3612 if (IS_MANY(krdc) || IS_MULTI(krdc)) {
3630 if (krdc->aux_state & RDC_AUXSYNCIP) {
3641 if (krdc->disk_status == 1) {
3660 if (rdc_net_getstate(krdc, &sm, &um, &md, FALSE) < 0) {
3671 krdc->remote_index = rdc_net_state(index, CCIO_RSYNC);
3673 krdc->remote_index = rdc_net_state(index, CCIO_SLAVE);
3674 if (krdc->remote_index < 0) {
3688 (void) rdc_net_state(krdc->index, CCIO_ENABLELOG);
3692 krdc->sync_done = 0;
3694 mutex_enter(&krdc->bmapmutex);
3695 krdc->aux_state |= RDC_AUXSYNCIP;
3696 mutex_exit(&krdc->bmapmutex);
3699 rdc_many_enter(krdc);
3701 mutex_enter(&krdc->bmapmutex);
3703 mutex_exit(&krdc->bmapmutex);
3706 if (kmulti = krdc->multi_next) {
3715 rdc_many_exit(krdc);
3732 rdc_many_enter(krdc);
3734 rdc_many_exit(krdc);
3736 if (krdc->type_flag & RDC_ASYNCMODE)
3738 krdc->remote_index = -1;
3750 (void) RDC_FILL_BITMAP(krdc, FALSE);
3755 rdc_group_exit(krdc);
3760 mutex_enter(&krdc->group->ra_queue.net_qlock);
3761 krdc->group->ra_queue.qfflags &= ~RDC_QFILLSLEEP;
3762 mutex_exit(&krdc->group->ra_queue.net_qlock);
3768 if (krdc->type_flag & RDC_ASYNCMODE) {
3770 (!RDC_IS_DISKQ(krdc->group)) ||
3773 rdc_group_enter(krdc);
3775 rdc_group_exit(krdc);
3787 rdc_unfail_diskq(krdc);
3798 rdc_group_enter(krdc);
3800 rdc_group_exit(krdc);
3801 mutex_enter(&krdc->group->ra_queue.net_qlock);
3802 if (krdc->group->ra_queue.qfill_sleeping ==
3805 mutex_exit(&krdc->group->ra_queue.net_qlock);
3808 !krdc->group->rdc_writer) {
3809 (void) rdc_writer(krdc->index);
3821 rdc_many_enter(krdc);
3822 if (IS_MANY(krdc)) {
3826 for (kmany = krdc->many_next; kmany != krdc;
3834 rdc_many_exit(krdc);
3838 rdc_merge_bitmaps(krdc, kmany);
3842 rdc_many_exit(krdc);
3845 rdc_many_enter(krdc);
3846 if (IS_MULTI(krdc)) {
3847 rdc_k_info_t *kmulti = krdc->multi_next;
3854 rdc_many_exit(krdc);
3857 rdc_merge_bitmaps(krdc, kmulti);
3861 rdc_many_exit(krdc);
3864 rdc_group_enter(krdc);
3866 if (krdc->bitmap_write == 0) {
3867 if (rdc_write_bitmap_fill(krdc) >= 0)
3868 krdc->bitmap_write = -1;
3871 if (krdc->bitmap_write > 0)
3872 (void) rdc_write_bitmap(krdc);
3874 urdc->bits_set = RDC_COUNT_BITMAP(krdc);
3876 rdc_group_exit(krdc);
3887 (void (*)(void *))_rdc_sync, (void *)krdc, FALSE)) {
3900 rdc_group_enter(krdc);
3905 wakeup_busy(krdc);
3909 while (krdc->sync_done == 0)
3910 cv_wait(&krdc->synccv, &net_blk_lock);
3913 rdc_group_enter(krdc);
3915 if (krdc->sync_done == RDC_FAILED) {
3930 krdc->aux_state &= ~RDC_AUXSYNCIP;
3931 if (krdc->disk_status == 1) {
3932 krdc->disk_status = 0;
3933 cv_broadcast(&krdc->haltcv);
3937 rdc_group_exit(krdc);
3947 wakeup_busy(krdc);
3956 _rdc_suspend(rdc_k_info_t *krdc, rdc_set_t *rdc_set, spcs_s_info_t kstatus)
3958 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
3960 int index = krdc->index;
3962 ASSERT(krdc->group != NULL);
3963 rdc_group_enter(krdc);
3965 ASSERT(rdc_check(krdc, rdc_set) == 0);
3967 if (rdc_check(krdc, rdc_set)) {
3968 rdc_group_exit(krdc);
3976 halt_sync(krdc);
3980 rdc_group_exit(krdc);
3981 (void) rdc_unintercept(krdc);
3989 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
3992 if (IS_ASYNC(urdc) && !RDC_IS_DISKQ(krdc->group)) {
3995 net_queue *qp = &krdc->group->ra_queue;
3998 if (!krdc->group->rdc_writer)
3999 (void) rdc_writer(krdc->index);
4001 (void) rdc_drain_queue(krdc->index);
4003 } while (krdc->group->rdc_writer && tries--);
4006 if (rdc_drain_queue(krdc->index) != 0) {
4008 mutex_enter(&krdc->group->ra_queue.net_qlock);
4009 krdc->group->asyncdis = 1;
4010 cv_broadcast(&krdc->group->asyncqcv);
4011 mutex_exit(&krdc->group->ra_queue.net_qlock);
4024 } while (krdc->group->rdc_thrnum > 0);
4029 ip = krdc->intf;
4030 krdc->intf = 0;
4038 rdc_group_enter(krdc);
4041 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
4043 rdc_group_exit(krdc);
4045 while (rdc_dump_alloc_bufs_cd(krdc->index) == EAGAIN)
4047 rdc_group_enter(krdc);
4051 rdc_free_bitmap(krdc, RDC_CMD_SUSPEND);
4052 rdc_close_bitmap(krdc);
4054 rdc_dev_close(krdc);
4055 rdc_close_direct(krdc);
4058 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
4060 rdc_group_exit(krdc);
4066 if (krdc->group && RDC_IS_DISKQ(krdc->group) &&
4067 krdc->group->count == 1) { /* stop protecting queue */
4068 rdc_unintercept_diskq(krdc->group);
4074 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
4076 wait_busy(krdc);
4078 if (IS_MANY(krdc) || IS_MULTI(krdc))
4079 remove_from_many(krdc);
4081 remove_from_group(krdc);
4083 krdc->remote_index = -1;
4084 ASSERT(krdc->type_flag & RDC_CONFIGURED);
4085 ASSERT(krdc->type_flag & RDC_DISABLEPEND);
4086 krdc->type_flag = 0;
4088 if (krdc->dcio_bitmap)
4092 krdc->dcio_bitmap = NULL;
4093 krdc->bitmap_ref = NULL;
4094 krdc->bitmap_size = 0;
4095 krdc->maxfbas = 0;
4096 krdc->bitmap_write = 0;
4097 krdc->disk_status = 0;
4098 rdc_destroy_svinfo(krdc->lsrv);
4099 krdc->lsrv = NULL;
4100 krdc->multi_next = NULL;
4112 rdc_k_info_t *krdc;
4120 krdc = &rdc_k_info[index];
4121 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
4128 krdc->type_flag |= RDC_DISABLEPEND;
4129 wait_busy(krdc);
4130 if (krdc->type_flag == 0) {
4139 rc = _rdc_suspend(krdc, uparms->rdc_set, kstatus);
4149 rdc_k_info_t *krdc;
4261 krdc = &rdc_k_info[index];
4287 rdc_dev_close(krdc);
4298 if ((rc1 = add_to_group(krdc, options, RDC_CMD_RESUME)) != 0) {
4300 rdc_fail_diskq(krdc, RDC_WAIT, RDC_NOLOG);
4305 rdc_dev_close(krdc);
4318 grp = krdc->group;
4325 if (krdc->maxfbas != maxfbas)
4329 NSC_SZFMT, maxfbas, krdc->maxfbas);
4331 krdc->maxfbas = min(krdc->maxfbas,
4347 if (rdc_open_direct(krdc) == NULL)
4351 krdc->many_next = krdc;
4353 ASSERT(krdc->type_flag == 0);
4354 krdc->type_flag = RDC_CONFIGURED;
4360 krdc->type_flag |= RDC_ASYNCMODE;
4362 set_busy(krdc);
4366 if (add_to_many(krdc) < 0) {
4369 rdc_group_enter(krdc);
4377 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
4382 rdc_many_enter(krdc);
4388 rdc_many_exit(krdc);
4391 rdc_group_enter(krdc);
4394 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
4432 /* Don't set krdc->intf here */
4437 (void) rdc_resume_bitmap(krdc);
4439 if (RDC_IS_DISKQ(krdc->group)) {
4440 disk_queue *q = &krdc->group->diskq;
4444 RDC_ZERO_BITREF(krdc);
4448 if (krdc->lsrv == NULL)
4449 krdc->lsrv = svp;
4452 cmn_err(CE_WARN, "!_rdc_resume: krdc->lsrv already set: %p",
4453 (void *) krdc->lsrv);
4460 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
4464 krdc->remote_index = -1;
4469 rdc_group_exit(krdc);
4471 if (rdc_intercept(krdc) != 0) {
4472 rdc_group_enter(krdc);
4494 wakeup_busy(krdc);
4506 rdc_group_exit(krdc);
4507 (void) rdc_unintercept(krdc);
4508 rdc_group_enter(krdc);
4513 /* Don't unset krdc->intf here, unlike _rdc_enable */
4516 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
4518 rdc_dev_close(krdc);
4519 rdc_close_direct(krdc);
4523 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
4525 rdc_group_exit(krdc);
4530 ASSERT(IS_CONFIGURED(krdc) && !IS_ENABLED(urdc));
4532 remove_from_group(krdc);
4534 if (IS_MANY(krdc) || IS_MULTI(krdc))
4535 remove_from_many(krdc);
4539 ASSERT(krdc->type_flag & RDC_CONFIGURED);
4540 krdc->type_flag = 0;
4541 wakeup_busy(krdc);
4587 rdc_can_queue(rdc_k_info_t *krdc)
4592 for (p = krdc->group_next; ; p = p->group_next) {
4596 if (p == krdc)
4623 rdc_group_log(rdc_k_info_t *krdc, int flag, char *why)
4625 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
4634 ASSERT(MUTEX_HELD(&krdc->group->lock));
4639 rdc_many_enter(krdc);
4642 (rdc_can_queue(krdc))) {
4657 for (p = krdc->group_next; p != krdc; p = p->group_next) {
4671 rdc_many_exit(krdc);
4672 dq = &krdc->group->diskq;
4681 rdc_many_enter(krdc);
4683 if (RDC_IS_DISKQ(krdc->group))
4685 for (p = krdc->group_next; p != krdc; p = p->group_next) {
4695 rdc_many_exit(krdc);
4702 rdc_group_exit(krdc);
4704 while (rdc_dump_alloc_bufs_cd(krdc->index) == EAGAIN)
4706 if (!RDC_IS_DISKQ(krdc->group))
4707 RDC_ZERO_BITREF(krdc);
4709 rdc_inflwait(krdc->group);
4716 while (rdc_dump_alloc_bufs_cd(krdc->index) == EAGAIN)
4719 rdc_group_enter(krdc);
4720 if (RDC_IS_DISKQ(krdc->group) && (!(flag & RDC_QUEUING))) {
4722 RDC_ZERO_BITREF(krdc);
4723 mutex_enter(&krdc->group->diskq.disk_qlock);
4724 rdc_init_diskq_header(krdc->group,
4725 &krdc->group->diskq.disk_hdr);
4727 mutex_exit(&krdc->group->diskq.disk_qlock);
4732 if (krdc->lsrv && krdc->intf && !krdc->intf->if_down)
4733 (void) rdc_net_state(krdc->index,
4738 rdc_many_enter(krdc);
4739 for (p = krdc->group_next; p != krdc;
4741 if (p->lsrv && krdc->intf &&
4742 !krdc->intf->if_down) {
4747 rdc_many_exit(krdc);
4751 for (p = krdc->group_next; p != krdc; p = p->group_next) {
4761 halt_sync(krdc);
4763 if (rdc_net_getstate(krdc, &sm, &um, &md, TRUE) < 0) {
4769 while (rdc_dump_alloc_bufs_cd(krdc->index)
4772 if ((RDC_IS_DISKQ(krdc->group)) &&
4775 rdc_init_diskq_header(krdc->group,
4776 &krdc->group->diskq.disk_hdr);
4788 if (RDC_IS_DISKQ(krdc->group))
4791 if ((RDC_IS_DISKQ(krdc->group)) &&
4793 RDC_ZERO_BITREF(krdc);
4795 rdc_init_diskq_header(krdc->group,
4796 &krdc->group->diskq.disk_hdr);
4806 while (rdc_dump_alloc_bufs_cd(krdc->index) == EAGAIN)
4808 if (!RDC_IS_DISKQ(krdc->group))
4809 RDC_ZERO_BITREF(krdc);
4811 rdc_inflwait(krdc->group);
4817 while (rdc_dump_alloc_bufs_cd(krdc->index) == EAGAIN)
4822 if (krdc->lsrv && krdc->intf &&
4823 !krdc->intf->if_down) {
4824 (void) rdc_net_state(krdc->index,
4833 if (RDC_IS_DISKQ(krdc->group)) {
4841 _rdc_log(rdc_k_info_t *krdc, rdc_set_t *rdc_set, spcs_s_info_t kstatus)
4843 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
4846 rdc_group_enter(krdc);
4847 if (rdc_check(krdc, rdc_set)) {
4848 rdc_group_exit(krdc);
4854 svp = krdc->lsrv;
4856 krdc->intf = rdc_add_to_if(svp, &(urdc->primary.addr),
4859 krdc->intf = rdc_add_to_if(svp, &(urdc->secondary.addr),
4862 if (!krdc->intf) {
4863 rdc_group_exit(krdc);
4869 rdc_group_log(krdc, RDC_FLUSH | RDC_ALLREMOTE, NULL);
4872 rdc_group_exit(krdc);
4877 rdc_group_exit(krdc);
4885 rdc_k_info_t *krdc;
4892 krdc = &rdc_k_info[index];
4893 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
4900 set_busy(krdc);
4901 if (krdc->type_flag == 0) {
4903 wakeup_busy(krdc);
4911 rc = _rdc_log(krdc, uparms->rdc_set, kstatus);
4914 wakeup_busy(krdc);
4924 rdc_k_info_t *krdc;
4932 krdc = &rdc_k_info[index];
4933 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
4946 set_busy(krdc);
4947 if (krdc->type_flag == 0) {
4949 wakeup_busy(krdc);
4957 rdc_group_enter(krdc);
4958 if (rdc_check(krdc, uparms->rdc_set)) {
4959 rdc_group_exit(krdc);
4961 wakeup_busy(krdc);
4970 rdc_group_exit(krdc);
4972 wakeup_busy(krdc);
4979 rdc_group_exit(krdc);
4984 wakeup_busy(krdc);
4987 (void) cv_wait_sig(&krdc->synccv, &net_blk_lock);
4991 if (krdc->sync_done == RDC_COMPLETED) {
4993 } else if (krdc->sync_done == RDC_FAILED) {
5004 rdc_k_info_t *krdc;
5012 krdc = &rdc_k_info[index];
5013 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
5020 set_busy(krdc);
5021 if (krdc->type_flag == 0) {
5023 wakeup_busy(krdc);
5032 rdc_group_enter(krdc);
5033 if (rdc_check(krdc, uparms->rdc_set)) {
5034 rdc_group_exit(krdc);
5047 rdc_group_exit(krdc);
5051 wakeup_busy(krdc);
5061 rdc_k_info_t *krdc;
5069 krdc = &rdc_k_info[index];
5070 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
5078 set_busy(krdc);
5079 if (krdc->type_flag == 0) {
5081 wakeup_busy(krdc);
5090 rdc_group_enter(krdc);
5091 if (rdc_check(krdc, uparms->rdc_set)) {
5092 rdc_group_exit(krdc);
5098 if ((rdc_get_vflags(urdc) & RDC_BMP_FAILED) && (krdc->bitmapfd))
5099 (void) rdc_reset_bitmap(krdc);
5105 rc = rdc_move_bitmap(krdc,
5122 rc = rdc_move_bitmap(krdc,
5127 rdc_group_exit(krdc);
5142 rdc_group_exit(krdc);
5157 rdc_group_exit(krdc);
5160 rdc_close_direct(krdc);
5165 if (rdc_open_direct(krdc) == NULL)
5172 rdc_group_exit(krdc);
5186 rc = change_group(krdc, uparms->options);
5211 krdc->type_flag |= RDC_ASYNCMODE;
5214 krdc->bitmap_ref =
5216 (krdc->bitmap_size * BITS_IN_BYTE *
5218 rdc_group_enter(krdc);
5220 rdc_group_exit(krdc);
5223 krdc->type_flag &= ~RDC_ASYNCMODE;
5225 rdc_group_enter(krdc);
5227 rdc_group_exit(krdc);
5228 if (krdc->bitmap_ref) {
5229 kmem_free(krdc->bitmap_ref,
5230 (krdc->bitmap_size * BITS_IN_BYTE *
5232 krdc->bitmap_ref = NULL;
5238 ((krdc->type_flag & RDC_ASYNCMODE) != 0)) ||
5240 ((krdc->type_flag & RDC_ASYNCMODE) == 0))) {
5244 if (krdc->group->count > 1) {
5252 if (krdc->group->count == 1) {
5255 ((krdc->type_flag & RDC_ASYNCMODE) != 0)) {
5260 krdc->type_flag &= ~RDC_ASYNCMODE;
5261 if (RDC_IS_DISKQ(krdc->group)) {
5262 krdc->group->flags &= ~RDC_DISKQUE;
5263 krdc->group->flags |= RDC_MEMQUE;
5264 rdc_unintercept_diskq(krdc->group);
5265 mutex_enter(&krdc->group->diskqmutex);
5266 rdc_close_diskq(krdc->group);
5267 mutex_exit(&krdc->group->diskqmutex);
5272 rdc_group_enter(krdc);
5274 rdc_group_exit(krdc);
5275 if (krdc->bitmap_ref) {
5276 kmem_free(krdc->bitmap_ref,
5277 (krdc->bitmap_size * BITS_IN_BYTE *
5279 krdc->bitmap_ref = NULL;
5282 ((krdc->type_flag & RDC_ASYNCMODE) == 0)) {
5287 krdc->type_flag |= RDC_ASYNCMODE;
5290 krdc->bitmap_ref =
5292 (krdc->bitmap_size * BITS_IN_BYTE *
5294 rdc_group_enter(krdc);
5296 rdc_group_exit(krdc);
5311 if (IS_MANY(krdc) || IS_MULTI(krdc)) {
5353 if (krdc->intf) {
5354 krdc->intf->issecondary = 1;
5355 krdc->intf->isprimary = 0;
5356 krdc->intf->if_down = 1;
5360 if (krdc->intf) {
5361 krdc->intf->issecondary = 0;
5362 krdc->intf->isprimary = 1;
5363 krdc->intf->if_down = 1;
5368 ((krdc->type_flag & RDC_ASYNCMODE) != 0)) {
5369 if (!krdc->bitmap_ref)
5370 krdc->bitmap_ref =
5371 (uchar_t *)kmem_zalloc((krdc->bitmap_size *
5374 if (krdc->bitmap_ref == NULL) {
5378 krdc->bitmap_size * BITS_IN_BYTE *
5388 rdc_many_enter(krdc);
5391 rdc_many_exit(krdc);
5394 rdc_many_enter(krdc);
5397 rdc_many_exit(krdc);
5409 wakeup_busy(krdc);
5417 wakeup_busy(krdc);
5428 rdc_k_info_t *krdc;
5437 krdc = &rdc_k_info[index];
5438 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
5446 set_busy(krdc);
5447 if (krdc->type_flag == 0) {
5449 wakeup_busy(krdc);
5458 rdc_group_enter(krdc);
5459 if (rdc_check(krdc, uparms->rdc_set)) {
5466 if ((rdc_get_vflags(urdc) & RDC_BMP_FAILED) && (krdc->bitmapfd)) {
5467 if (rdc_reset_bitmap(krdc) == 0)
5473 if (rdc_open_direct(krdc) == NULL)
5482 rdc_many_enter(krdc);
5485 rdc_many_exit(krdc);
5492 rdc_group_exit(krdc);
5495 rdc_unfail_diskq(krdc);
5499 wakeup_busy(krdc);
5509 rdc_k_info_t *krdc;
5519 krdc = &rdc_k_info[index];
5520 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
5528 set_busy(krdc);
5529 if (krdc->type_flag == 0) {
5531 wakeup_busy(krdc);
5540 rdc_group_enter(krdc);
5541 if (rdc_check(krdc, uparms->rdc_set)) {
5551 for (p = krdc->group_next; p != krdc; p = p->group_next) {
5561 for (p = krdc->group_next; p != krdc; p = p->group_next) {
5571 if (!RDC_IS_DISKQ(krdc->group)) {
5579 que = &krdc->group->diskq;
5583 (void) rdc_stamp_diskq(krdc, 0, RDC_GROUP_LOCKED);
5591 if (!RDC_IS_DISKQ(krdc->group)) {
5598 que = &krdc->group->diskq;
5602 (void) rdc_stamp_diskq(krdc, 0, RDC_GROUP_LOCKED);
5609 for (p = krdc->group_next; p != krdc; p = p->group_next) {
5626 for (p = krdc->group_next; p != krdc; p = p->group_next) {
5634 rdc_group_exit(krdc);
5637 wakeup_busy(krdc);
5646 rdc_k_info_t *krdc;
5657 krdc = &rdc_k_info[index];
5658 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
5665 set_busy(krdc);
5666 if (krdc->type_flag == 0) {
5668 wakeup_busy(krdc);
5677 rdc_group_enter(krdc);
5678 if (rdc_check(krdc, uparms->rdc_set)) {
5679 rdc_group_exit(krdc);
5694 if (RDC_IS_DISKQ(krdc->group)) {
5695 dqp = &krdc->group->diskq;
5714 rdc_group_exit(krdc);
5717 wakeup_busy(krdc);
5734 rdc_k_info_t *krdc;
5758 krdc = &rdc_k_info[index];
5760 if (index < 0 || (krdc->type_flag & RDC_DISABLEPEND)) {
5779 set_busy(krdc);
5785 rdc_many_enter(krdc);
5789 if (!mutex_tryenter(&krdc->group->lock)) {
5790 rdc_many_exit(krdc);
5794 grouplocks[groupind] = &krdc->group->lock;
5803 if (IS_MANY(krdc)) {
5806 for (ktmp = krdc->many_next; ktmp != krdc;
5830 rdc_many_exit(krdc);
5845 if (IS_MULTI(krdc)) {
5846 rdc_k_info_t *kmulti = krdc->multi_next;
5859 rdc_many_exit(krdc);
5879 rdc_many_exit(krdc);
5881 wakeup_busy(krdc);
5891 rdc_k_info_t *krdc;
5894 krdc = &rdc_k_info[index];
5903 if (krdc->dcio_bitmap == NULL) {
5908 if (limit > krdc->bitmap_size) {
5911 " for set (%s:%s)", krdc->bitmap_size,
5936 rdc_k_info_t *krdc;
5958 krdc = &rdc_k_info[vec[index]];
5961 mutex_enter(&krdc->bmapmutex);
5963 bcopy(ormem, krdc->dcio_bitmap + off + copied,
5967 krdc->dcio_bitmap + off + copied, len);
5974 urdc->bits_set = RDC_COUNT_BITMAP(krdc);
5975 mutex_exit(&krdc->bmapmutex);
5976 if (krdc->bitmap_write > 0) {
5978 if (rc = rdc_write_bitmap_fba(krdc,
6285 * krdc->group->lock held on entry to halt_sync()
6288 halt_sync(rdc_k_info_t *krdc)
6290 rdc_u_info_t *urdc = &rdc_u_info[krdc->index];
6292 ASSERT(MUTEX_HELD(&krdc->group->lock));
6299 (krdc->aux_state & RDC_AUXSYNCIP)) {
6300 krdc->disk_status = 1;
6302 while (krdc->disk_status == 1) {
6303 if (cv_wait_sig(&krdc->haltcv, &krdc->group->lock) == 0)
6315 rdc_k_info_t *krdc;
6320 krdc = &rdc_k_info[index];
6323 rc = _rdc_rsrv_devs(krdc, RDC_RAW, RDC_INTERNAL);
6324 rs = nsc_partsize(RDC_U_FD(krdc), &size);
6327 _rdc_rlse_devs(krdc, RDC_RAW);
6335 * of datasets via the net_dataset pointer in the krdc.
6340 rdc_k_info_t *krdc;
6348 krdc = &rdc_k_info[index];
6362 mutex_enter(&krdc->dc_sleep);
6368 mutex_exit(&krdc->dc_sleep);
6381 if (krdc->net_dataset != NULL) {
6383 for (dset2 = krdc->net_dataset; dset2; dset2 = dset2->next) {
6393 dset->next = krdc->net_dataset;
6394 krdc->net_dataset = dset;
6395 mutex_exit(&krdc->dc_sleep);
6406 rdc_k_info_t *krdc;
6413 krdc = &rdc_k_info[index];
6415 mutex_enter(&krdc->dc_sleep);
6417 dset = krdc->net_dataset;
6425 mutex_exit(&krdc->dc_sleep);
6435 rdc_k_info_t *krdc;
6441 krdc = &rdc_k_info[index];
6443 mutex_enter(&krdc->dc_sleep);
6447 rdc_net_free_set(krdc, dset);
6449 mutex_exit(&krdc->dc_sleep);
6460 rdc_k_info_t *krdc;
6466 krdc = &rdc_k_info[index];
6468 mutex_enter(&krdc->dc_sleep);
6473 rdc_net_free_set(krdc, dset);
6475 mutex_exit(&krdc->dc_sleep);
6485 rdc_net_free_set(rdc_k_info_t *krdc, rdc_net_dataset_t *dset)
6492 ASSERT(MUTEX_HELD(&krdc->dc_sleep));
6494 for (dsetp = &krdc->net_dataset; *dsetp; dsetp = &((*dsetp)->next)) {
6507 "dataset 0x%p in krdc list", (void *)dset);
6602 rdc_aio_buf_del(rdc_buf_t *h, rdc_k_info_t *krdc)
6610 if ((*pp)->kindex == krdc->index) {