2636 rq->q_struiot =
2637 (rq->q_flag & QSYNCSTR) ? rinit->qi_struiot : STRUIOT_NONE;
2638 wq->q_struiot =
2639 (wq->q_flag & QSYNCSTR) ? winit->qi_struiot : STRUIOT_NONE;
2640 }
2641
2642 perdm_t *
2643 hold_dm(struct streamtab *str, uint32_t qflag, uint32_t sqtype)
2644 {
2645 syncq_t *sq;
2646 perdm_t **pp;
2647 perdm_t *p;
2648 perdm_t *dmp;
2649
2650 ASSERT(str != NULL);
2651 ASSERT(qflag & (QPERMOD | QMTOUTPERIM));
2652
2653 rw_enter(&perdm_rwlock, RW_READER);
2654 for (p = perdm_list; p != NULL; p = p->dm_next) {
2655 if (p->dm_str == str) { /* found one */
2656 atomic_add_32(&(p->dm_ref), 1);
2657 rw_exit(&perdm_rwlock);
2658 return (p);
2659 }
2660 }
2661 rw_exit(&perdm_rwlock);
2662
2663 sq = new_syncq();
2664 if (qflag & QPERMOD) {
2665 sq->sq_type = sqtype | SQ_PERMOD;
2666 sq->sq_flags = sqtype & SQ_TYPES_IN_FLAGS;
2667 } else {
2668 ASSERT(qflag & QMTOUTPERIM);
2669 sq->sq_onext = sq->sq_oprev = sq;
2670 }
2671
2672 dmp = kmem_alloc(sizeof (perdm_t), KM_SLEEP);
2673 dmp->dm_sq = sq;
2674 dmp->dm_str = str;
2675 dmp->dm_ref = 1;
2676 dmp->dm_next = NULL;
|
2636 rq->q_struiot =
2637 (rq->q_flag & QSYNCSTR) ? rinit->qi_struiot : STRUIOT_NONE;
2638 wq->q_struiot =
2639 (wq->q_flag & QSYNCSTR) ? winit->qi_struiot : STRUIOT_NONE;
2640 }
2641
2642 perdm_t *
2643 hold_dm(struct streamtab *str, uint32_t qflag, uint32_t sqtype)
2644 {
2645 syncq_t *sq;
2646 perdm_t **pp;
2647 perdm_t *p;
2648 perdm_t *dmp;
2649
2650 ASSERT(str != NULL);
2651 ASSERT(qflag & (QPERMOD | QMTOUTPERIM));
2652
2653 rw_enter(&perdm_rwlock, RW_READER);
2654 for (p = perdm_list; p != NULL; p = p->dm_next) {
2655 if (p->dm_str == str) { /* found one */
2656 atomic_inc_32(&(p->dm_ref));
2657 rw_exit(&perdm_rwlock);
2658 return (p);
2659 }
2660 }
2661 rw_exit(&perdm_rwlock);
2662
2663 sq = new_syncq();
2664 if (qflag & QPERMOD) {
2665 sq->sq_type = sqtype | SQ_PERMOD;
2666 sq->sq_flags = sqtype & SQ_TYPES_IN_FLAGS;
2667 } else {
2668 ASSERT(qflag & QMTOUTPERIM);
2669 sq->sq_onext = sq->sq_oprev = sq;
2670 }
2671
2672 dmp = kmem_alloc(sizeof (perdm_t), KM_SLEEP);
2673 dmp->dm_sq = sq;
2674 dmp->dm_str = str;
2675 dmp->dm_ref = 1;
2676 dmp->dm_next = NULL;
|