Lines Matching refs:csp

154 #define	SN_HOLD(csp)	{ \  argument
155 mutex_enter(&csp->s_lock); \
156 csp->s_count++; \
157 mutex_exit(&csp->s_lock); \
160 #define SN_RELE(csp) { \ argument
161 mutex_enter(&csp->s_lock); \
162 csp->s_count--; \
163 ASSERT((csp->s_count > 0) || (csp->s_vnode->v_stream == NULL)); \
164 mutex_exit(&csp->s_lock); \
228 #define LOCK_CSP(csp) (void) spec_lockcsp(csp, 0, 1, 0) argument
229 #define LOCKHOLD_CSP_SIG(csp) spec_lockcsp(csp, 1, 1, 1) argument
230 #define SYNCHOLD_CSP_SIG(csp, intr) spec_lockcsp(csp, intr, 0, 1) argument
249 spec_lockcsp(struct snode *csp, int intr, int setlock, int hold) in spec_lockcsp() argument
252 mutex_enter(&csp->s_lock); in spec_lockcsp()
253 while (csp->s_flag & SLOCKED) { in spec_lockcsp()
254 csp->s_flag |= SWANT; in spec_lockcsp()
256 if (!cv_wait_sig(&csp->s_cv, &csp->s_lock)) { in spec_lockcsp()
257 if (csp->s_flag & SCLOSING) in spec_lockcsp()
261 mutex_exit(&csp->s_lock); in spec_lockcsp()
265 cv_wait(&csp->s_cv, &csp->s_lock); in spec_lockcsp()
269 csp->s_flag |= SLOCKED; in spec_lockcsp()
271 csp->s_count++; /* one more open reference : SN_HOLD */ in spec_lockcsp()
272 mutex_exit(&csp->s_lock); in spec_lockcsp()
279 #define UNLOCK_CSP_LOCK_HELD(csp) \ argument
280 ASSERT(mutex_owned(&csp->s_lock)); \
281 if (csp->s_flag & SWANT) \
282 cv_broadcast(&csp->s_cv); \
283 csp->s_flag &= ~(SWANT|SLOCKED);
285 #define UNLOCK_CSP(csp) \ argument
286 mutex_enter(&csp->s_lock); \
287 UNLOCK_CSP_LOCK_HELD(csp); \
288 mutex_exit(&csp->s_lock);
293 #define SPEC_SIZE(csp) \ argument
294 (((csp)->s_flag & SSIZEVALID) ? (csp)->s_size : spec_size(csp))
311 spec_size(struct snode *csp) in spec_size() argument
313 struct vnode *cvp = STOV(csp); in spec_size()
323 ASSERT((csp)->s_commonvp == cvp); /* must be common node */ in spec_size()
326 mutex_enter(&csp->s_lock); in spec_size()
327 if (csp->s_flag & SSIZEVALID) { in spec_size()
328 mutex_exit(&csp->s_lock); in spec_size()
329 return (csp->s_size); in spec_size()
337 mutex_exit(&csp->s_lock); in spec_size()
343 csp->s_size = 0; in spec_size()
344 csp->s_flag |= SSIZEVALID; in spec_size()
345 mutex_exit(&csp->s_lock); in spec_size()
359 if (csp->s_count == 0) { in spec_size()
360 mutex_exit(&csp->s_lock); in spec_size()
365 if (((csp->s_flag & SDIPSET) == 0) || (csp->s_dip == NULL) || in spec_size()
366 !i_ddi_devi_attached(csp->s_dip)) { in spec_size()
367 mutex_exit(&csp->s_lock); in spec_size()
371 devi = csp->s_dip; in spec_size()
439 csp->s_size = size; in spec_size()
440 csp->s_flag |= SSIZEVALID; in spec_size()
442 mutex_exit(&csp->s_lock); in spec_size()
568 struct snode *sp, *csp; in spec_open() local
613 csp = VTOS(cvp); in spec_open()
614 if (!(csp->s_flag & SDIPSET)) { in spec_open()
630 dip = csp->s_dip; in spec_open()
673 while ((spec_locksp_ret = SYNCHOLD_CSP_SIG(csp, open_returns_eintr)) != in spec_open()
693 csp = VTOS(sp->s_commonvp); in spec_open()
702 spec_type = (STOV(csp)->v_type == VCHR) ? S_IFCHR : S_IFBLK; in spec_open()
709 sp->s_size = SPEC_SIZE(csp); in spec_open()
711 if ((csp->s_flag & SNEEDCLOSE) == 0) { in spec_open()
713 mutex_enter(&csp->s_lock); in spec_open()
715 csp->s_flag |= SNEEDCLOSE; in spec_open()
722 if (((cvp->v_type == VCHR) && (csp->s_size == 0)) || in spec_open()
724 (csp->s_size == UNKNOWN_SIZE))) in spec_open()
725 csp->s_flag &= ~SSIZEVALID; in spec_open()
728 csp->s_flag |= SLOFFSET; in spec_open()
730 csp->s_flag |= SLOFFSET | SANYOFFSET; in spec_open()
731 mutex_exit(&csp->s_lock); in spec_open()
743 mutex_enter(&csp->s_lock); in spec_open()
744 csp->s_count--; /* decrement open count : SN_RELE */ in spec_open()
745 if ((csp->s_count == 0) && /* no outstanding open */ in spec_open()
746 (csp->s_mapcnt == 0) && /* no mapping */ in spec_open()
747 (csp->s_flag & SNEEDCLOSE)) { /* need a close */ in spec_open()
748 csp->s_flag &= ~(SNEEDCLOSE | SSIZEVALID); in spec_open()
751 if (csp->s_flag & (SCLONE | SSELFCLONE)) in spec_open()
752 csp->s_flag &= ~SDIPSET; in spec_open()
754 csp->s_flag |= SCLOSING; in spec_open()
755 mutex_exit(&csp->s_lock); in spec_open()
760 mutex_enter(&csp->s_lock); in spec_open()
761 csp->s_flag &= ~SCLOSING; in spec_open()
762 mutex_exit(&csp->s_lock); in spec_open()
764 mutex_exit(&csp->s_lock); in spec_open()
782 if (LOCKHOLD_CSP_SIG(csp) != SUCCESS) in spec_open()
791 UNLOCK_CSP(csp); in spec_open()
800 csp = VTOS(sp->s_commonvp); in spec_open()
803 UNLOCK_CSP(csp); in spec_open()
813 UNLOCK_CSP(csp); in spec_open()
821 sp->s_size = csp->s_size = 0; in spec_open()
854 UNLOCK_CSP(csp); in spec_open()
857 UNLOCK_CSP(csp); in spec_open()
858 SN_RELE(csp); in spec_open()
883 struct snode *sp, *csp; in spec_close() local
913 csp = VTOS(cvp); in spec_close()
915 LOCK_CSP(csp); in spec_close()
916 mutex_enter(&csp->s_lock); in spec_close()
918 csp->s_count--; /* one fewer open reference : SN_RELE */ in spec_close()
930 csp->s_flag &= ~SSIZEVALID; in spec_close()
937 if ((csp->s_count == 0) && (csp->s_mapcnt == 0)) { in spec_close()
939 csp->s_flag &= ~(SNEEDCLOSE | SSIZEVALID); in spec_close()
951 if (csp->s_flag & (SCLONE | SSELFCLONE)) in spec_close()
952 csp->s_flag &= ~SDIPSET; in spec_close()
954 csp->s_flag |= SCLOSING; in spec_close()
955 mutex_exit(&csp->s_lock); in spec_close()
964 mutex_enter(&csp->s_lock); in spec_close()
965 csp->s_flag &= ~SCLOSING; in spec_close()
968 UNLOCK_CSP_LOCK_HELD(csp); in spec_close()
969 mutex_exit(&csp->s_lock); in spec_close()
1727 struct snode *csp; in spec_frlock() local
1729 csp = VTOS(sp->s_commonvp); in spec_frlock()
1733 if (csp->s_mapcnt > 0) in spec_frlock()
2468 struct snode *csp = VTOS(vp); in spec_addmap() local
2481 if (S_ISFENCED(csp)) in spec_addmap()
2485 LOCK_CSP(csp); in spec_addmap()
2486 csp->s_mapcnt += npages; in spec_addmap()
2488 UNLOCK_CSP(csp); in spec_addmap()
2506 struct snode *csp = VTOS(vp); in spec_delmap() local
2525 LOCK_CSP(csp); in spec_delmap()
2526 mutex_enter(&csp->s_lock); in spec_delmap()
2527 mcnt = (csp->s_mapcnt -= npages); in spec_delmap()
2536 if (csp->s_count == 0) { in spec_delmap()
2537 csp->s_flag &= ~(SNEEDCLOSE | SSIZEVALID); in spec_delmap()
2540 if (csp->s_flag & (SCLONE | SSELFCLONE)) in spec_delmap()
2541 csp->s_flag &= ~SDIPSET; in spec_delmap()
2543 mutex_exit(&csp->s_lock); in spec_delmap()
2547 mutex_exit(&csp->s_lock); in spec_delmap()
2549 mutex_enter(&csp->s_lock); in spec_delmap()
2553 UNLOCK_CSP_LOCK_HELD(csp); in spec_delmap()
2554 mutex_exit(&csp->s_lock); in spec_delmap()