Lines Matching refs:xa

77 	struct smb_xa *xa;  in smb_com_transaction()  local
93 xa = smb_xa_create(sr->session, sr, tpscnt, tdscnt, mprcnt, mdrcnt, in smb_com_transaction()
95 if (xa == NULL) { in smb_com_transaction()
107 smb_xa_rele(sr->session, xa); in smb_com_transaction()
111 xa->xa_pipe_name = smb_mem_strdup(stn); in smb_com_transaction()
112 xa->smb_flags = flags; in smb_com_transaction()
113 xa->smb_timeout = timeo; in smb_com_transaction()
114 xa->req_disp_param = pscnt; in smb_com_transaction()
115 xa->req_disp_data = dscnt; in smb_com_transaction()
117 if (smb_mbc_copy(&xa->req_setup_mb, &sr->smb_vwv, in smb_com_transaction()
119 smb_xa_rele(sr->session, xa); in smb_com_transaction()
123 if (smb_mbc_copy(&xa->req_param_mb, &sr->command, psoff, pscnt)) { in smb_com_transaction()
124 smb_xa_rele(sr->session, xa); in smb_com_transaction()
128 if (smb_mbc_copy(&xa->req_data_mb, &sr->command, dsoff, dscnt)) { in smb_com_transaction()
129 smb_xa_rele(sr->session, xa); in smb_com_transaction()
134 ready = smb_trans_ready(xa); in smb_com_transaction()
136 if (smb_xa_open(xa)) { in smb_com_transaction()
137 smb_xa_rele(sr->session, xa); in smb_com_transaction()
141 sr->r_xa = xa; in smb_com_transaction()
148 if (!smb_xa_complete(xa)) { in smb_com_transaction()
149 smb_xa_close(xa); in smb_com_transaction()
154 return (smb_trans_dispatch(sr, xa)); in smb_com_transaction()
175 smb_xa_t *xa; in smb_com_transaction_secondary() local
178 if ((xa = smbsr_lookup_xa(sr)) == 0) { in smb_com_transaction_secondary()
184 if (smb_sign_check_secondary(sr, xa->reply_seqnum) != 0) { in smb_com_transaction_secondary()
191 if (xa->smb_com != SMB_COM_TRANSACTION) { in smb_com_transaction_secondary()
201 mutex_enter(&xa->xa_mutex); in smb_com_transaction_secondary()
202 if (xa->smb_tpscnt > tpscnt) in smb_com_transaction_secondary()
203 xa->smb_tpscnt = tpscnt; in smb_com_transaction_secondary()
204 if (xa->smb_tdscnt > tdscnt) in smb_com_transaction_secondary()
205 xa->smb_tdscnt = tdscnt; in smb_com_transaction_secondary()
206 xa->req_disp_param = psdisp + pscnt; in smb_com_transaction_secondary()
207 xa->req_disp_data = dsdisp + dscnt; in smb_com_transaction_secondary()
221 if (xa->req_param_mb.chain_offset != psdisp) { in smb_com_transaction_secondary()
223 smb_xa_t *, xa, uint16_t, psdisp); in smb_com_transaction_secondary()
224 xa->req_param_mb.chain_offset = psdisp; in smb_com_transaction_secondary()
226 if (xa->req_data_mb.chain_offset != dsdisp) { in smb_com_transaction_secondary()
228 smb_xa_t *, xa, uint16_t, dsdisp); in smb_com_transaction_secondary()
229 xa->req_data_mb.chain_offset = dsdisp; in smb_com_transaction_secondary()
232 if (smb_mbc_copy(&xa->req_param_mb, &sr->command, psoff, pscnt)) { in smb_com_transaction_secondary()
233 mutex_exit(&xa->xa_mutex); in smb_com_transaction_secondary()
234 smb_xa_close(xa); in smb_com_transaction_secondary()
238 if (smb_mbc_copy(&xa->req_data_mb, &sr->command, dsoff, dscnt)) { in smb_com_transaction_secondary()
239 mutex_exit(&xa->xa_mutex); in smb_com_transaction_secondary()
240 smb_xa_close(xa); in smb_com_transaction_secondary()
244 mutex_exit(&xa->xa_mutex); in smb_com_transaction_secondary()
246 if (!smb_trans_ready(xa)) in smb_com_transaction_secondary()
249 if (!smb_xa_complete(xa)) in smb_com_transaction_secondary()
252 return (smb_trans_dispatch(sr, xa)); in smb_com_transaction_secondary()
306 smb_xa_t *xa; in smb_com_transaction2() local
317 xa = smb_xa_create(sr->session, sr, tpscnt, tdscnt, mprcnt, mdrcnt, in smb_com_transaction2()
319 if (xa == 0) { in smb_com_transaction2()
324 xa->smb_flags = flags; in smb_com_transaction2()
325 xa->smb_timeout = timeo; in smb_com_transaction2()
326 xa->req_disp_param = pscnt; in smb_com_transaction2()
327 xa->req_disp_data = dscnt; in smb_com_transaction2()
329 if (smb_mbc_copy(&xa->req_setup_mb, &sr->smb_vwv, in smb_com_transaction2()
331 smb_xa_rele(sr->session, xa); in smb_com_transaction2()
335 if (smb_mbc_copy(&xa->req_param_mb, &sr->command, psoff, pscnt)) { in smb_com_transaction2()
336 smb_xa_rele(sr->session, xa); in smb_com_transaction2()
340 if (smb_mbc_copy(&xa->req_data_mb, &sr->command, dsoff, dscnt)) { in smb_com_transaction2()
341 smb_xa_rele(sr->session, xa); in smb_com_transaction2()
346 ready = smb_trans_ready(xa); in smb_com_transaction2()
348 if (smb_xa_open(xa)) { in smb_com_transaction2()
349 smb_xa_rele(sr->session, xa); in smb_com_transaction2()
353 sr->r_xa = xa; in smb_com_transaction2()
360 if (!smb_xa_complete(xa)) { in smb_com_transaction2()
361 smb_xa_close(xa); in smb_com_transaction2()
366 return (smb_trans2_dispatch(sr, xa)); in smb_com_transaction2()
387 smb_xa_t *xa; in smb_com_transaction2_secondary() local
390 if ((xa = smbsr_lookup_xa(sr)) == 0) { in smb_com_transaction2_secondary()
396 if (smb_sign_check_secondary(sr, xa->reply_seqnum) != 0) { in smb_com_transaction2_secondary()
403 if (xa->smb_com != SMB_COM_TRANSACTION2) { in smb_com_transaction2_secondary()
413 mutex_enter(&xa->xa_mutex); in smb_com_transaction2_secondary()
414 if (xa->smb_tpscnt > tpscnt) in smb_com_transaction2_secondary()
415 xa->smb_tpscnt = tpscnt; in smb_com_transaction2_secondary()
416 if (xa->smb_tdscnt > tdscnt) in smb_com_transaction2_secondary()
417 xa->smb_tdscnt = tdscnt; in smb_com_transaction2_secondary()
419 xa->xa_smb_fid = fid; in smb_com_transaction2_secondary()
420 xa->req_disp_param = psdisp + pscnt; in smb_com_transaction2_secondary()
421 xa->req_disp_data = dsdisp + dscnt; in smb_com_transaction2_secondary()
426 if (xa->req_param_mb.chain_offset != psdisp) { in smb_com_transaction2_secondary()
428 smb_xa_t *, xa, uint16_t, psdisp); in smb_com_transaction2_secondary()
429 xa->req_param_mb.chain_offset = psdisp; in smb_com_transaction2_secondary()
431 if (xa->req_data_mb.chain_offset != dsdisp) { in smb_com_transaction2_secondary()
433 smb_xa_t *, xa, uint16_t, dsdisp); in smb_com_transaction2_secondary()
434 xa->req_data_mb.chain_offset = dsdisp; in smb_com_transaction2_secondary()
437 if (smb_mbc_copy(&xa->req_param_mb, &sr->command, psoff, pscnt)) { in smb_com_transaction2_secondary()
438 mutex_exit(&xa->xa_mutex); in smb_com_transaction2_secondary()
439 smb_xa_close(xa); in smb_com_transaction2_secondary()
443 if (smb_mbc_copy(&xa->req_data_mb, &sr->command, dsoff, dscnt)) { in smb_com_transaction2_secondary()
444 mutex_exit(&xa->xa_mutex); in smb_com_transaction2_secondary()
445 smb_xa_close(xa); in smb_com_transaction2_secondary()
449 mutex_exit(&xa->xa_mutex); in smb_com_transaction2_secondary()
451 if (!smb_trans_ready(xa)) in smb_com_transaction2_secondary()
454 if (!smb_xa_complete(xa)) in smb_com_transaction2_secondary()
457 return (smb_trans2_dispatch(sr, xa)); in smb_com_transaction2_secondary()
461 smb_nt_trans_dispatch(struct smb_request *sr, struct smb_xa *xa) in smb_nt_trans_dispatch() argument
467 switch (xa->smb_func) { in smb_nt_trans_dispatch()
469 if ((rc = smb_pre_nt_transact_create(sr, xa)) == 0) in smb_nt_trans_dispatch()
470 rc = smb_nt_transact_create(sr, xa); in smb_nt_trans_dispatch()
471 smb_post_nt_transact_create(sr, xa); in smb_nt_trans_dispatch()
474 rc = smb_nt_transact_notify_change(sr, xa); in smb_nt_trans_dispatch()
477 rc = smb_nt_transact_query_security_info(sr, xa); in smb_nt_trans_dispatch()
480 rc = smb_nt_transact_set_security_info(sr, xa); in smb_nt_trans_dispatch()
483 rc = smb_nt_transact_ioctl(sr, xa); in smb_nt_trans_dispatch()
486 rc = smb_nt_transact_query_quota(sr, xa); in smb_nt_trans_dispatch()
489 rc = smb_nt_transact_set_quota(sr, xa); in smb_nt_trans_dispatch()
492 rc = smb_nt_transact_rename(sr, xa); in smb_nt_trans_dispatch()
518 n_setup = MBC_LENGTH(&xa->rep_setup_mb); in smb_nt_trans_dispatch()
519 n_param = MBC_LENGTH(&xa->rep_param_mb); in smb_nt_trans_dispatch()
520 n_data = MBC_LENGTH(&xa->rep_data_mb); in smb_nt_trans_dispatch()
522 if (xa->smb_msrcnt < n_setup || in smb_nt_trans_dispatch()
523 xa->smb_mprcnt < n_param || in smb_nt_trans_dispatch()
524 xa->smb_mdrcnt < n_data) { in smb_nt_trans_dispatch()
550 &xa->rep_setup_mb, /* setup[] */ in smb_nt_trans_dispatch()
553 &xa->rep_param_mb, in smb_nt_trans_dispatch()
555 &xa->rep_data_mb); in smb_nt_trans_dispatch()
580 smb_xa_t *xa; in smb_com_nt_transact() local
592 xa = smb_xa_create(sr->session, sr, TotalParameterCount, TotalDataCount, in smb_com_nt_transact()
594 if (xa == 0) { in smb_com_nt_transact()
599 xa->smb_flags = 0; in smb_com_nt_transact()
600 xa->smb_timeout = 0; in smb_com_nt_transact()
601 xa->smb_func = Function; in smb_com_nt_transact()
602 xa->req_disp_param = pscnt; in smb_com_nt_transact()
603 xa->req_disp_data = dscnt; in smb_com_nt_transact()
605 if (smb_mbc_copy(&xa->req_setup_mb, &sr->smb_vwv, in smb_com_nt_transact()
607 smb_xa_rele(sr->session, xa); in smb_com_nt_transact()
611 if (smb_mbc_copy(&xa->req_param_mb, &sr->command, psoff, pscnt)) { in smb_com_nt_transact()
612 smb_xa_rele(sr->session, xa); in smb_com_nt_transact()
616 if (smb_mbc_copy(&xa->req_data_mb, &sr->command, dsoff, dscnt)) { in smb_com_nt_transact()
617 smb_xa_rele(sr->session, xa); in smb_com_nt_transact()
622 ready = smb_trans_ready(xa); in smb_com_nt_transact()
624 if (smb_xa_open(xa)) { in smb_com_nt_transact()
625 smb_xa_rele(sr->session, xa); in smb_com_nt_transact()
629 sr->r_xa = xa; in smb_com_nt_transact()
636 if (!smb_xa_complete(xa)) { in smb_com_nt_transact()
637 smb_xa_close(xa); in smb_com_nt_transact()
642 return (smb_nt_trans_dispatch(sr, xa)); in smb_com_nt_transact()
663 smb_xa_t *xa; in smb_com_nt_transact_secondary() local
666 if ((xa = smbsr_lookup_xa(sr)) == 0) { in smb_com_nt_transact_secondary()
672 if (smb_sign_check_secondary(sr, xa->reply_seqnum) != 0) { in smb_com_nt_transact_secondary()
679 if (xa->smb_com != SMB_COM_TRANSACTION2) { in smb_com_nt_transact_secondary()
689 mutex_enter(&xa->xa_mutex); in smb_com_nt_transact_secondary()
690 if (xa->smb_tpscnt > tpscnt) in smb_com_nt_transact_secondary()
691 xa->smb_tpscnt = tpscnt; in smb_com_nt_transact_secondary()
692 if (xa->smb_tdscnt > tdscnt) in smb_com_nt_transact_secondary()
693 xa->smb_tdscnt = tdscnt; in smb_com_nt_transact_secondary()
695 xa->xa_smb_fid = fid; in smb_com_nt_transact_secondary()
696 xa->req_disp_param = psdisp + pscnt; in smb_com_nt_transact_secondary()
697 xa->req_disp_data = dsdisp + dscnt; in smb_com_nt_transact_secondary()
702 if (xa->req_param_mb.chain_offset != psdisp) { in smb_com_nt_transact_secondary()
704 smb_xa_t *, xa, uint16_t, psdisp); in smb_com_nt_transact_secondary()
705 xa->req_param_mb.chain_offset = psdisp; in smb_com_nt_transact_secondary()
707 if (xa->req_data_mb.chain_offset != dsdisp) { in smb_com_nt_transact_secondary()
709 smb_xa_t *, xa, uint16_t, dsdisp); in smb_com_nt_transact_secondary()
710 xa->req_data_mb.chain_offset = dsdisp; in smb_com_nt_transact_secondary()
713 if (smb_mbc_copy(&xa->req_param_mb, &sr->command, psoff, pscnt)) { in smb_com_nt_transact_secondary()
714 mutex_exit(&xa->xa_mutex); in smb_com_nt_transact_secondary()
715 smb_xa_close(xa); in smb_com_nt_transact_secondary()
719 if (smb_mbc_copy(&xa->req_data_mb, &sr->command, dsoff, dscnt)) { in smb_com_nt_transact_secondary()
720 mutex_exit(&xa->xa_mutex); in smb_com_nt_transact_secondary()
721 smb_xa_close(xa); in smb_com_nt_transact_secondary()
725 mutex_exit(&xa->xa_mutex); in smb_com_nt_transact_secondary()
727 if (!smb_trans_ready(xa)) in smb_com_nt_transact_secondary()
730 if (!smb_xa_complete(xa)) in smb_com_nt_transact_secondary()
733 return (smb_nt_trans_dispatch(sr, xa)); in smb_com_nt_transact_secondary()
737 smb_trans_ready(smb_xa_t *xa) in smb_trans_ready() argument
741 mutex_enter(&xa->xa_mutex); in smb_trans_ready()
742 rc = xa->req_disp_data >= xa->smb_tdscnt && in smb_trans_ready()
743 xa->req_disp_param >= xa->smb_tpscnt; in smb_trans_ready()
744 mutex_exit(&xa->xa_mutex); in smb_trans_ready()
787 smb_trans_net_share_enum(struct smb_request *sr, struct smb_xa *xa) in smb_trans_net_share_enum() argument
843 if (smb_mbc_decodef(&xa->req_param_mb, "ww", &level, in smb_trans_net_share_enum()
853 (void) smb_mbc_encodef(&xa->rep_param_mb, "wwww", in smb_trans_net_share_enum()
864 (void) smb_mbc_encodef(&xa->rep_param_mb, "wwww", in smb_trans_net_share_enum()
882 MBC_FLUSH(&xa->rep_setup_mb); in smb_trans_net_share_enum()
896 MBC_FLUSH(&xa->rep_data_mb); in smb_trans_net_share_enum()
899 (void) smb_mbc_encodef(&xa->rep_data_mb, fmt, sent_buf); in smb_trans_net_share_enum()
910 MBC_FLUSH(&xa->rep_param_mb); in smb_trans_net_share_enum()
914 (void) smb_mbc_encodef(&xa->rep_param_mb, "wwww", in smb_trans_net_share_enum()
958 &xa->rep_setup_mb, /* setup[] */ in smb_trans_net_share_enum()
961 &xa->rep_param_mb, in smb_trans_net_share_enum()
963 &xa->rep_data_mb); in smb_trans_net_share_enum()
986 smb_trans_net_share_getinfo(smb_request_t *sr, struct smb_xa *xa) in smb_trans_net_share_getinfo() argument
997 if (smb_mbc_decodef(&xa->req_param_mb, "%sww", sr, in smb_trans_net_share_getinfo()
1003 (void) smb_mbc_encodef(&xa->rep_param_mb, "www", in smb_trans_net_share_getinfo()
1017 (void) smb_mbc_encodef(&xa->rep_data_mb, "13c", in smb_trans_net_share_getinfo()
1022 smb_encode_SHARE_INFO_1(&xa->rep_data_mb, &str_mb, in smb_trans_net_share_getinfo()
1027 smb_encode_SHARE_INFO_2(&xa->rep_data_mb, &str_mb, sr, in smb_trans_net_share_getinfo()
1034 (void) smb_mbc_encodef(&xa->rep_param_mb, "www", in smb_trans_net_share_getinfo()
1041 (void) smb_mbc_encodef(&xa->rep_param_mb, "www", NERR_Success, in smb_trans_net_share_getinfo()
1042 -MBC_LENGTH(&xa->rep_data_mb), in smb_trans_net_share_getinfo()
1043 MBC_LENGTH(&xa->rep_data_mb) + MBC_LENGTH(&str_mb)); in smb_trans_net_share_getinfo()
1044 (void) smb_mbc_encodef(&xa->rep_data_mb, "C", &str_mb); in smb_trans_net_share_getinfo()
1050 smb_trans_net_workstation_getinfo(struct smb_request *sr, struct smb_xa *xa) in smb_trans_net_workstation_getinfo() argument
1057 if ((smb_mbc_decodef(&xa->req_param_mb, "ww", in smb_trans_net_workstation_getinfo()
1060 (void) smb_mbc_encodef(&xa->rep_param_mb, "wwww", in smb_trans_net_workstation_getinfo()
1072 (void) smb_mbc_encodef(&xa->rep_data_mb, "l", MBC_LENGTH(&str_mb)); in smb_trans_net_workstation_getinfo()
1074 (void) smb_mbc_encodef(&xa->rep_data_mb, "l", MBC_LENGTH(&str_mb)); in smb_trans_net_workstation_getinfo()
1076 (void) smb_mbc_encodef(&xa->rep_data_mb, "l", MBC_LENGTH(&str_mb)); in smb_trans_net_workstation_getinfo()
1078 (void) smb_mbc_encodef(&xa->rep_data_mb, "bbl", in smb_trans_net_workstation_getinfo()
1083 (void) smb_mbc_encodef(&xa->rep_data_mb, "l", MBC_LENGTH(&str_mb)); in smb_trans_net_workstation_getinfo()
1086 (void) smb_mbc_encodef(&xa->rep_param_mb, "www", 0, in smb_trans_net_workstation_getinfo()
1087 -MBC_LENGTH(&xa->rep_data_mb), in smb_trans_net_workstation_getinfo()
1088 MBC_LENGTH(&xa->rep_data_mb) + MBC_LENGTH(&str_mb)); in smb_trans_net_workstation_getinfo()
1089 (void) smb_mbc_encodef(&xa->rep_data_mb, "C", &str_mb); in smb_trans_net_workstation_getinfo()
1095 smb_trans_net_user_getinfo(struct smb_request *sr, struct smb_xa *xa) in smb_trans_net_user_getinfo() argument
1101 rc = smb_mbc_decodef(&xa->req_param_mb, "%sww", sr, in smb_trans_net_user_getinfo()
1109 (void) smb_mbc_encodef(&xa->rep_param_mb, "www", in smb_trans_net_user_getinfo()
1115 smb_trans_net_server_getinfo(struct smb_request *sr, struct smb_xa *xa) in smb_trans_net_server_getinfo() argument
1122 if (smb_mbc_decodef(&xa->req_param_mb, "ww", &level, &buf_size) != 0) in smb_trans_net_server_getinfo()
1125 max_data = MBC_MAXBYTES(&xa->rep_data_mb); in smb_trans_net_server_getinfo()
1136 (void) smb_mbc_encodef(&xa->rep_data_mb, "16c", server_name); in smb_trans_net_server_getinfo()
1142 (void) smb_mbc_encodef(&xa->rep_data_mb, "16cbbll", server_name, in smb_trans_net_server_getinfo()
1149 (void) smb_mbc_encodef(&xa->rep_param_mb, "www", in smb_trans_net_server_getinfo()
1155 avail_data = MBC_LENGTH(&xa->rep_data_mb) + MBC_LENGTH(&str_mb); in smb_trans_net_server_getinfo()
1156 (void) smb_mbc_encodef(&xa->rep_param_mb, "www", in smb_trans_net_server_getinfo()
1158 (void) smb_mbc_encodef(&xa->rep_data_mb, "C", &str_mb); in smb_trans_net_server_getinfo()
1355 smb_trans_net_server_enum2(struct smb_request *sr, struct smb_xa *xa) in smb_trans_net_server_enum2() argument
1364 if (smb_mbc_decodef(&xa->req_param_mb, in smb_trans_net_server_enum2()
1372 (void) smb_mbc_encodef(&xa->rep_param_mb, "wwww", 0, 0, 0, 0); in smb_trans_net_server_enum2()
1377 (void) smb_mbc_encodef(&xa->rep_param_mb, "wwww", 0, 0, 0, 0); in smb_trans_net_server_enum2()
1385 (void) smb_mbc_encodef(&xa->rep_data_mb, "16c", hostname); in smb_trans_net_server_enum2()
1387 (void) smb_mbc_encodef(&xa->rep_data_mb, "bbll", in smb_trans_net_server_enum2()
1394 (void) smb_mbc_encodef(&xa->rep_param_mb, "wwww", 0, in smb_trans_net_server_enum2()
1395 -MBC_LENGTH(&xa->rep_data_mb), 1, 1); in smb_trans_net_server_enum2()
1396 (void) smb_mbc_encodef(&xa->rep_data_mb, "m", str_mb.chain); in smb_trans_net_server_enum2()
1433 smb_trans_nmpipe(smb_request_t *sr, smb_xa_t *xa) in smb_trans_nmpipe() argument
1452 fsctl.InputCount = xa->smb_tdscnt; /* write count */ in smb_trans_nmpipe()
1454 fsctl.MaxOutputResp = xa->smb_mdrcnt; /* max to read */ in smb_trans_nmpipe()
1455 fsctl.in_mbc = &xa->req_data_mb; /* write from here */ in smb_trans_nmpipe()
1456 fsctl.out_mbc = &xa->rep_data_mb; /* read into here */ in smb_trans_nmpipe()
1470 smb_trans_dispatch(smb_request_t *sr, smb_xa_t *xa) in smb_trans_dispatch() argument
1480 if (xa->smb_suwcnt > 0) { in smb_trans_dispatch()
1481 rc = smb_mbc_decodef(&xa->req_setup_mb, "ww", &opcode, in smb_trans_dispatch()
1487 if ((rc = smb_mbc_decodef(&xa->req_param_mb, "w", in smb_trans_dispatch()
1495 rc = smb_trans_nmpipe(sr, xa); in smb_trans_dispatch()
1507 if (!is_supported_mailslot(xa->xa_pipe_name)) in smb_trans_dispatch()
1510 if ((rc = smb_mbc_decodef(&xa->req_param_mb, "%wss", sr, in smb_trans_dispatch()
1516 rc = smb_trans_net_share_enum(sr, xa); in smb_trans_dispatch()
1520 rc = smb_trans_net_share_getinfo(sr, xa); in smb_trans_dispatch()
1524 rc = smb_trans_net_server_getinfo(sr, xa); in smb_trans_dispatch()
1528 rc = smb_trans_net_user_getinfo(sr, xa); in smb_trans_dispatch()
1532 rc = smb_trans_net_workstation_getinfo(sr, xa); in smb_trans_dispatch()
1536 rc = smb_trans_net_server_enum2(sr, xa); in smb_trans_dispatch()
1560 n_setup = MBC_LENGTH(&xa->rep_setup_mb); in smb_trans_dispatch()
1561 n_param = MBC_LENGTH(&xa->rep_param_mb); in smb_trans_dispatch()
1562 n_data = MBC_LENGTH(&xa->rep_data_mb); in smb_trans_dispatch()
1564 if (xa->smb_msrcnt < n_setup || in smb_trans_dispatch()
1565 xa->smb_mprcnt < n_param || in smb_trans_dispatch()
1566 xa->smb_mdrcnt < n_data) { in smb_trans_dispatch()
1592 &xa->rep_setup_mb, /* setup[] */ in smb_trans_dispatch()
1595 &xa->rep_param_mb, in smb_trans_dispatch()
1597 &xa->rep_data_mb); in smb_trans_dispatch()
1623 smb_trans2_dispatch(smb_request_t *sr, smb_xa_t *xa) in smb_trans2_dispatch() argument
1633 n_data = xa->smb_mdrcnt; in smb_trans2_dispatch()
1635 if (smb_mbc_decodef(&xa->req_setup_mb, "w", &opcode) != 0) in smb_trans2_dispatch()
1641 xa->smb_func = opcode; in smb_trans2_dispatch()
1646 rc = smb_com_trans2_open2(sr, xa); in smb_trans2_dispatch()
1650 rc = smb_com_trans2_create_directory(sr, xa); in smb_trans2_dispatch()
1663 rc = smb_com_trans2_find_first2(sr, xa); in smb_trans2_dispatch()
1676 rc = smb_com_trans2_find_next2(sr, xa); in smb_trans2_dispatch()
1689 rc = smb_com_trans2_query_fs_information(sr, xa); in smb_trans2_dispatch()
1693 rc = smb_com_trans2_set_fs_information(sr, xa); in smb_trans2_dispatch()
1706 rc = smb_com_trans2_query_path_information(sr, xa); in smb_trans2_dispatch()
1719 rc = smb_com_trans2_query_file_information(sr, xa); in smb_trans2_dispatch()
1723 rc = smb_com_trans2_set_path_information(sr, xa); in smb_trans2_dispatch()
1727 rc = smb_com_trans2_set_file_information(sr, xa); in smb_trans2_dispatch()
1731 rc = smb_com_trans2_get_dfs_referral(sr, xa); in smb_trans2_dispatch()
1735 (void) smb_mbc_encodef(&xa->rep_param_mb, "w", 0); in smb_trans2_dispatch()
1755 n_setup = MBC_LENGTH(&xa->rep_setup_mb); in smb_trans2_dispatch()
1756 n_param = MBC_LENGTH(&xa->rep_param_mb); in smb_trans2_dispatch()
1757 n_data = MBC_LENGTH(&xa->rep_data_mb); in smb_trans2_dispatch()
1759 if (xa->smb_msrcnt < n_setup || in smb_trans2_dispatch()
1760 xa->smb_mprcnt < n_param || in smb_trans2_dispatch()
1761 xa->smb_mdrcnt < n_data) { in smb_trans2_dispatch()
1806 &xa->rep_setup_mb, /* setup[] */ in smb_trans2_dispatch()
1809 &xa->rep_param_mb, in smb_trans2_dispatch()
1811 &xa->rep_data_mb); in smb_trans2_dispatch()
1851 smb_xa_t *xa, *nxa; in smb_xa_create() local
1876 xa = kmem_zalloc(sizeof (smb_xa_t), KM_SLEEP); in smb_xa_create()
1877 xa->xa_refcnt = 1; in smb_xa_create()
1878 xa->smb_com = sr->smb_com; in smb_xa_create()
1879 xa->smb_flg = sr->smb_flg; in smb_xa_create()
1880 xa->smb_flg2 = sr->smb_flg2; in smb_xa_create()
1881 xa->smb_tid = sr->smb_tid; in smb_xa_create()
1882 xa->smb_pid = sr->smb_pid; in smb_xa_create()
1883 xa->smb_uid = sr->smb_uid; in smb_xa_create()
1884 xa->xa_smb_mid = sr->smb_mid; in smb_xa_create()
1885 xa->xa_smb_fid = 0xFFFF; in smb_xa_create()
1886 xa->reply_seqnum = sr->reply_seqnum; in smb_xa_create()
1887 xa->smb_tpscnt = total_parameter_count; in smb_xa_create()
1888 xa->smb_tdscnt = total_data_count; in smb_xa_create()
1889 xa->smb_mprcnt = max_parameter_count; in smb_xa_create()
1890 xa->smb_mdrcnt = max_data_count; in smb_xa_create()
1891 xa->smb_msrcnt = max_setup_count; in smb_xa_create()
1892 xa->smb_suwcnt = setup_word_count; in smb_xa_create()
1893 xa->xa_session = session; in smb_xa_create()
1894 xa->xa_magic = SMB_XA_MAGIC; in smb_xa_create()
1897 xa->req_setup_mb.max_bytes = setup_word_count * 2; in smb_xa_create()
1898 xa->req_param_mb.max_bytes = total_parameter_count; in smb_xa_create()
1899 xa->req_data_mb.max_bytes = total_data_count; in smb_xa_create()
1902 xa->rep_setup_mb.max_bytes = max_setup_count * 2; in smb_xa_create()
1903 xa->rep_param_mb.max_bytes = max_parameter_count; in smb_xa_create()
1904 xa->rep_data_mb.max_bytes = max_data_count; in smb_xa_create()
1915 if (nxa->xa_smb_mid == xa->xa_smb_mid && in smb_xa_create()
1916 nxa->smb_pid == xa->smb_pid && in smb_xa_create()
1920 kmem_free(xa, sizeof (smb_xa_t)); in smb_xa_create()
1925 smb_llist_insert_tail(xlist, xa); in smb_xa_create()
1927 return (xa); in smb_xa_create()
1931 smb_xa_delete(smb_xa_t *xa) in smb_xa_delete() argument
1933 ASSERT(xa->xa_refcnt == 0); in smb_xa_delete()
1934 ASSERT(SMB_XA_CLOSED(xa)); in smb_xa_delete()
1936 if (xa->xa_pipe_name) in smb_xa_delete()
1937 smb_mem_free(xa->xa_pipe_name); in smb_xa_delete()
1940 if (xa->req_setup_mb.chain != NULL) in smb_xa_delete()
1941 m_freem(xa->req_setup_mb.chain); in smb_xa_delete()
1942 if (xa->req_param_mb.chain != NULL) in smb_xa_delete()
1943 m_freem(xa->req_param_mb.chain); in smb_xa_delete()
1944 if (xa->req_data_mb.chain != NULL) in smb_xa_delete()
1945 m_freem(xa->req_data_mb.chain); in smb_xa_delete()
1948 if (xa->rep_setup_mb.chain != NULL) in smb_xa_delete()
1949 m_freem(xa->rep_setup_mb.chain); in smb_xa_delete()
1950 if (xa->rep_param_mb.chain != NULL) in smb_xa_delete()
1951 m_freem(xa->rep_param_mb.chain); in smb_xa_delete()
1952 if (xa->rep_data_mb.chain != NULL) in smb_xa_delete()
1953 m_freem(xa->rep_data_mb.chain); in smb_xa_delete()
1955 xa->xa_magic = (uint32_t)~SMB_XA_MAGIC; in smb_xa_delete()
1956 kmem_free(xa, sizeof (smb_xa_t)); in smb_xa_delete()
1960 smb_xa_hold(smb_xa_t *xa) in smb_xa_hold() argument
1962 mutex_enter(&xa->xa_mutex); in smb_xa_hold()
1963 xa->xa_refcnt++; in smb_xa_hold()
1964 ASSERT(xa->xa_refcnt); in smb_xa_hold()
1965 mutex_exit(&xa->xa_mutex); in smb_xa_hold()
1966 return (xa); in smb_xa_hold()
1970 smb_xa_rele(smb_session_t *session, smb_xa_t *xa) in smb_xa_rele() argument
1972 mutex_enter(&xa->xa_mutex); in smb_xa_rele()
1973 ASSERT(xa->xa_refcnt); in smb_xa_rele()
1974 xa->xa_refcnt--; in smb_xa_rele()
1975 if (SMB_XA_CLOSED(xa) && (xa->xa_refcnt == 0)) { in smb_xa_rele()
1976 mutex_exit(&xa->xa_mutex); in smb_xa_rele()
1978 smb_llist_remove(&session->s_xa_list, xa); in smb_xa_rele()
1980 smb_xa_delete(xa); in smb_xa_rele()
1983 mutex_exit(&xa->xa_mutex); in smb_xa_rele()
1987 smb_xa_open(smb_xa_t *xa) in smb_xa_open() argument
1991 mutex_enter(&xa->xa_mutex); in smb_xa_open()
1993 ASSERT((xa->xa_flags & SMB_XA_FLAG_OPEN) == 0); in smb_xa_open()
1995 if ((xa->xa_flags & SMB_XA_FLAG_CLOSE) == 0) { in smb_xa_open()
1996 xa->xa_flags |= SMB_XA_FLAG_OPEN; in smb_xa_open()
2002 mutex_exit(&xa->xa_mutex); in smb_xa_open()
2008 smb_xa_close(smb_xa_t *xa) in smb_xa_close() argument
2010 mutex_enter(&xa->xa_mutex); in smb_xa_close()
2011 xa->xa_flags |= SMB_XA_FLAG_CLOSE; in smb_xa_close()
2012 xa->xa_flags &= ~SMB_XA_FLAG_OPEN; in smb_xa_close()
2014 if (xa->xa_refcnt == 0) { in smb_xa_close()
2015 mutex_exit(&xa->xa_mutex); in smb_xa_close()
2016 smb_llist_enter(&xa->xa_session->s_xa_list, RW_WRITER); in smb_xa_close()
2017 smb_llist_remove(&xa->xa_session->s_xa_list, xa); in smb_xa_close()
2018 smb_llist_exit(&xa->xa_session->s_xa_list); in smb_xa_close()
2019 smb_xa_delete(xa); in smb_xa_close()
2023 mutex_exit(&xa->xa_mutex); in smb_xa_close()
2027 smb_xa_complete(smb_xa_t *xa) in smb_xa_complete() argument
2031 mutex_enter(&xa->xa_mutex); in smb_xa_complete()
2032 if (xa->xa_flags & (SMB_XA_FLAG_COMPLETE | SMB_XA_FLAG_CLOSE)) { in smb_xa_complete()
2036 xa->xa_flags |= SMB_XA_FLAG_COMPLETE; in smb_xa_complete()
2044 xa->req_setup_mb.chain_offset = 0; in smb_xa_complete()
2045 xa->req_param_mb.chain_offset = 0; in smb_xa_complete()
2046 xa->req_data_mb.chain_offset = 0; in smb_xa_complete()
2049 mutex_exit(&xa->xa_mutex); in smb_xa_complete()
2059 smb_xa_t *xa; in smb_xa_find() local
2064 xa = smb_llist_head(xlist); in smb_xa_find()
2065 while (xa) { in smb_xa_find()
2066 mutex_enter(&xa->xa_mutex); in smb_xa_find()
2067 if (xa->xa_smb_mid == mid && in smb_xa_find()
2068 xa->smb_pid == pid && in smb_xa_find()
2069 !SMB_XA_CLOSED(xa) && in smb_xa_find()
2070 !(xa->xa_flags & SMB_XA_FLAG_COMPLETE)) { in smb_xa_find()
2071 xa->xa_refcnt++; in smb_xa_find()
2072 ASSERT(xa->xa_refcnt); in smb_xa_find()
2073 mutex_exit(&xa->xa_mutex); in smb_xa_find()
2076 mutex_exit(&xa->xa_mutex); in smb_xa_find()
2077 xa = smb_llist_next(xlist, xa); in smb_xa_find()
2080 return (xa); in smb_xa_find()