Lines Matching refs:vcp

107 smb_iod_newstate(struct smb_vc *vcp, int state)
109 vcp->vc_state = state;
139 smb_iod_invrq(struct smb_vc *vcp)
146 rw_enter(&vcp->iod_rqlock, RW_READER);
147 TAILQ_FOREACH(rqp, &vcp->iod_rqlist, sr_link) {
150 rw_exit(&vcp->iod_rqlock);
160 smb_iod_disconnect(struct smb_vc *vcp)
166 SMB_VC_LOCK(vcp);
167 if (vcp->vc_state != SMBIOD_ST_DEAD) {
168 smb_iod_newstate(vcp, SMBIOD_ST_DEAD);
169 cv_broadcast(&vcp->vc_statechg);
171 SMB_VC_UNLOCK(vcp);
179 SMB_TRAN_DISCONNECT(vcp);
186 SMB_VC_LOCK(vcp);
187 if (vcp->iod_thr != NULL &&
188 vcp->iod_thr != curthread) {
189 tsignal(vcp->iod_thr, SIGKILL);
191 SMB_VC_UNLOCK(vcp);
203 struct smb_vc *vcp = rqp->sr_vc;
207 ASSERT(vcp);
208 ASSERT(SEMA_HELD(&vcp->vc_sendlock));
209 ASSERT(RW_READ_HELD(&vcp->iod_rqlock));
214 if (vcp->vc_state != SMBIOD_ST_VCACTIVE) {
215 SMBIODEBUG("bad vc_state=%d\n", vcp->vc_state);
227 rqp->sr_mid = vcp->vc_next_mid++;
236 rqp->sr_seqno = vcp->vc_next_seq++;
237 rqp->sr_rseqno = vcp->vc_next_seq++;
276 error = SMB_TRAN_SEND(vcp, m);
294 if (SMB_TRAN_FATAL(vcp, error)) {
314 smb_iod_recv1(struct smb_vc *vcp, mblk_t **mpp)
322 error = SMB_TRAN_RECV(vcp, &m);
358 smb_iod_recvall(struct smb_vc *vcp)
373 if (vcp->vc_state != SMBIOD_ST_VCACTIVE) {
374 SMBIODEBUG("bad vc_state=%d\n", vcp->vc_state);
379 if (vcp->iod_flags & SMBIOD_SHUTDOWN) {
382 SMB_VC_LOCK(vcp);
383 smb_iod_newstate(vcp, SMBIOD_ST_DEAD);
384 cv_broadcast(&vcp->vc_statechg);
385 SMB_VC_UNLOCK(vcp);
391 error = smb_iod_recv1(vcp, &m);
394 vcp->iod_rqlist.tqh_first != NULL) {
406 /* Was: smb_iod_notify_down(vcp); */
408 smb_vc_walkshares(vcp,
410 zprintf(vcp->vc_zoneid,
412 vcp->vc_srvname);
420 (void) smb_iod_send_echo(vcp);
431 if (vcp->vc_co.co_usecount > 1)
433 SMB_VC_LOCK(vcp);
434 if (vcp->vc_co.co_usecount == 1) {
435 smb_iod_newstate(vcp, SMBIOD_ST_DEAD);
436 SMB_VC_UNLOCK(vcp);
440 SMB_VC_UNLOCK(vcp);
455 SMB_VC_LOCK(vcp);
456 state = (vcp->iod_rqlist.tqh_first != NULL) ?
458 smb_iod_newstate(vcp, state);
459 cv_broadcast(&vcp->vc_statechg);
460 SMB_VC_UNLOCK(vcp);
471 zprintf(vcp->vc_zoneid, "SMB server %s OK\n",
472 vcp->vc_srvname);
474 /* Was: smb_iod_notify_up(vcp); */
476 smb_vc_walkshares(vcp, fscb->fscb_up);
489 rw_enter(&vcp->iod_rqlock, RW_READER);
490 TAILQ_FOREACH(rqp, &vcp->iod_rqlist, sr_link) {
523 /* smb_printrqlist(vcp); */
526 rw_exit(&vcp->iod_rqlock);
545 smb_iod_send_echo(smb_vc_t *vcp)
551 err = smb_smb_echo(vcp, &scred, SMBNOREPLYWAIT);
568 struct smb_vc *vcp = rqp->sr_vc;
577 if (vcp->vc_state != SMBIOD_ST_VCACTIVE) {
578 SMBIODEBUG("bad vc_state=%d\n", vcp->vc_state);
591 if (rqp->sr_owner == vcp->iod_thr) {
599 rw_enter(&vcp->iod_rqlock, RW_WRITER);
600 TAILQ_INSERT_HEAD(&vcp->iod_rqlist, rqp, sr_link);
601 rw_downgrade(&vcp->iod_rqlock);
608 if (sema_tryp(&vcp->vc_sendlock) == 0) {
614 sema_v(&vcp->vc_sendlock);
617 rw_exit(&vcp->iod_rqlock);
630 rw_enter(&vcp->iod_rqlock, RW_WRITER);
632 TAILQ_INSERT_TAIL(&vcp->iod_rqlist, rqp, sr_link);
634 save_newrq = vcp->iod_newrq;
635 vcp->iod_newrq++;
637 rw_exit(&vcp->iod_rqlock);
646 smb_iod_sendall(vcp);
659 struct smb_vc *vcp = rqp->sr_vc;
667 if (vcp->vc_state != SMBIOD_ST_VCACTIVE) {
668 SMBIODEBUG("bad vc_state=%d\n", vcp->vc_state);
672 rw_enter(&vcp->iod_rqlock, RW_WRITER);
678 save_newrq = vcp->iod_newrq;
679 vcp->iod_newrq++;
681 rw_exit(&vcp->iod_rqlock);
690 smb_iod_sendall(vcp);
699 struct smb_vc *vcp = rqp->sr_vc;
701 rw_enter(&vcp->iod_rqlock, RW_WRITER);
710 TAILQ_REMOVE(&vcp->iod_rqlist, rqp, sr_link);
711 rw_exit(&vcp->iod_rqlock);
726 struct smb_vc *vcp = rqp->sr_vc;
740 ASSERT(curthread != vcp->iod_thr);
814 " (still waiting).\n", vcp->vc_srvname,
843 " (giving up).\n", vcp->vc_srvname,
869 if (vcp->iod_muxfull)
870 smb_iod_sendall(vcp);
884 struct smb_vc *vcp = SSTOVC(ssp);
891 rw_enter(&vcp->iod_rqlock, RW_READER);
892 TAILQ_FOREACH(rqp, &vcp->iod_rqlist, sr_link) {
896 rw_exit(&vcp->iod_rqlock);
904 smb_iod_sendall(smb_vc_t *vcp)
913 rw_enter(&vcp->iod_rqlock, RW_WRITER);
914 vcp->iod_newrq = 0;
921 rw_downgrade(&vcp->iod_rqlock);
927 sema_p(&vcp->vc_sendlock);
935 ASSERT(vcp->vc_maxmux > 0);
937 TAILQ_FOREACH(rqp, &vcp->iod_rqlist, sr_link) {
939 if (vcp->vc_state != SMBIOD_ST_VCACTIVE) {
950 if (++muxcnt == vcp->vc_maxmux) {
962 vcp->iod_muxfull =
963 (muxcnt < vcp->vc_maxmux) ? 0 : 1;
965 sema_v(&vcp->vc_sendlock);
966 rw_exit(&vcp->iod_rqlock);
970 smb_iod_vc_work(struct smb_vc *vcp, cred_t *cr)
979 ASSERT(vcp->iod_thr == curthread);
985 if ((fp = getf(vcp->vc_tran_fd)) == NULL) {
989 if ((err = SMB_TRAN_LOAN_FP(vcp, fp, cr)) != 0)
996 SMB_VC_LOCK(vcp);
997 vcp->vc_genid++; /* possibly new connection */
998 smb_iod_newstate(vcp, SMBIOD_ST_VCACTIVE);
999 cv_broadcast(&vcp->vc_statechg);
1000 SMB_VC_UNLOCK(vcp);
1010 smb_vc_walkshares(vcp, fscb->fscb_connect);
1015 err = smb_iod_recvall(vcp);
1024 smb_vc_walkshares(vcp, smb_iod_share_disconnected);
1034 smb_iod_invrq(vcp);
1038 (void) SMB_TRAN_LOAN_FP(vcp, NULL, cr);
1040 releasef(vcp->vc_tran_fd);
1052 smb_iod_vc_idle(struct smb_vc *vcp)
1061 ASSERT(vcp->iod_thr == curthread);
1063 SMB_VC_LOCK(vcp);
1064 while (vcp->vc_state == SMBIOD_ST_IDLE) {
1065 tr = cv_reltimedwait_sig(&vcp->iod_idle, &vcp->vc_lock,
1073 if (vcp->vc_co.co_usecount == 1) {
1075 smb_iod_newstate(vcp, SMBIOD_ST_DEAD);
1081 SMB_VC_UNLOCK(vcp);
1091 smb_iod_vc_rcfail(struct smb_vc *vcp)
1100 ASSERT(vcp->iod_thr == curthread);
1102 if (vcp->vc_state != SMBIOD_ST_RECONNECT)
1105 SMB_VC_LOCK(vcp);
1107 smb_iod_newstate(vcp, SMBIOD_ST_RCFAILED);
1108 cv_broadcast(&vcp->vc_statechg);
1115 tr = cv_reltimedwait_sig(&vcp->iod_idle, &vcp->vc_lock,
1120 smb_iod_newstate(vcp, SMBIOD_ST_IDLE);
1121 cv_broadcast(&vcp->vc_statechg);
1123 SMB_VC_UNLOCK(vcp);
1133 smb_iod_reconnect(struct smb_vc *vcp)
1137 SMB_VC_LOCK(vcp);
1139 switch (vcp->vc_state) {
1142 smb_iod_newstate(vcp, SMBIOD_ST_RECONNECT);
1143 cv_signal(&vcp->iod_idle);
1147 rv = cv_wait_sig(&vcp->vc_statechg, &vcp->vc_lock);
1165 SMB_VC_UNLOCK(vcp);