Lines Matching defs:csp

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