Lines Matching refs:csp

152 #define	SN_HOLD(csp)	{ \  argument
153 mutex_enter(&csp->s_lock); \
154 csp->s_count++; \
155 mutex_exit(&csp->s_lock); \
158 #define SN_RELE(csp) { \ argument
159 mutex_enter(&csp->s_lock); \
160 csp->s_count--; \
161 ASSERT((csp->s_count > 0) || (csp->s_vnode->v_stream == NULL)); \
162 mutex_exit(&csp->s_lock); \
226 #define LOCK_CSP(csp) (void) spec_lockcsp(csp, 0, 1, 0) argument
227 #define LOCKHOLD_CSP_SIG(csp) spec_lockcsp(csp, 1, 1, 1) argument
228 #define SYNCHOLD_CSP_SIG(csp, intr) spec_lockcsp(csp, intr, 0, 1) argument
247 spec_lockcsp(struct snode *csp, int intr, int setlock, int hold) in spec_lockcsp() argument
250 mutex_enter(&csp->s_lock); in spec_lockcsp()
251 while (csp->s_flag & SLOCKED) { in spec_lockcsp()
252 csp->s_flag |= SWANT; in spec_lockcsp()
254 if (!cv_wait_sig(&csp->s_cv, &csp->s_lock)) { in spec_lockcsp()
255 if (csp->s_flag & SCLOSING) in spec_lockcsp()
259 mutex_exit(&csp->s_lock); in spec_lockcsp()
263 cv_wait(&csp->s_cv, &csp->s_lock); in spec_lockcsp()
267 csp->s_flag |= SLOCKED; in spec_lockcsp()
269 csp->s_count++; /* one more open reference : SN_HOLD */ in spec_lockcsp()
270 mutex_exit(&csp->s_lock); in spec_lockcsp()
277 #define UNLOCK_CSP_LOCK_HELD(csp) \ argument
278 ASSERT(mutex_owned(&csp->s_lock)); \
279 if (csp->s_flag & SWANT) \
280 cv_broadcast(&csp->s_cv); \
281 csp->s_flag &= ~(SWANT|SLOCKED);
283 #define UNLOCK_CSP(csp) \ argument
284 mutex_enter(&csp->s_lock); \
285 UNLOCK_CSP_LOCK_HELD(csp); \
286 mutex_exit(&csp->s_lock);
291 #define SPEC_SIZE(csp) \ argument
292 (((csp)->s_flag & SSIZEVALID) ? (csp)->s_size : spec_size(csp))
309 spec_size(struct snode *csp) in spec_size() argument
311 struct vnode *cvp = STOV(csp); in spec_size()
321 ASSERT((csp)->s_commonvp == cvp); /* must be common node */ in spec_size()
324 mutex_enter(&csp->s_lock); in spec_size()
325 if (csp->s_flag & SSIZEVALID) { in spec_size()
326 mutex_exit(&csp->s_lock); in spec_size()
327 return (csp->s_size); in spec_size()
335 mutex_exit(&csp->s_lock); in spec_size()
341 csp->s_size = 0; in spec_size()
342 csp->s_flag |= SSIZEVALID; in spec_size()
343 mutex_exit(&csp->s_lock); in spec_size()
357 if (csp->s_count == 0) { in spec_size()
358 mutex_exit(&csp->s_lock); in spec_size()
363 if (((csp->s_flag & SDIPSET) == 0) || (csp->s_dip == NULL) || in spec_size()
364 !i_ddi_devi_attached(csp->s_dip)) { in spec_size()
365 mutex_exit(&csp->s_lock); in spec_size()
369 devi = csp->s_dip; in spec_size()
437 csp->s_size = size; in spec_size()
438 csp->s_flag |= SSIZEVALID; in spec_size()
440 mutex_exit(&csp->s_lock); in spec_size()
565 struct snode *sp, *csp; in spec_open() local
610 csp = VTOS(cvp); in spec_open()
611 if (!(csp->s_flag & SDIPSET)) { in spec_open()
627 dip = csp->s_dip; in spec_open()
670 while ((spec_locksp_ret = SYNCHOLD_CSP_SIG(csp, open_returns_eintr)) != in spec_open()
690 csp = VTOS(sp->s_commonvp); in spec_open()
699 spec_type = (STOV(csp)->v_type == VCHR) ? S_IFCHR : S_IFBLK; in spec_open()
706 sp->s_size = SPEC_SIZE(csp); in spec_open()
708 if ((csp->s_flag & SNEEDCLOSE) == 0) { in spec_open()
710 mutex_enter(&csp->s_lock); in spec_open()
712 csp->s_flag |= SNEEDCLOSE; in spec_open()
719 if (((cvp->v_type == VCHR) && (csp->s_size == 0)) || in spec_open()
721 (csp->s_size == UNKNOWN_SIZE))) in spec_open()
722 csp->s_flag &= ~SSIZEVALID; in spec_open()
725 csp->s_flag |= SLOFFSET; in spec_open()
727 csp->s_flag |= SLOFFSET | SANYOFFSET; in spec_open()
728 mutex_exit(&csp->s_lock); in spec_open()
740 mutex_enter(&csp->s_lock); in spec_open()
741 csp->s_count--; /* decrement open count : SN_RELE */ in spec_open()
742 if ((csp->s_count == 0) && /* no outstanding open */ in spec_open()
743 (csp->s_mapcnt == 0) && /* no mapping */ in spec_open()
744 (csp->s_flag & SNEEDCLOSE)) { /* need a close */ in spec_open()
745 csp->s_flag &= ~(SNEEDCLOSE | SSIZEVALID); in spec_open()
748 if (csp->s_flag & (SCLONE | SSELFCLONE)) in spec_open()
749 csp->s_flag &= ~SDIPSET; in spec_open()
751 csp->s_flag |= SCLOSING; in spec_open()
752 mutex_exit(&csp->s_lock); in spec_open()
757 mutex_enter(&csp->s_lock); in spec_open()
758 csp->s_flag &= ~SCLOSING; in spec_open()
759 mutex_exit(&csp->s_lock); in spec_open()
761 mutex_exit(&csp->s_lock); in spec_open()
779 if (LOCKHOLD_CSP_SIG(csp) != SUCCESS) in spec_open()
788 UNLOCK_CSP(csp); in spec_open()
797 csp = VTOS(sp->s_commonvp); in spec_open()
800 UNLOCK_CSP(csp); in spec_open()
810 UNLOCK_CSP(csp); in spec_open()
818 sp->s_size = csp->s_size = 0; in spec_open()
851 UNLOCK_CSP(csp); in spec_open()
854 UNLOCK_CSP(csp); in spec_open()
855 SN_RELE(csp); in spec_open()
880 struct snode *sp, *csp; in spec_close() local
910 csp = VTOS(cvp); in spec_close()
912 LOCK_CSP(csp); in spec_close()
913 mutex_enter(&csp->s_lock); in spec_close()
915 csp->s_count--; /* one fewer open reference : SN_RELE */ in spec_close()
927 csp->s_flag &= ~SSIZEVALID; in spec_close()
934 if ((csp->s_count == 0) && (csp->s_mapcnt == 0)) { in spec_close()
936 csp->s_flag &= ~(SNEEDCLOSE | SSIZEVALID); in spec_close()
948 if (csp->s_flag & (SCLONE | SSELFCLONE)) in spec_close()
949 csp->s_flag &= ~SDIPSET; in spec_close()
951 csp->s_flag |= SCLOSING; in spec_close()
952 mutex_exit(&csp->s_lock); in spec_close()
961 mutex_enter(&csp->s_lock); in spec_close()
962 csp->s_flag &= ~SCLOSING; in spec_close()
965 UNLOCK_CSP_LOCK_HELD(csp); in spec_close()
966 mutex_exit(&csp->s_lock); in spec_close()
1726 struct snode *csp; in spec_frlock() local
1728 csp = VTOS(sp->s_commonvp); in spec_frlock()
1732 if (csp->s_mapcnt > 0) in spec_frlock()
2467 struct snode *csp = VTOS(vp); in spec_addmap() local
2480 if (S_ISFENCED(csp)) in spec_addmap()
2484 LOCK_CSP(csp); in spec_addmap()
2485 csp->s_mapcnt += npages; in spec_addmap()
2487 UNLOCK_CSP(csp); in spec_addmap()
2505 struct snode *csp = VTOS(vp); in spec_delmap() local
2524 LOCK_CSP(csp); in spec_delmap()
2525 mutex_enter(&csp->s_lock); in spec_delmap()
2526 mcnt = (csp->s_mapcnt -= npages); in spec_delmap()
2535 if (csp->s_count == 0) { in spec_delmap()
2536 csp->s_flag &= ~(SNEEDCLOSE | SSIZEVALID); in spec_delmap()
2539 if (csp->s_flag & (SCLONE | SSELFCLONE)) in spec_delmap()
2540 csp->s_flag &= ~SDIPSET; in spec_delmap()
2542 mutex_exit(&csp->s_lock); in spec_delmap()
2546 mutex_exit(&csp->s_lock); in spec_delmap()
2548 mutex_enter(&csp->s_lock); in spec_delmap()
2552 UNLOCK_CSP_LOCK_HELD(csp); in spec_delmap()
2553 mutex_exit(&csp->s_lock); in spec_delmap()