Lines Matching refs:server

44 alloc_mid(const struct smb_hdr *smb_buffer, struct TCP_Server_Info *server)  in alloc_mid()  argument
48 if (server == NULL) { in alloc_mid()
63 temp->server = server; in alloc_mid()
84 __le16 command = midEntry->server->vals->lock_cmd; in __release_mid()
89 struct TCP_Server_Info *server = midEntry->server; in __release_mid() local
94 server->ops->handle_cancelled_mid) in __release_mid()
95 server->ops->handle_cancelled_mid(midEntry, server); in __release_mid()
110 if (atomic_read(&server->num_cmds[smb_cmd]) == 0) { in __release_mid()
111 server->slowest_cmd[smb_cmd] = roundtrip_time; in __release_mid()
112 server->fastest_cmd[smb_cmd] = roundtrip_time; in __release_mid()
114 if (server->slowest_cmd[smb_cmd] < roundtrip_time) in __release_mid()
115 server->slowest_cmd[smb_cmd] = roundtrip_time; in __release_mid()
116 else if (server->fastest_cmd[smb_cmd] > roundtrip_time) in __release_mid()
117 server->fastest_cmd[smb_cmd] = roundtrip_time; in __release_mid()
119 cifs_stats_inc(&server->num_cmds[smb_cmd]); in __release_mid()
120 server->time_per_cmd[smb_cmd] += roundtrip_time; in __release_mid()
140 cifs_stats_inc(&server->smb2slowcmd[smb_cmd]); in __release_mid()
162 spin_lock(&mid->server->mid_lock); in delete_mid()
167 spin_unlock(&mid->server->mid_lock); in delete_mid()
182 smb_send_kvec(struct TCP_Server_Info *server, struct msghdr *smb_msg, in smb_send_kvec() argument
187 struct socket *ssocket = server->ssocket; in smb_send_kvec()
191 if (server->noblocksnd) in smb_send_kvec()
219 (!server->noblocksnd && (retries > 2))) { in smb_send_kvec()
247 smb_rqst_len(struct TCP_Server_Info *server, struct smb_rqst *rqst) in smb_rqst_len() argument
254 if (!is_smb1(server) && rqst->rq_nvec >= 2 && in smb_rqst_len()
272 __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, in __smb_send_rqst() argument
282 struct socket *ssocket = server->ssocket; in __smb_send_rqst()
286 cifs_in_send_inc(server); in __smb_send_rqst()
287 if (cifs_rdma_enabled(server)) { in __smb_send_rqst()
290 if (server->smbd_conn) in __smb_send_rqst()
291 rc = smbd_send(server, num_rqst, rqst); in __smb_send_rqst()
310 send_length += smb_rqst_len(server, &rqst[j]); in __smb_send_rqst()
324 if (!is_smb1(server)) { in __smb_send_rqst()
330 rc = smb_send_kvec(server, &smb_msg, &sent); in __smb_send_rqst()
352 rc = smb_send_kvec(server, &smb_msg, &sent); in __smb_send_rqst()
360 rc = smb_send_kvec(server, &smb_msg, &sent); in __smb_send_rqst()
398 cifs_signal_cifsd_for_reconnect(server, false); in __smb_send_rqst()
399 trace_smb3_partial_send_reconnect(server->CurrentMid, in __smb_send_rqst()
400 server->conn_id, server->hostname); in __smb_send_rqst()
412 cifs_signal_cifsd_for_reconnect(server, false); in __smb_send_rqst()
416 cifs_in_send_dec(server); in __smb_send_rqst()
427 smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, in smb_send_rqst() argument
436 return __smb_send_rqst(server, num_rqst, rqst); in smb_send_rqst()
441 if (!server->ops->init_transform_rq) { in smb_send_rqst()
457 rc = server->ops->init_transform_rq(server, num_rqst + 1, in smb_send_rqst()
462 rc = __smb_send_rqst(server, num_rqst + 1, &cur_rqst[0]); in smb_send_rqst()
470 smb_send(struct TCP_Server_Info *server, struct smb_hdr *smb_buffer, in smb_send() argument
482 return __smb_send_rqst(server, 1, &rqst); in smb_send()
486 wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits, in wait_for_free_credits() argument
505 credits = server->ops->get_credits_field(server, optype); in wait_for_free_credits()
510 spin_lock(&server->req_lock); in wait_for_free_credits()
513 server->in_flight++; in wait_for_free_credits()
514 if (server->in_flight > server->max_in_flight) in wait_for_free_credits()
515 server->max_in_flight = server->in_flight; in wait_for_free_credits()
517 *instance = server->reconnect_instance; in wait_for_free_credits()
519 in_flight = server->in_flight; in wait_for_free_credits()
520 spin_unlock(&server->req_lock); in wait_for_free_credits()
522 trace_smb3_nblk_credits(server->CurrentMid, in wait_for_free_credits()
523 server->conn_id, server->hostname, scredits, -1, in_flight); in wait_for_free_credits()
531 spin_unlock(&server->req_lock); in wait_for_free_credits()
533 spin_lock(&server->srv_lock); in wait_for_free_credits()
534 if (server->tcpStatus == CifsExiting) { in wait_for_free_credits()
535 spin_unlock(&server->srv_lock); in wait_for_free_credits()
538 spin_unlock(&server->srv_lock); in wait_for_free_credits()
540 spin_lock(&server->req_lock); in wait_for_free_credits()
543 spin_unlock(&server->req_lock); in wait_for_free_credits()
545 cifs_num_waiters_inc(server); in wait_for_free_credits()
546 rc = wait_event_killable_timeout(server->request_q, in wait_for_free_credits()
547 has_credits(server, credits, num_credits), t); in wait_for_free_credits()
548 cifs_num_waiters_dec(server); in wait_for_free_credits()
550 spin_lock(&server->req_lock); in wait_for_free_credits()
552 in_flight = server->in_flight; in wait_for_free_credits()
553 spin_unlock(&server->req_lock); in wait_for_free_credits()
555 trace_smb3_credit_timeout(server->CurrentMid, in wait_for_free_credits()
556 server->conn_id, server->hostname, scredits, in wait_for_free_credits()
564 spin_lock(&server->req_lock); in wait_for_free_credits()
580 server->in_flight > 2 * MAX_COMPOUND && in wait_for_free_credits()
582 spin_unlock(&server->req_lock); in wait_for_free_credits()
584 cifs_num_waiters_inc(server); in wait_for_free_credits()
586 server->request_q, in wait_for_free_credits()
587 has_credits(server, credits, in wait_for_free_credits()
590 cifs_num_waiters_dec(server); in wait_for_free_credits()
592 spin_lock(&server->req_lock); in wait_for_free_credits()
594 in_flight = server->in_flight; in wait_for_free_credits()
595 spin_unlock(&server->req_lock); in wait_for_free_credits()
598 server->CurrentMid, in wait_for_free_credits()
599 server->conn_id, server->hostname, in wait_for_free_credits()
607 spin_lock(&server->req_lock); in wait_for_free_credits()
619 server->in_flight += num_credits; in wait_for_free_credits()
620 if (server->in_flight > server->max_in_flight) in wait_for_free_credits()
621 server->max_in_flight = server->in_flight; in wait_for_free_credits()
622 *instance = server->reconnect_instance; in wait_for_free_credits()
625 in_flight = server->in_flight; in wait_for_free_credits()
626 spin_unlock(&server->req_lock); in wait_for_free_credits()
628 trace_smb3_waitff_credits(server->CurrentMid, in wait_for_free_credits()
629 server->conn_id, server->hostname, scredits, in wait_for_free_credits()
640 wait_for_free_request(struct TCP_Server_Info *server, const int flags, in wait_for_free_request() argument
643 return wait_for_free_credits(server, 1, -1, flags, in wait_for_free_request()
648 wait_for_compound_request(struct TCP_Server_Info *server, int num, in wait_for_compound_request() argument
654 credits = server->ops->get_credits_field(server, flags & CIFS_OP_MASK); in wait_for_compound_request()
656 spin_lock(&server->req_lock); in wait_for_compound_request()
658 in_flight = server->in_flight; in wait_for_compound_request()
677 if (server->in_flight == 0) { in wait_for_compound_request()
678 spin_unlock(&server->req_lock); in wait_for_compound_request()
679 trace_smb3_insufficient_credits(server->CurrentMid, in wait_for_compound_request()
680 server->conn_id, server->hostname, scredits, in wait_for_compound_request()
687 spin_unlock(&server->req_lock); in wait_for_compound_request()
689 return wait_for_free_credits(server, num, 60000, flags, in wait_for_compound_request()
694 cifs_wait_mtu_credits(struct TCP_Server_Info *server, unsigned int size, in cifs_wait_mtu_credits() argument
699 credits->instance = server->reconnect_instance; in cifs_wait_mtu_credits()
726 *ppmidQ = alloc_mid(in_buf, ses->server); in allocate_mid()
729 spin_lock(&ses->server->mid_lock); in allocate_mid()
730 list_add_tail(&(*ppmidQ)->qhead, &ses->server->pending_mid_q); in allocate_mid()
731 spin_unlock(&ses->server->mid_lock); in allocate_mid()
736 wait_for_response(struct TCP_Server_Info *server, struct mid_q_entry *midQ) in wait_for_response() argument
740 error = wait_event_state(server->response_q, in wait_for_response()
751 cifs_setup_async_request(struct TCP_Server_Info *server, struct smb_rqst *rqst) in cifs_setup_async_request() argument
762 if (server->sign) in cifs_setup_async_request()
765 mid = alloc_mid(hdr, server); in cifs_setup_async_request()
769 rc = cifs_sign_rqst(rqst, server, &mid->sequence_number); in cifs_setup_async_request()
783 cifs_call_async(struct TCP_Server_Info *server, struct smb_rqst *rqst, in cifs_call_async() argument
797 rc = wait_for_free_request(server, flags, &instance); in cifs_call_async()
805 cifs_server_lock(server); in cifs_call_async()
812 if (instance != server->reconnect_instance) { in cifs_call_async()
813 cifs_server_unlock(server); in cifs_call_async()
814 add_credits_and_wake_if(server, &credits, optype); in cifs_call_async()
818 mid = server->ops->setup_async_request(server, rqst); in cifs_call_async()
820 cifs_server_unlock(server); in cifs_call_async()
821 add_credits_and_wake_if(server, &credits, optype); in cifs_call_async()
832 spin_lock(&server->mid_lock); in cifs_call_async()
833 list_add_tail(&mid->qhead, &server->pending_mid_q); in cifs_call_async()
834 spin_unlock(&server->mid_lock); in cifs_call_async()
841 rc = smb_send_rqst(server, 1, rqst, flags); in cifs_call_async()
844 revert_current_mid(server, mid->credits); in cifs_call_async()
845 server->sequence_number -= 2; in cifs_call_async()
849 cifs_server_unlock(server); in cifs_call_async()
854 add_credits_and_wake_if(server, &credits, optype); in cifs_call_async()
886 cifs_sync_mid_result(struct mid_q_entry *mid, struct TCP_Server_Info *server) in cifs_sync_mid_result() argument
893 spin_lock(&server->mid_lock); in cifs_sync_mid_result()
896 spin_unlock(&server->mid_lock); in cifs_sync_mid_result()
912 spin_unlock(&server->mid_lock); in cifs_sync_mid_result()
918 spin_unlock(&server->mid_lock); in cifs_sync_mid_result()
926 send_cancel(struct TCP_Server_Info *server, struct smb_rqst *rqst, in send_cancel() argument
929 return server->ops->send_cancel ? in send_cancel()
930 server->ops->send_cancel(server, rqst, mid) : 0; in send_cancel()
934 cifs_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server, in cifs_check_receive() argument
942 if (server->sign) { in cifs_check_receive()
953 rc = cifs_verify_signature(&rqst, server, in cifs_check_receive()
979 rc = cifs_sign_rqst(rqst, ses->server, &mid->sequence_number); in cifs_setup_request()
990 struct TCP_Server_Info *server = mid->server; in cifs_compound_callback() local
993 credits.value = server->ops->get_credits(mid); in cifs_compound_callback()
994 credits.instance = server->reconnect_instance; in cifs_compound_callback()
996 add_credits(server, &credits, mid->optype); in cifs_compound_callback()
1027 struct TCP_Server_Info *server = NULL; in cifs_pick_channel() local
1035 server = ses->chans[i].server; in cifs_pick_channel()
1036 if (!server || server->terminate) in cifs_pick_channel()
1050 if (server->in_flight < min_in_flight) { in cifs_pick_channel()
1051 min_in_flight = server->in_flight; in cifs_pick_channel()
1054 if (server->in_flight > max_in_flight) in cifs_pick_channel()
1055 max_in_flight = server->in_flight; in cifs_pick_channel()
1064 server = ses->chans[index].server; in cifs_pick_channel()
1067 return server; in cifs_pick_channel()
1072 struct TCP_Server_Info *server, in compound_send_recv() argument
1090 if (!ses || !ses->server || !server) { in compound_send_recv()
1095 spin_lock(&server->srv_lock); in compound_send_recv()
1096 if (server->tcpStatus == CifsExiting) { in compound_send_recv()
1097 spin_unlock(&server->srv_lock); in compound_send_recv()
1100 spin_unlock(&server->srv_lock); in compound_send_recv()
1110 rc = wait_for_compound_request(server, num_rqst, flags, in compound_send_recv()
1126 cifs_server_lock(server); in compound_send_recv()
1135 if (instance != server->reconnect_instance) { in compound_send_recv()
1136 cifs_server_unlock(server); in compound_send_recv()
1138 add_credits(server, &credits[j], optype); in compound_send_recv()
1143 midQ[i] = server->ops->setup_request(ses, server, &rqst[i]); in compound_send_recv()
1145 revert_current_mid(server, i); in compound_send_recv()
1148 cifs_server_unlock(server); in compound_send_recv()
1152 add_credits(server, &credits[j], optype); in compound_send_recv()
1168 rc = smb_send_rqst(server, num_rqst, rqst, flags); in compound_send_recv()
1174 revert_current_mid(server, num_rqst); in compound_send_recv()
1175 server->sequence_number -= 2; in compound_send_recv()
1178 cifs_server_unlock(server); in compound_send_recv()
1186 add_credits(server, &credits[i], optype); in compound_send_recv()
1205 cifs_server_lock(server); in compound_send_recv()
1206 smb311_update_preauth_hash(ses, server, rqst[0].rq_iov, rqst[0].rq_nvec); in compound_send_recv()
1207 cifs_server_unlock(server); in compound_send_recv()
1214 rc = wait_for_response(server, midQ[i]); in compound_send_recv()
1222 send_cancel(server, &rqst[i], midQ[i]); in compound_send_recv()
1223 spin_lock(&server->mid_lock); in compound_send_recv()
1231 spin_unlock(&server->mid_lock); in compound_send_recv()
1239 rc = cifs_sync_mid_result(midQ[i], server); in compound_send_recv()
1256 HEADER_PREAMBLE_SIZE(server); in compound_send_recv()
1263 rc = server->ops->check_receive(midQ[i], server, in compound_send_recv()
1282 cifs_server_lock(server); in compound_send_recv()
1283 smb311_update_preauth_hash(ses, server, &iov, 1); in compound_send_recv()
1284 cifs_server_unlock(server); in compound_send_recv()
1306 struct TCP_Server_Info *server, in cifs_send_recv() argument
1310 return compound_send_recv(xid, ses, server, flags, 1, in cifs_send_recv()
1346 rc = cifs_send_recv(xid, ses, ses->server, in SendReceive2()
1364 struct TCP_Server_Info *server; in SendReceive() local
1370 server = ses->server; in SendReceive()
1371 if (server == NULL) { in SendReceive()
1376 spin_lock(&server->srv_lock); in SendReceive()
1377 if (server->tcpStatus == CifsExiting) { in SendReceive()
1378 spin_unlock(&server->srv_lock); in SendReceive()
1381 spin_unlock(&server->srv_lock); in SendReceive()
1393 rc = wait_for_free_request(server, flags, &credits.instance); in SendReceive()
1401 cifs_server_lock(server); in SendReceive()
1405 cifs_server_unlock(server); in SendReceive()
1407 add_credits(server, &credits, 0); in SendReceive()
1411 rc = cifs_sign_smb(in_buf, server, &midQ->sequence_number); in SendReceive()
1413 cifs_server_unlock(server); in SendReceive()
1419 rc = smb_send(server, in_buf, len); in SendReceive()
1423 server->sequence_number -= 2; in SendReceive()
1425 cifs_server_unlock(server); in SendReceive()
1430 rc = wait_for_response(server, midQ); in SendReceive()
1432 send_cancel(server, &rqst, midQ); in SendReceive()
1433 spin_lock(&server->mid_lock); in SendReceive()
1438 spin_unlock(&server->mid_lock); in SendReceive()
1439 add_credits(server, &credits, 0); in SendReceive()
1442 spin_unlock(&server->mid_lock); in SendReceive()
1445 rc = cifs_sync_mid_result(midQ, server); in SendReceive()
1447 add_credits(server, &credits, 0); in SendReceive()
1460 rc = cifs_check_receive(midQ, server, 0); in SendReceive()
1463 add_credits(server, &credits, 0); in SendReceive()
1487 pSMB->hdr.Mid = get_next_mid(ses->server); in send_lock_cancel()
1506 struct TCP_Server_Info *server; in SendReceiveBlockingLock() local
1513 server = ses->server; in SendReceiveBlockingLock()
1515 if (server == NULL) { in SendReceiveBlockingLock()
1520 spin_lock(&server->srv_lock); in SendReceiveBlockingLock()
1521 if (server->tcpStatus == CifsExiting) { in SendReceiveBlockingLock()
1522 spin_unlock(&server->srv_lock); in SendReceiveBlockingLock()
1525 spin_unlock(&server->srv_lock); in SendReceiveBlockingLock()
1537 rc = wait_for_free_request(server, CIFS_BLOCKING_OP, &instance); in SendReceiveBlockingLock()
1545 cifs_server_lock(server); in SendReceiveBlockingLock()
1549 cifs_server_unlock(server); in SendReceiveBlockingLock()
1553 rc = cifs_sign_smb(in_buf, server, &midQ->sequence_number); in SendReceiveBlockingLock()
1556 cifs_server_unlock(server); in SendReceiveBlockingLock()
1561 rc = smb_send(server, in_buf, len); in SendReceiveBlockingLock()
1565 server->sequence_number -= 2; in SendReceiveBlockingLock()
1567 cifs_server_unlock(server); in SendReceiveBlockingLock()
1575 rc = wait_event_interruptible(server->response_q, in SendReceiveBlockingLock()
1578 ((server->tcpStatus != CifsGood) && in SendReceiveBlockingLock()
1579 (server->tcpStatus != CifsNew))); in SendReceiveBlockingLock()
1582 spin_lock(&server->srv_lock); in SendReceiveBlockingLock()
1586 ((server->tcpStatus == CifsGood) || in SendReceiveBlockingLock()
1587 (server->tcpStatus == CifsNew))) { in SendReceiveBlockingLock()
1588 spin_unlock(&server->srv_lock); in SendReceiveBlockingLock()
1593 rc = send_cancel(server, &rqst, midQ); in SendReceiveBlockingLock()
1612 rc = wait_for_response(server, midQ); in SendReceiveBlockingLock()
1614 send_cancel(server, &rqst, midQ); in SendReceiveBlockingLock()
1615 spin_lock(&server->mid_lock); in SendReceiveBlockingLock()
1620 spin_unlock(&server->mid_lock); in SendReceiveBlockingLock()
1623 spin_unlock(&server->mid_lock); in SendReceiveBlockingLock()
1628 spin_lock(&server->srv_lock); in SendReceiveBlockingLock()
1630 spin_unlock(&server->srv_lock); in SendReceiveBlockingLock()
1632 rc = cifs_sync_mid_result(midQ, server); in SendReceiveBlockingLock()
1645 rc = cifs_check_receive(midQ, server, 0); in SendReceiveBlockingLock()
1658 cifs_discard_remaining_data(struct TCP_Server_Info *server) in cifs_discard_remaining_data() argument
1660 unsigned int rfclen = server->pdu_size; in cifs_discard_remaining_data()
1661 size_t remaining = rfclen + HEADER_PREAMBLE_SIZE(server) - in cifs_discard_remaining_data()
1662 server->total_read; in cifs_discard_remaining_data()
1667 length = cifs_discard_from_socket(server, in cifs_discard_remaining_data()
1669 CIFSMaxBufSize + MAX_HEADER_SIZE(server))); in cifs_discard_remaining_data()
1672 server->total_read += length; in cifs_discard_remaining_data()
1680 __cifs_readv_discard(struct TCP_Server_Info *server, struct mid_q_entry *mid, in __cifs_readv_discard() argument
1685 length = cifs_discard_remaining_data(server); in __cifs_readv_discard()
1687 mid->resp_buf = server->smallbuf; in __cifs_readv_discard()
1688 server->smallbuf = NULL; in __cifs_readv_discard()
1693 cifs_readv_discard(struct TCP_Server_Info *server, struct mid_q_entry *mid) in cifs_readv_discard() argument
1697 return __cifs_readv_discard(server, mid, rdata->result); in cifs_readv_discard()
1701 cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid) in cifs_readv_receive() argument
1706 char *buf = server->smallbuf; in cifs_readv_receive()
1707 unsigned int buflen = server->pdu_size + HEADER_PREAMBLE_SIZE(server); in cifs_readv_receive()
1718 len = min_t(unsigned int, buflen, server->vals->read_rsp_size) - in cifs_readv_receive()
1719 HEADER_SIZE(server) + 1; in cifs_readv_receive()
1721 length = cifs_read_from_socket(server, in cifs_readv_receive()
1722 buf + HEADER_SIZE(server) - 1, len); in cifs_readv_receive()
1725 server->total_read += length; in cifs_readv_receive()
1727 if (server->ops->is_session_expired && in cifs_readv_receive()
1728 server->ops->is_session_expired(buf)) { in cifs_readv_receive()
1729 cifs_reconnect(server, true); in cifs_readv_receive()
1733 if (server->ops->is_status_pending && in cifs_readv_receive()
1734 server->ops->is_status_pending(buf, server)) { in cifs_readv_receive()
1735 cifs_discard_remaining_data(server); in cifs_readv_receive()
1741 rdata->iov[0].iov_len = HEADER_PREAMBLE_SIZE(server); in cifs_readv_receive()
1742 rdata->iov[1].iov_base = buf + HEADER_PREAMBLE_SIZE(server); in cifs_readv_receive()
1744 server->total_read - HEADER_PREAMBLE_SIZE(server); in cifs_readv_receive()
1751 rdata->result = server->ops->map_error(buf, false); in cifs_readv_receive()
1756 return __cifs_readv_discard(server, mid, false); in cifs_readv_receive()
1760 if (server->total_read < server->vals->read_rsp_size) { in cifs_readv_receive()
1762 __func__, server->total_read, in cifs_readv_receive()
1763 server->vals->read_rsp_size); in cifs_readv_receive()
1765 return cifs_readv_discard(server, mid); in cifs_readv_receive()
1768 data_offset = server->ops->read_data_offset(buf) + in cifs_readv_receive()
1769 HEADER_PREAMBLE_SIZE(server); in cifs_readv_receive()
1770 if (data_offset < server->total_read) { in cifs_readv_receive()
1778 data_offset = server->total_read; in cifs_readv_receive()
1784 return cifs_readv_discard(server, mid); in cifs_readv_receive()
1788 __func__, server->total_read, data_offset); in cifs_readv_receive()
1790 len = data_offset - server->total_read; in cifs_readv_receive()
1793 length = cifs_read_from_socket(server, in cifs_readv_receive()
1794 buf + server->total_read, len); in cifs_readv_receive()
1797 server->total_read += length; in cifs_readv_receive()
1804 data_len = server->ops->read_data_length(buf, use_rdma_mr); in cifs_readv_receive()
1808 return cifs_readv_discard(server, mid); in cifs_readv_receive()
1816 length = cifs_read_iter_from_socket(server, &rdata->iter, in cifs_readv_receive()
1820 server->total_read += length; in cifs_readv_receive()
1823 server->total_read, buflen, data_len); in cifs_readv_receive()
1826 if (server->total_read < buflen) in cifs_readv_receive()
1827 return cifs_readv_discard(server, mid); in cifs_readv_receive()
1830 mid->resp_buf = server->smallbuf; in cifs_readv_receive()
1831 server->smallbuf = NULL; in cifs_readv_receive()