Lines Matching full:server
41 AllocMidQEntry(const struct smb_hdr *smb_buffer, struct TCP_Server_Info *server) in AllocMidQEntry() argument
45 if (server == NULL) { in AllocMidQEntry()
60 temp->server = server; in AllocMidQEntry()
81 __le16 command = midEntry->server->vals->lock_cmd; in _cifs_mid_q_entry_release()
86 struct TCP_Server_Info *server = midEntry->server; in _cifs_mid_q_entry_release() local
90 server->ops->handle_cancelled_mid) in _cifs_mid_q_entry_release()
91 server->ops->handle_cancelled_mid(midEntry, server); in _cifs_mid_q_entry_release()
106 if (atomic_read(&server->num_cmds[smb_cmd]) == 0) { in _cifs_mid_q_entry_release()
107 server->slowest_cmd[smb_cmd] = roundtrip_time; in _cifs_mid_q_entry_release()
108 server->fastest_cmd[smb_cmd] = roundtrip_time; in _cifs_mid_q_entry_release()
110 if (server->slowest_cmd[smb_cmd] < roundtrip_time) in _cifs_mid_q_entry_release()
111 server->slowest_cmd[smb_cmd] = roundtrip_time; in _cifs_mid_q_entry_release()
112 else if (server->fastest_cmd[smb_cmd] > roundtrip_time) in _cifs_mid_q_entry_release()
113 server->fastest_cmd[smb_cmd] = roundtrip_time; in _cifs_mid_q_entry_release()
115 cifs_stats_inc(&server->num_cmds[smb_cmd]); in _cifs_mid_q_entry_release()
116 server->time_per_cmd[smb_cmd] += roundtrip_time; in _cifs_mid_q_entry_release()
121 * busy server. Note that this calc is unlikely or impossible to wrap in _cifs_mid_q_entry_release()
136 cifs_stats_inc(&server->smb2slowcmd[smb_cmd]); in _cifs_mid_q_entry_release()
181 * smb_send_kvec - send an array of kvecs to the server
182 * @server: Server to send the data to
186 * Our basic "send data to server" function. Should be called with srv_mutex
190 smb_send_kvec(struct TCP_Server_Info *server, struct msghdr *smb_msg, in smb_send_kvec() argument
195 struct socket *ssocket = server->ssocket; in smb_send_kvec()
199 smb_msg->msg_name = (struct sockaddr *) &server->dstaddr; in smb_send_kvec()
203 if (server->noblocksnd) in smb_send_kvec()
216 * the server in SendReceive[2] for the server to send in smb_send_kvec()
231 (!server->noblocksnd && (retries > 2))) { in smb_send_kvec()
259 smb_rqst_len(struct TCP_Server_Info *server, struct smb_rqst *rqst) in smb_rqst_len() argument
266 if (server->vals->header_preamble_size == 0 && in smb_rqst_len()
303 __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, in __smb_send_rqst() argument
313 struct socket *ssocket = server->ssocket; in __smb_send_rqst()
317 if (cifs_rdma_enabled(server)) { in __smb_send_rqst()
320 if (server->smbd_conn) in __smb_send_rqst()
321 rc = smbd_send(server, num_rqst, rqst); in __smb_send_rqst()
337 send_length += smb_rqst_len(server, &rqst[j]); in __smb_send_rqst()
343 * latency of system calls and overload a server with unnecessary in __smb_send_rqst()
351 if (server->vals->header_preamble_size == 0) { in __smb_send_rqst()
357 rc = smb_send_kvec(server, &smb_msg, &sent); in __smb_send_rqst()
379 rc = smb_send_kvec(server, &smb_msg, &sent); in __smb_send_rqst()
395 rc = smb_send_kvec(server, &smb_msg, &sent); in __smb_send_rqst()
408 * the server we need to return success status to allow a corresponding in __smb_send_rqst()
410 * to handle responses from the server by the client. in __smb_send_rqst()
414 * won't be any response from the server to handle. in __smb_send_rqst()
431 * socket so the server throws away the partial SMB in __smb_send_rqst()
434 server->tcpStatus = CifsNeedReconnect; in __smb_send_rqst()
436 trace_smb3_partial_send_reconnect(server->CurrentMid, in __smb_send_rqst()
437 server->conn_id, server->hostname); in __smb_send_rqst()
441 cifs_server_dbg(VFS, "Error %d sending data on socket to server\n", in __smb_send_rqst()
450 smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, in smb_send_rqst() argument
459 return __smb_send_rqst(server, num_rqst, rqst); in smb_send_rqst()
464 if (!server->ops->init_transform_rq) { in smb_send_rqst()
482 rc = server->ops->init_transform_rq(server, num_rqst + 1, in smb_send_rqst()
487 rc = __smb_send_rqst(server, num_rqst + 1, &cur_rqst[0]); in smb_send_rqst()
495 smb_send(struct TCP_Server_Info *server, struct smb_hdr *smb_buffer, in smb_send() argument
507 return __smb_send_rqst(server, 1, &rqst); in smb_send()
511 wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits, in wait_for_free_credits() argument
530 credits = server->ops->get_credits_field(server, optype); in wait_for_free_credits()
535 spin_lock(&server->req_lock); in wait_for_free_credits()
538 server->in_flight++; in wait_for_free_credits()
539 if (server->in_flight > server->max_in_flight) in wait_for_free_credits()
540 server->max_in_flight = server->in_flight; in wait_for_free_credits()
542 *instance = server->reconnect_instance; in wait_for_free_credits()
544 in_flight = server->in_flight; in wait_for_free_credits()
545 spin_unlock(&server->req_lock); in wait_for_free_credits()
547 trace_smb3_add_credits(server->CurrentMid, in wait_for_free_credits()
548 server->conn_id, server->hostname, scredits, -1, in_flight); in wait_for_free_credits()
558 spin_unlock(&server->req_lock); in wait_for_free_credits()
560 cifs_num_waiters_inc(server); in wait_for_free_credits()
561 rc = wait_event_killable_timeout(server->request_q, in wait_for_free_credits()
562 has_credits(server, credits, num_credits), t); in wait_for_free_credits()
563 cifs_num_waiters_dec(server); in wait_for_free_credits()
565 spin_lock(&server->req_lock); in wait_for_free_credits()
567 in_flight = server->in_flight; in wait_for_free_credits()
568 spin_unlock(&server->req_lock); in wait_for_free_credits()
570 trace_smb3_credit_timeout(server->CurrentMid, in wait_for_free_credits()
571 server->conn_id, server->hostname, scredits, in wait_for_free_credits()
579 spin_lock(&server->req_lock); in wait_for_free_credits()
581 if (server->tcpStatus == CifsExiting) { in wait_for_free_credits()
582 spin_unlock(&server->req_lock); in wait_for_free_credits()
600 server->in_flight > 2 * MAX_COMPOUND && in wait_for_free_credits()
602 spin_unlock(&server->req_lock); in wait_for_free_credits()
604 cifs_num_waiters_inc(server); in wait_for_free_credits()
606 server->request_q, in wait_for_free_credits()
607 has_credits(server, credits, in wait_for_free_credits()
610 cifs_num_waiters_dec(server); in wait_for_free_credits()
612 spin_lock(&server->req_lock); in wait_for_free_credits()
614 in_flight = server->in_flight; in wait_for_free_credits()
615 spin_unlock(&server->req_lock); in wait_for_free_credits()
618 server->CurrentMid, in wait_for_free_credits()
619 server->conn_id, server->hostname, in wait_for_free_credits()
627 spin_lock(&server->req_lock); in wait_for_free_credits()
633 * as they are allowed to block on server. in wait_for_free_credits()
636 /* update # of requests on the wire to server */ in wait_for_free_credits()
639 server->in_flight += num_credits; in wait_for_free_credits()
640 if (server->in_flight > server->max_in_flight) in wait_for_free_credits()
641 server->max_in_flight = server->in_flight; in wait_for_free_credits()
642 *instance = server->reconnect_instance; in wait_for_free_credits()
645 in_flight = server->in_flight; in wait_for_free_credits()
646 spin_unlock(&server->req_lock); in wait_for_free_credits()
648 trace_smb3_add_credits(server->CurrentMid, in wait_for_free_credits()
649 server->conn_id, server->hostname, scredits, in wait_for_free_credits()
660 wait_for_free_request(struct TCP_Server_Info *server, const int flags, in wait_for_free_request() argument
663 return wait_for_free_credits(server, 1, -1, flags, in wait_for_free_request()
668 wait_for_compound_request(struct TCP_Server_Info *server, int num, in wait_for_compound_request() argument
674 credits = server->ops->get_credits_field(server, flags & CIFS_OP_MASK); in wait_for_compound_request()
676 spin_lock(&server->req_lock); in wait_for_compound_request()
678 in_flight = server->in_flight; in wait_for_compound_request()
682 * If the server is tight on resources or just gives us less in wait_for_compound_request()
684 * order and the server delays granting more credits until it in wait_for_compound_request()
691 * server will return enough credits to satisfy this compound in wait_for_compound_request()
697 if (server->in_flight == 0) { in wait_for_compound_request()
698 spin_unlock(&server->req_lock); in wait_for_compound_request()
699 trace_smb3_insufficient_credits(server->CurrentMid, in wait_for_compound_request()
700 server->conn_id, server->hostname, scredits, in wait_for_compound_request()
707 spin_unlock(&server->req_lock); in wait_for_compound_request()
709 return wait_for_free_credits(server, num, 60000, flags, in wait_for_compound_request()
714 cifs_wait_mtu_credits(struct TCP_Server_Info *server, unsigned int size, in cifs_wait_mtu_credits() argument
719 credits->instance = server->reconnect_instance; in cifs_wait_mtu_credits()
726 if (ses->server->tcpStatus == CifsExiting) { in allocate_mid()
730 if (ses->server->tcpStatus == CifsNeedReconnect) { in allocate_mid()
749 *ppmidQ = AllocMidQEntry(in_buf, ses->server); in allocate_mid()
753 list_add_tail(&(*ppmidQ)->qhead, &ses->server->pending_mid_q); in allocate_mid()
759 wait_for_response(struct TCP_Server_Info *server, struct mid_q_entry *midQ) in wait_for_response() argument
763 error = wait_event_freezekillable_unsafe(server->response_q, in wait_for_response()
772 cifs_setup_async_request(struct TCP_Server_Info *server, struct smb_rqst *rqst) in cifs_setup_async_request() argument
782 /* enable signing if server requires it */ in cifs_setup_async_request()
783 if (server->sign) in cifs_setup_async_request()
786 mid = AllocMidQEntry(hdr, server); in cifs_setup_async_request()
790 rc = cifs_sign_rqst(rqst, server, &mid->sequence_number); in cifs_setup_async_request()
804 cifs_call_async(struct TCP_Server_Info *server, struct smb_rqst *rqst, in cifs_call_async() argument
818 rc = wait_for_free_request(server, flags, &instance); in cifs_call_async()
826 mutex_lock(&server->srv_mutex); in cifs_call_async()
833 if (instance != server->reconnect_instance) { in cifs_call_async()
834 mutex_unlock(&server->srv_mutex); in cifs_call_async()
835 add_credits_and_wake_if(server, &credits, optype); in cifs_call_async()
839 mid = server->ops->setup_async_request(server, rqst); in cifs_call_async()
841 mutex_unlock(&server->srv_mutex); in cifs_call_async()
842 add_credits_and_wake_if(server, &credits, optype); in cifs_call_async()
854 list_add_tail(&mid->qhead, &server->pending_mid_q); in cifs_call_async()
862 cifs_in_send_inc(server); in cifs_call_async()
863 rc = smb_send_rqst(server, 1, rqst, flags); in cifs_call_async()
864 cifs_in_send_dec(server); in cifs_call_async()
867 revert_current_mid(server, mid->credits); in cifs_call_async()
868 server->sequence_number -= 2; in cifs_call_async()
872 mutex_unlock(&server->srv_mutex); in cifs_call_async()
877 add_credits_and_wake_if(server, &credits, optype); in cifs_call_async()
909 cifs_sync_mid_result(struct mid_q_entry *mid, struct TCP_Server_Info *server) in cifs_sync_mid_result() argument
946 send_cancel(struct TCP_Server_Info *server, struct smb_rqst *rqst, in send_cancel() argument
949 return server->ops->send_cancel ? in send_cancel()
950 server->ops->send_cancel(server, rqst, mid) : 0; in send_cancel()
954 cifs_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server, in cifs_check_receive() argument
962 if (server->sign) { in cifs_check_receive()
973 rc = cifs_verify_signature(&rqst, server, in cifs_check_receive()
999 rc = cifs_sign_rqst(rqst, ses->server, &mid->sequence_number); in cifs_setup_request()
1010 struct TCP_Server_Info *server = mid->server; in cifs_compound_callback() local
1013 credits.value = server->ops->get_credits(mid); in cifs_compound_callback()
1014 credits.instance = server->reconnect_instance; in cifs_compound_callback()
1016 add_credits(server, &credits, mid->optype); in cifs_compound_callback()
1053 return ses->chans[index].server; in cifs_pick_channel()
1061 struct TCP_Server_Info *server, in compound_send_recv() argument
1079 if (!ses || !ses->server || !server) { in compound_send_recv()
1084 if (server->tcpStatus == CifsExiting) in compound_send_recv()
1090 * credits if the server doesn't grant credits to the outstanding in compound_send_recv()
1095 rc = wait_for_compound_request(server, num_rqst, flags, in compound_send_recv()
1111 mutex_lock(&server->srv_mutex); in compound_send_recv()
1120 if (instance != server->reconnect_instance) { in compound_send_recv()
1121 mutex_unlock(&server->srv_mutex); in compound_send_recv()
1123 add_credits(server, &credits[j], optype); in compound_send_recv()
1128 midQ[i] = server->ops->setup_request(ses, server, &rqst[i]); in compound_send_recv()
1130 revert_current_mid(server, i); in compound_send_recv()
1133 mutex_unlock(&server->srv_mutex); in compound_send_recv()
1135 /* Update # of requests on wire to server */ in compound_send_recv()
1137 add_credits(server, &credits[j], optype); in compound_send_recv()
1153 cifs_in_send_inc(server); in compound_send_recv()
1154 rc = smb_send_rqst(server, num_rqst, rqst, flags); in compound_send_recv()
1155 cifs_in_send_dec(server); in compound_send_recv()
1161 revert_current_mid(server, num_rqst); in compound_send_recv()
1162 server->sequence_number -= 2; in compound_send_recv()
1165 mutex_unlock(&server->srv_mutex); in compound_send_recv()
1173 add_credits(server, &credits[i], optype); in compound_send_recv()
1179 * that any credits taken from the server structure on the client have in compound_send_recv()
1181 * we will collect credits granted by the server in the mid callbacks in compound_send_recv()
1182 * and add those credits to the server structure. in compound_send_recv()
1189 mutex_lock(&server->srv_mutex); in compound_send_recv()
1192 mutex_unlock(&server->srv_mutex); in compound_send_recv()
1196 rc = wait_for_response(server, midQ[i]); in compound_send_recv()
1204 send_cancel(server, &rqst[i], midQ[i]); in compound_send_recv()
1220 rc = cifs_sync_mid_result(midQ[i], server); in compound_send_recv()
1237 server->vals->header_preamble_size; in compound_send_recv()
1244 rc = server->ops->check_receive(midQ[i], server, in compound_send_recv()
1261 mutex_lock(&server->srv_mutex); in compound_send_recv()
1263 mutex_unlock(&server->srv_mutex); in compound_send_recv()
1283 struct TCP_Server_Info *server, in cifs_send_recv() argument
1287 return compound_send_recv(xid, ses, server, flags, 1, in cifs_send_recv()
1323 rc = cifs_send_recv(xid, ses, ses->server, in SendReceive2()
1341 struct TCP_Server_Info *server; in SendReceive() local
1347 server = ses->server; in SendReceive()
1348 if (server == NULL) { in SendReceive()
1353 if (server->tcpStatus == CifsExiting) in SendReceive()
1357 to the same server. We may make this configurable later or in SendReceive()
1366 rc = wait_for_free_request(server, flags, &credits.instance); in SendReceive()
1374 mutex_lock(&server->srv_mutex); in SendReceive()
1378 mutex_unlock(&server->srv_mutex); in SendReceive()
1379 /* Update # of requests on wire to server */ in SendReceive()
1380 add_credits(server, &credits, 0); in SendReceive()
1384 rc = cifs_sign_smb(in_buf, server, &midQ->sequence_number); in SendReceive()
1386 mutex_unlock(&server->srv_mutex); in SendReceive()
1392 cifs_in_send_inc(server); in SendReceive()
1393 rc = smb_send(server, in_buf, len); in SendReceive()
1394 cifs_in_send_dec(server); in SendReceive()
1398 server->sequence_number -= 2; in SendReceive()
1400 mutex_unlock(&server->srv_mutex); in SendReceive()
1405 rc = wait_for_response(server, midQ); in SendReceive()
1407 send_cancel(server, &rqst, midQ); in SendReceive()
1413 add_credits(server, &credits, 0); in SendReceive()
1419 rc = cifs_sync_mid_result(midQ, server); in SendReceive()
1421 add_credits(server, &credits, 0); in SendReceive()
1434 rc = cifs_check_receive(midQ, server, 0); in SendReceive()
1437 add_credits(server, &credits, 0); in SendReceive()
1461 pSMB->hdr.Mid = get_next_mid(ses->server); in send_lock_cancel()
1480 struct TCP_Server_Info *server; in SendReceiveBlockingLock() local
1487 server = ses->server; in SendReceiveBlockingLock()
1489 if (server == NULL) { in SendReceiveBlockingLock()
1494 if (server->tcpStatus == CifsExiting) in SendReceiveBlockingLock()
1498 to the same server. We may make this configurable later or in SendReceiveBlockingLock()
1507 rc = wait_for_free_request(server, CIFS_BLOCKING_OP, &instance); in SendReceiveBlockingLock()
1515 mutex_lock(&server->srv_mutex); in SendReceiveBlockingLock()
1519 mutex_unlock(&server->srv_mutex); in SendReceiveBlockingLock()
1523 rc = cifs_sign_smb(in_buf, server, &midQ->sequence_number); in SendReceiveBlockingLock()
1526 mutex_unlock(&server->srv_mutex); in SendReceiveBlockingLock()
1531 cifs_in_send_inc(server); in SendReceiveBlockingLock()
1532 rc = smb_send(server, in_buf, len); in SendReceiveBlockingLock()
1533 cifs_in_send_dec(server); in SendReceiveBlockingLock()
1537 server->sequence_number -= 2; in SendReceiveBlockingLock()
1539 mutex_unlock(&server->srv_mutex); in SendReceiveBlockingLock()
1547 rc = wait_event_interruptible(server->response_q, in SendReceiveBlockingLock()
1549 ((server->tcpStatus != CifsGood) && in SendReceiveBlockingLock()
1550 (server->tcpStatus != CifsNew))); in SendReceiveBlockingLock()
1555 ((server->tcpStatus == CifsGood) || in SendReceiveBlockingLock()
1556 (server->tcpStatus == CifsNew))) { in SendReceiveBlockingLock()
1561 rc = send_cancel(server, &rqst, midQ); in SendReceiveBlockingLock()
1580 rc = wait_for_response(server, midQ); in SendReceiveBlockingLock()
1582 send_cancel(server, &rqst, midQ); in SendReceiveBlockingLock()
1597 rc = cifs_sync_mid_result(midQ, server); in SendReceiveBlockingLock()
1610 rc = cifs_check_receive(midQ, server, 0); in SendReceiveBlockingLock()