Lines Matching defs:rqp

71 static int  smb_rq_reply(struct smb_rq *rqp);
72 static int smb_rq_enqueue(struct smb_rq *rqp);
75 static int smb_rq_new(struct smb_rq *rqp, uchar_t cmd);
88 smb_rq_done(struct smb_rq *rqp)
94 mb_done(&rqp->sr_rq);
95 md_done(&rqp->sr_rp);
96 mutex_destroy(&rqp->sr_lock);
97 cv_destroy(&rqp->sr_cond);
98 if (rqp->sr_flags & SMBR_ALLOCED)
99 kmem_free(rqp, sizeof (*rqp));
106 struct smb_rq *rqp;
109 rqp = (struct smb_rq *)kmem_alloc(sizeof (struct smb_rq), KM_SLEEP);
110 if (rqp == NULL)
112 error = smb_rq_init(rqp, layer, cmd, scred);
114 smb_rq_done(rqp);
117 rqp->sr_flags |= SMBR_ALLOCED;
118 *rqpp = rqp;
123 smb_rq_init(struct smb_rq *rqp, struct smb_connobj *co, uchar_t cmd,
128 bzero(rqp, sizeof (*rqp));
129 mutex_init(&rqp->sr_lock, NULL, MUTEX_DRIVER, NULL);
130 cv_init(&rqp->sr_cond, NULL, CV_DEFAULT, NULL);
132 error = smb_rq_getenv(co, &rqp->sr_vc, &rqp->sr_share);
137 * We copied a VC pointer (vcp) into rqp->sr_vc,
148 rqp->sr_rexmit = SMBMAXRESTARTS;
149 rqp->sr_cred = scred; /* Note: ref hold done by caller. */
150 rqp->sr_pid = (uint16_t)ddi_get_pid();
151 error = smb_rq_new(rqp, cmd);
157 smb_rq_new(struct smb_rq *rqp, uchar_t cmd)
159 struct mbchain *mbp = &rqp->sr_rq;
160 struct smb_vc *vcp = rqp->sr_vc;
163 ASSERT(rqp != NULL);
165 rqp->sr_sendcnt = 0;
166 rqp->sr_cmd = cmd;
169 md_done(&rqp->sr_rp);
177 rqp->sr_rqflags = vcp->vc_hflags;
178 rqp->sr_rqflags2 = vcp->vc_hflags2;
197 smb_rq_fillhdr(struct smb_rq *rqp)
207 m = dupb(rqp->sr_rq.mb_top);
212 mb_put_uint8(mbp, rqp->sr_cmd);
214 mb_put_uint8(mbp, rqp->sr_rqflags);
215 mb_put_uint16le(mbp, rqp->sr_rqflags2);
219 mb_put_uint16le(mbp, rqp->sr_rqtid);
220 mb_put_uint16le(mbp, rqp->sr_pid);
221 mb_put_uint16le(mbp, rqp->sr_rquid);
222 mb_put_uint16le(mbp, rqp->sr_mid);
229 smb_rq_simple(struct smb_rq *rqp)
231 return (smb_rq_simple_timed(rqp, smb_timo_default));
238 smb_rq_simple_timed(struct smb_rq *rqp, int timeout)
247 rqp->sr_flags &= ~SMBR_RESTART;
248 rqp->sr_timo = timeout; /* in seconds */
249 rqp->sr_state = SMBRQ_NOTSENT;
250 error = smb_rq_enqueue(rqp);
254 error = smb_rq_reply(rqp);
257 if ((rqp->sr_flags & (SMBR_RESTART | SMBR_NORESTART)) !=
260 if (rqp->sr_rexmit <= 0)
262 SMBRQ_LOCK(rqp);
263 if (rqp->sr_share) {
264 (void) cv_reltimedwait(&rqp->sr_cond, &(rqp)->sr_lock,
270 SMBRQ_UNLOCK(rqp);
271 rqp->sr_rexmit--;
278 smb_rq_enqueue(struct smb_rq *rqp)
280 struct smb_vc *vcp = rqp->sr_vc;
281 struct smb_share *ssp = rqp->sr_share;
290 if (rqp->sr_flags & SMBR_NORECONNECT) {
316 error = smb_share_tcon(ssp, rqp->sr_cred);
326 rqp->sr_rquid = vcp->vc_smbuid;
327 rqp->sr_rqtid = ssp ? ssp->ss_tid : SMB_TID_UNKNOWN;
328 error = smb_iod_addrq(rqp);
341 smb_rq_wstart(struct smb_rq *rqp)
343 rqp->sr_wcount = mb_reserve(&rqp->sr_rq, sizeof (uint8_t));
344 rqp->sr_rq.mb_count = 0;
348 smb_rq_wend(struct smb_rq *rqp)
352 if (rqp->sr_wcount == NULL) {
356 wcnt = rqp->sr_rq.mb_count;
362 *rqp->sr_wcount = (wcnt >> 1);
373 smb_rq_bstart(struct smb_rq *rqp)
375 rqp->sr_bcount = mb_reserve(&rqp->sr_rq, sizeof (uint16_t));
376 rqp->sr_rq.mb_count = 0;
380 smb_rq_bend(struct smb_rq *rqp)
384 if (rqp->sr_bcount == NULL) {
388 bcnt = rqp->sr_rq.mb_count;
396 rqp->sr_bcount[0] = bcnt & 0xFF;
397 rqp->sr_bcount[1] = (bcnt >> 8);
401 smb_rq_intr(struct smb_rq *rqp)
403 if (rqp->sr_flags & SMBR_INTR)
463 smb_rq_reply(struct smb_rq *rqp)
465 struct mdchain *mdp = &rqp->sr_rp;
469 if (rqp->sr_timo == SMBNOREPLYWAIT) {
470 smb_iod_removerq(rqp);
474 error = smb_iod_waitrq(rqp);
482 if (rqp->sr_rqflags2 & SMB_FLAGS2_SECURITY_SIGNATURE) {
483 error = smb_rq_verify(rqp);
495 error = md_get_uint32le(mdp, &rqp->sr_error);
496 error = md_get_uint8(mdp, &rqp->sr_rpflags);
497 error = md_get_uint16le(mdp, &rqp->sr_rpflags2);
498 if (rqp->sr_rpflags2 & SMB_FLAGS2_ERR_STATUS) {
503 if (rqp->sr_error == NT_STATUS_BUFFER_OVERFLOW) {
506 * they can look at rqp->sr_error if they
515 rperror = smb_maperr32(rqp->sr_error);
517 rqp->sr_errclass = rqp->sr_error & 0xff;
518 rqp->sr_serror = rqp->sr_error >> 16;
519 rperror = smb_maperror(rqp->sr_errclass, rqp->sr_serror);
523 rqp->sr_flags |= SMBR_MOREDATA;
525 rqp->sr_flags &= ~SMBR_MOREDATA;
531 error = md_get_uint16le(mdp, &rqp->sr_rptid);
532 error = md_get_uint16le(mdp, &rqp->sr_rppid);
533 error = md_get_uint16le(mdp, &rqp->sr_rpuid);
534 error = md_get_uint16le(mdp, &rqp->sr_rpmid);
685 struct smb_rq *rqp = t2p->t2_rq;
693 error = smb_rq_reply(rqp);
694 if (rqp->sr_flags & SMBR_MOREDATA)
696 t2p->t2_sr_errclass = rqp->sr_errclass;
697 t2p->t2_sr_serror = rqp->sr_serror;
698 t2p->t2_sr_error = rqp->sr_error;
699 t2p->t2_sr_rpflags2 = rqp->sr_rpflags2;
700 if (error && !(rqp->sr_flags & SMBR_MOREDATA))
710 mdp = &rqp->sr_rp;
713 (smb_rq_t *), rqp, (mblk_t *), mdp->md_top);
791 SMBRQ_LOCK(rqp);
792 md_next_record(&rqp->sr_rp);
793 SMBRQ_UNLOCK(rqp);
794 error2 = smb_rq_reply(rqp);
795 if (rqp->sr_flags & SMBR_MOREDATA)
799 t2p->t2_sr_errclass = rqp->sr_errclass;
800 t2p->t2_sr_serror = rqp->sr_serror;
801 t2p->t2_sr_error = rqp->sr_error;
802 t2p->t2_sr_rpflags2 = rqp->sr_rpflags2;
804 if (!(rqp->sr_flags & SMBR_MOREDATA))
814 struct smb_rq *rqp = ntp->nt_rq;
823 error = smb_rq_reply(rqp);
824 if (rqp->sr_flags & SMBR_MOREDATA)
826 ntp->nt_sr_error = rqp->sr_error;
827 ntp->nt_sr_rpflags2 = rqp->sr_rpflags2;
828 if (error && !(rqp->sr_flags & SMBR_MOREDATA))
837 mdp = &rqp->sr_rp;
840 (smb_rq_t *), rqp, (mblk_t *), mdp->md_top);
917 SMBRQ_LOCK(rqp);
918 md_next_record(&rqp->sr_rp);
919 SMBRQ_UNLOCK(rqp);
920 error2 = smb_rq_reply(rqp);
921 if (rqp->sr_flags & SMBR_MOREDATA)
925 ntp->nt_sr_error = rqp->sr_error;
926 ntp->nt_sr_rpflags2 = rqp->sr_rpflags2;
928 if (!(rqp->sr_flags & SMBR_MOREDATA))
945 struct smb_rq *rqp;
969 SMB_COM_TRANSACTION : SMB_COM_TRANSACTION2, scred, &rqp);
972 rqp->sr_timo = smb_timo_default;
973 rqp->sr_flags |= SMBR_MULTIPACKET;
974 t2p->t2_rq = rqp;
975 mbp = &rqp->sr_rq;
976 smb_rq_wstart(rqp);
1032 smb_rq_wend(rqp);
1033 smb_rq_bstart(rqp);
1061 smb_rq_bend(rqp); /* incredible, but thats it... */
1062 error = smb_rq_enqueue(rqp);
1066 error = smb_rq_reply(rqp);
1072 SMBRQ_LOCK(rqp);
1073 md_next_record(&rqp->sr_rp);
1074 SMBRQ_UNLOCK(rqp);
1077 error = smb_rq_new(rqp, t2p->t_name ?
1082 mbp = &rqp->sr_rq;
1083 smb_rq_wstart(rqp);
1117 smb_rq_wend(rqp);
1118 smb_rq_bstart(rqp);
1136 smb_rq_bend(rqp);
1137 error = smb_iod_multirq(rqp);
1153 smb_iod_removerq(rqp);
1156 if (rqp->sr_flags & SMBR_RESTART)
1161 smb_rq_done(rqp);
1177 struct smb_rq *rqp;
1209 error = smb_rq_alloc(ntp->nt_source, SMB_COM_NT_TRANSACT, scred, &rqp);
1212 rqp->sr_timo = smb_timo_default;
1213 rqp->sr_flags |= SMBR_MULTIPACKET;
1214 ntp->nt_rq = rqp;
1215 mbp = &rqp->sr_rq;
1216 smb_rq_wstart(rqp);
1259 smb_rq_wend(rqp);
1260 smb_rq_bstart(rqp);
1278 smb_rq_bend(rqp); /* incredible, but thats it... */
1279 error = smb_rq_enqueue(rqp);
1283 error = smb_rq_reply(rqp);
1289 SMBRQ_LOCK(rqp);
1290 md_next_record(&rqp->sr_rp);
1291 SMBRQ_UNLOCK(rqp);
1294 error = smb_rq_new(rqp, SMB_COM_NT_TRANSACT_SECONDARY);
1297 mbp = &rqp->sr_rq;
1298 smb_rq_wstart(rqp);
1329 smb_rq_wend(rqp);
1330 smb_rq_bstart(rqp);
1347 smb_rq_bend(rqp);
1348 error = smb_iod_multirq(rqp);
1364 smb_iod_removerq(rqp);
1367 if (rqp->sr_flags & SMBR_RESTART)
1372 smb_rq_done(rqp);