1 // SPDX-License-Identifier: LGPL-2.1 2 /* 3 * 4 * Copyright (C) International Business Machines Corp., 2002,2008 5 * Author(s): Steve French (sfrench@us.ibm.com) 6 * Jeremy Allison (jra@samba.org) 2006. 7 * 8 */ 9 10 #include <linux/fs.h> 11 #include <linux/list.h> 12 #include <linux/gfp.h> 13 #include <linux/wait.h> 14 #include <linux/net.h> 15 #include <linux/delay.h> 16 #include <linux/freezer.h> 17 #include <linux/tcp.h> 18 #include <linux/bvec.h> 19 #include <linux/highmem.h> 20 #include <linux/uaccess.h> 21 #include <linux/processor.h> 22 #include <linux/mempool.h> 23 #include <linux/sched/signal.h> 24 #include <linux/task_io_accounting_ops.h> 25 #include "cifsglob.h" 26 #include "cifsproto.h" 27 #include "cifs_debug.h" 28 #include "smb2proto.h" 29 #include "smbdirect.h" 30 #include "compress.h" 31 32 void 33 cifs_wake_up_task(struct TCP_Server_Info *server, struct mid_q_entry *mid) 34 { 35 if (mid->mid_state == MID_RESPONSE_RECEIVED) 36 mid->mid_state = MID_RESPONSE_READY; 37 wake_up_process(mid->callback_data); 38 } 39 40 void __release_mid(struct TCP_Server_Info *server, struct mid_q_entry *midEntry) 41 { 42 #ifdef CONFIG_CIFS_STATS2 43 __le16 command = server->vals->lock_cmd; 44 __u16 smb_cmd = le16_to_cpu(midEntry->command); 45 unsigned long now; 46 unsigned long roundtrip_time; 47 #endif 48 49 if (midEntry->resp_buf && (midEntry->wait_cancelled) && 50 (midEntry->mid_state == MID_RESPONSE_RECEIVED || 51 midEntry->mid_state == MID_RESPONSE_READY) && 52 server->ops->handle_cancelled_mid) 53 server->ops->handle_cancelled_mid(midEntry, server); 54 55 midEntry->mid_state = MID_FREE; 56 atomic_dec(&mid_count); 57 if (midEntry->large_buf) 58 cifs_buf_release(midEntry->resp_buf); 59 else 60 cifs_small_buf_release(midEntry->resp_buf); 61 #ifdef CONFIG_CIFS_STATS2 62 now = jiffies; 63 if (now < midEntry->when_alloc) 64 cifs_server_dbg(VFS, "Invalid mid allocation time\n"); 65 roundtrip_time = now - midEntry->when_alloc; 66 67 if (smb_cmd < NUMBER_OF_SMB2_COMMANDS) { 68 if (atomic_read(&server->num_cmds[smb_cmd]) == 0) { 69 server->slowest_cmd[smb_cmd] = roundtrip_time; 70 server->fastest_cmd[smb_cmd] = roundtrip_time; 71 } else { 72 if (server->slowest_cmd[smb_cmd] < roundtrip_time) 73 server->slowest_cmd[smb_cmd] = roundtrip_time; 74 else if (server->fastest_cmd[smb_cmd] > roundtrip_time) 75 server->fastest_cmd[smb_cmd] = roundtrip_time; 76 } 77 cifs_stats_inc(&server->num_cmds[smb_cmd]); 78 server->time_per_cmd[smb_cmd] += roundtrip_time; 79 } 80 /* 81 * commands taking longer than one second (default) can be indications 82 * that something is wrong, unless it is quite a slow link or a very 83 * busy server. Note that this calc is unlikely or impossible to wrap 84 * as long as slow_rsp_threshold is not set way above recommended max 85 * value (32767 ie 9 hours) and is generally harmless even if wrong 86 * since only affects debug counters - so leaving the calc as simple 87 * comparison rather than doing multiple conversions and overflow 88 * checks 89 */ 90 if ((slow_rsp_threshold != 0) && 91 time_after(now, midEntry->when_alloc + (slow_rsp_threshold * HZ)) && 92 (midEntry->command != command)) { 93 /* 94 * smb2slowcmd[NUMBER_OF_SMB2_COMMANDS] counts by command 95 * NB: le16_to_cpu returns unsigned so can not be negative below 96 */ 97 if (smb_cmd < NUMBER_OF_SMB2_COMMANDS) 98 cifs_stats_inc(&server->smb2slowcmd[smb_cmd]); 99 100 trace_smb3_slow_rsp(smb_cmd, midEntry->mid, midEntry->pid, 101 midEntry->when_sent, midEntry->when_received); 102 if (cifsFYI & CIFS_TIMER) { 103 pr_debug("slow rsp: cmd %d mid %llu A: 0x%lx S: 0x%lx R: 0x%lx\n", 104 midEntry->command, midEntry->mid, 105 now - midEntry->when_alloc, 106 now - midEntry->when_sent, 107 now - midEntry->when_received); 108 } 109 } 110 #endif 111 put_task_struct(midEntry->creator); 112 113 mempool_free(midEntry, &cifs_mid_pool); 114 } 115 116 void 117 delete_mid(struct TCP_Server_Info *server, struct mid_q_entry *mid) 118 { 119 spin_lock(&server->mid_queue_lock); 120 121 if (!mid->deleted_from_q) { 122 list_del_init(&mid->qhead); 123 mid->deleted_from_q = true; 124 } 125 spin_unlock(&server->mid_queue_lock); 126 127 release_mid(server, mid); 128 } 129 130 /* 131 * smb_send_kvec - send an array of kvecs to the server 132 * @server: Server to send the data to 133 * @smb_msg: Message to send 134 * @sent: amount of data sent on socket is stored here 135 * 136 * Our basic "send data to server" function. Should be called with srv_mutex 137 * held. The caller is responsible for handling the results. 138 */ 139 int 140 smb_send_kvec(struct TCP_Server_Info *server, struct msghdr *smb_msg, 141 size_t *sent) 142 { 143 int rc = 0; 144 int retries = 0; 145 struct socket *ssocket = server->ssocket; 146 147 *sent = 0; 148 149 if (server->noblocksnd) 150 smb_msg->msg_flags = MSG_DONTWAIT + MSG_NOSIGNAL; 151 else 152 smb_msg->msg_flags = MSG_NOSIGNAL; 153 154 while (msg_data_left(smb_msg)) { 155 /* 156 * If blocking send, we try 3 times, since each can block 157 * for 5 seconds. For nonblocking we have to try more 158 * but wait increasing amounts of time allowing time for 159 * socket to clear. The overall time we wait in either 160 * case to send on the socket is about 15 seconds. 161 * Similarly we wait for 15 seconds for a response from 162 * the server in SendReceive[2] for the server to send 163 * a response back for most types of requests (except 164 * SMB Write past end of file which can be slow, and 165 * blocking lock operations). NFS waits slightly longer 166 * than CIFS, but this can make it take longer for 167 * nonresponsive servers to be detected and 15 seconds 168 * is more than enough time for modern networks to 169 * send a packet. In most cases if we fail to send 170 * after the retries we will kill the socket and 171 * reconnect which may clear the network problem. 172 * 173 * Task work must not abort the send, see signal_pending(). 174 */ 175 scoped_guard(no_notify_signal) 176 rc = sock_sendmsg(ssocket, smb_msg); 177 178 /* 179 * If need to reconnect, blame it for any non-interrupt error 180 * and bail out early, even if -EAGAIN; reconnect will never 181 * happen in parallel as cifs_reconnect() needs server mutex 182 * (which we're already holding), so it's pointless to retry. 183 */ 184 if (unlikely(rc <= 0 && !is_interrupt_error(rc) && 185 READ_ONCE(server->tcpStatus) == CifsNeedReconnect)) 186 return -ECONNRESET; 187 188 if (rc == -EAGAIN) { 189 retries++; 190 if (retries >= 14 || 191 (!server->noblocksnd && (retries > 2))) { 192 cifs_server_dbg(VFS, "sends on sock %p stuck for 15 seconds\n", 193 ssocket); 194 return -EAGAIN; 195 } 196 msleep(1 << retries); 197 continue; 198 } 199 200 if (rc < 0) 201 return rc; 202 203 if (rc == 0) { 204 /* should never happen, letting socket clear before 205 retrying is our only obvious option here */ 206 cifs_server_dbg(VFS, "tcp sent no data\n"); 207 msleep(500); 208 continue; 209 } 210 211 /* send was at least partially successful */ 212 *sent += rc; 213 retries = 0; /* in case we get ENOSPC on the next send */ 214 } 215 return 0; 216 } 217 218 unsigned long 219 smb_rqst_len(struct TCP_Server_Info *server, struct smb_rqst *rqst) 220 { 221 unsigned int i; 222 struct kvec *iov; 223 int nvec; 224 unsigned long buflen = 0; 225 226 if (!is_smb1(server) && rqst->rq_nvec >= 2 && 227 rqst->rq_iov[0].iov_len == 4) { 228 iov = &rqst->rq_iov[1]; 229 nvec = rqst->rq_nvec - 1; 230 } else { 231 iov = rqst->rq_iov; 232 nvec = rqst->rq_nvec; 233 } 234 235 /* total up iov array first */ 236 for (i = 0; i < nvec; i++) 237 buflen += iov[i].iov_len; 238 239 buflen += iov_iter_count(&rqst->rq_iter); 240 return buflen; 241 } 242 243 int __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, 244 struct smb_rqst *rqst) 245 { 246 int rc; 247 struct kvec *iov; 248 int n_vec; 249 unsigned int send_length = 0; 250 unsigned int i, j; 251 sigset_t mask, oldmask; 252 size_t total_len = 0, sent, size; 253 struct socket *ssocket = server->ssocket; 254 struct msghdr smb_msg = {}; 255 __be32 rfc1002_marker; 256 257 cifs_in_send_inc(server); 258 if (cifs_rdma_enabled(server)) { 259 /* return -EAGAIN when connecting or reconnecting */ 260 rc = -EAGAIN; 261 if (server->smbd_conn) 262 rc = smbd_send(server, num_rqst, rqst); 263 goto smbd_done; 264 } 265 266 rc = -EAGAIN; 267 if (ssocket == NULL) 268 goto out; 269 270 rc = -ERESTARTSYS; 271 if (fatal_signal_pending(current)) { 272 cifs_dbg(FYI, "signal pending before send request\n"); 273 goto out; 274 } 275 276 rc = 0; 277 /* cork the socket */ 278 tcp_sock_set_cork(ssocket->sk, true); 279 280 for (j = 0; j < num_rqst; j++) 281 send_length += smb_rqst_len(server, &rqst[j]); 282 rfc1002_marker = cpu_to_be32(send_length); 283 284 /* 285 * We should not allow signals to interrupt the network send because 286 * any partial send will cause session reconnects thus increasing 287 * latency of system calls and overload a server with unnecessary 288 * requests. 289 */ 290 291 sigfillset(&mask); 292 sigprocmask(SIG_BLOCK, &mask, &oldmask); 293 294 /* Generate a rfc1002 marker */ 295 { 296 struct kvec hiov = { 297 .iov_base = &rfc1002_marker, 298 .iov_len = 4 299 }; 300 iov_iter_kvec(&smb_msg.msg_iter, ITER_SOURCE, &hiov, 1, 4); 301 rc = smb_send_kvec(server, &smb_msg, &sent); 302 if (rc < 0) 303 goto unmask; 304 305 total_len += sent; 306 send_length += 4; 307 } 308 309 cifs_dbg(FYI, "Sending smb: smb_len=%u\n", send_length); 310 311 for (j = 0; j < num_rqst; j++) { 312 iov = rqst[j].rq_iov; 313 n_vec = rqst[j].rq_nvec; 314 315 size = 0; 316 for (i = 0; i < n_vec; i++) { 317 dump_smb(iov[i].iov_base, iov[i].iov_len); 318 size += iov[i].iov_len; 319 } 320 321 iov_iter_kvec(&smb_msg.msg_iter, ITER_SOURCE, iov, n_vec, size); 322 323 rc = smb_send_kvec(server, &smb_msg, &sent); 324 if (rc < 0) 325 goto unmask; 326 327 total_len += sent; 328 329 if (iov_iter_count(&rqst[j].rq_iter) > 0) { 330 smb_msg.msg_iter = rqst[j].rq_iter; 331 rc = smb_send_kvec(server, &smb_msg, &sent); 332 if (rc < 0) 333 break; 334 total_len += sent; 335 } 336 } 337 338 unmask: 339 sigprocmask(SIG_SETMASK, &oldmask, NULL); 340 341 /* 342 * If signal is pending but we have already sent the whole packet to 343 * the server we need to return success status to allow a corresponding 344 * mid entry to be kept in the pending requests queue thus allowing 345 * to handle responses from the server by the client. 346 * 347 * If only part of the packet has been sent there is no need to hide 348 * interrupt because the session will be reconnected anyway, so there 349 * won't be any response from the server to handle. 350 */ 351 352 if (signal_pending(current) && (total_len != send_length)) { 353 cifs_dbg(FYI, "signal is pending after attempt to send\n"); 354 rc = -ERESTARTSYS; 355 } 356 357 /* uncork it */ 358 tcp_sock_set_cork(ssocket->sk, false); 359 360 if ((total_len > 0) && (total_len != send_length)) { 361 cifs_dbg(FYI, "partial send (wanted=%u sent=%zu): terminating session\n", 362 send_length, total_len); 363 /* 364 * If we have only sent part of an SMB then the next SMB could 365 * be taken as the remainder of this one. We need to kill the 366 * socket so the server throws away the partial SMB 367 */ 368 cifs_signal_cifsd_for_reconnect(server, false); 369 trace_smb3_partial_send_reconnect(server->current_mid, 370 server->conn_id, server->hostname); 371 } 372 smbd_done: 373 /* 374 * there's hardly any use for the layers above to know the 375 * actual error code here. All they should do at this point is 376 * to retry the connection and hope it goes away. 377 */ 378 if (rc < 0 && rc != -EINTR && rc != -EAGAIN) { 379 cifs_server_dbg(VFS, "Error %d sending data on socket to server\n", 380 rc); 381 rc = -ECONNABORTED; 382 cifs_signal_cifsd_for_reconnect(server, false); 383 } else if (rc > 0) 384 rc = 0; 385 out: 386 cifs_in_send_dec(server); 387 return rc; 388 } 389 390 static int 391 smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, 392 struct smb_rqst *rqst, int flags) 393 { 394 struct smb2_transform_hdr tr_hdr; 395 struct smb_rqst new_rqst[MAX_COMPOUND] = {}; 396 struct kvec iov = { 397 .iov_base = &tr_hdr, 398 .iov_len = sizeof(tr_hdr), 399 }; 400 int rc; 401 402 if (flags & CIFS_COMPRESS_REQ) 403 return smb_compress(server, &rqst[0], __smb_send_rqst); 404 405 if (!(flags & CIFS_TRANSFORM_REQ)) 406 return __smb_send_rqst(server, num_rqst, rqst); 407 408 if (WARN_ON_ONCE(num_rqst > MAX_COMPOUND - 1)) 409 return smb_EIO1(smb_eio_trace_tx_max_compound, num_rqst); 410 411 if (!server->ops->init_transform_rq) { 412 cifs_server_dbg(VFS, "Encryption requested but transform callback is missing\n"); 413 return smb_EIO(smb_eio_trace_tx_need_transform); 414 } 415 416 new_rqst[0].rq_iov = &iov; 417 new_rqst[0].rq_nvec = 1; 418 419 rc = server->ops->init_transform_rq(server, num_rqst + 1, 420 new_rqst, rqst); 421 if (!rc) { 422 rc = __smb_send_rqst(server, num_rqst + 1, new_rqst); 423 smb3_free_compound_rqst(num_rqst, &new_rqst[1]); 424 } 425 return rc; 426 } 427 428 static int 429 wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits, 430 const int timeout, const int flags, 431 unsigned int *instance) 432 { 433 long rc; 434 int *credits; 435 int optype; 436 long int t; 437 int scredits, in_flight; 438 439 if (timeout < 0) 440 t = MAX_JIFFY_OFFSET; 441 else 442 t = msecs_to_jiffies(timeout); 443 444 optype = flags & CIFS_OP_MASK; 445 446 *instance = 0; 447 448 credits = server->ops->get_credits_field(server, optype); 449 /* Since an echo is already inflight, no need to wait to send another */ 450 if (*credits <= 0 && optype == CIFS_ECHO_OP) 451 return -EAGAIN; 452 453 spin_lock(&server->req_lock); 454 if ((flags & CIFS_TIMEOUT_MASK) == CIFS_NON_BLOCKING) { 455 /* oplock breaks must not be held up */ 456 server->in_flight++; 457 if (server->in_flight > server->max_in_flight) 458 server->max_in_flight = server->in_flight; 459 *credits -= 1; 460 *instance = server->reconnect_instance; 461 scredits = *credits; 462 in_flight = server->in_flight; 463 spin_unlock(&server->req_lock); 464 465 trace_smb3_nblk_credits(server->current_mid, 466 server->conn_id, server->hostname, scredits, -1, in_flight); 467 cifs_dbg(FYI, "%s: remove %u credits total=%d\n", 468 __func__, 1, scredits); 469 470 return 0; 471 } 472 473 while (1) { 474 spin_unlock(&server->req_lock); 475 476 spin_lock(&server->srv_lock); 477 if (server->tcpStatus == CifsExiting) { 478 spin_unlock(&server->srv_lock); 479 return -ENOENT; 480 } 481 spin_unlock(&server->srv_lock); 482 483 spin_lock(&server->req_lock); 484 if (*credits < num_credits) { 485 scredits = *credits; 486 spin_unlock(&server->req_lock); 487 488 cifs_num_waiters_inc(server); 489 rc = wait_event_killable_timeout(server->request_q, 490 has_credits(server, credits, num_credits), t); 491 cifs_num_waiters_dec(server); 492 if (!rc) { 493 spin_lock(&server->req_lock); 494 scredits = *credits; 495 in_flight = server->in_flight; 496 spin_unlock(&server->req_lock); 497 498 trace_smb3_credit_timeout(server->current_mid, 499 server->conn_id, server->hostname, scredits, 500 num_credits, in_flight); 501 cifs_server_dbg(VFS, "wait timed out after %d ms\n", 502 timeout); 503 return -EBUSY; 504 } 505 if (rc == -ERESTARTSYS) 506 return -ERESTARTSYS; 507 spin_lock(&server->req_lock); 508 } else { 509 /* 510 * For normal commands, reserve the last MAX_COMPOUND 511 * credits to compound requests. 512 * Otherwise these compounds could be permanently 513 * starved for credits by single-credit requests. 514 * 515 * To prevent spinning CPU, block this thread until 516 * there are >MAX_COMPOUND credits available. 517 * But only do this is we already have a lot of 518 * credits in flight to avoid triggering this check 519 * for servers that are slow to hand out credits on 520 * new sessions. 521 */ 522 if (!optype && num_credits == 1 && 523 server->in_flight > 2 * MAX_COMPOUND && 524 *credits <= MAX_COMPOUND) { 525 spin_unlock(&server->req_lock); 526 527 cifs_num_waiters_inc(server); 528 rc = wait_event_killable_timeout( 529 server->request_q, 530 has_credits(server, credits, 531 MAX_COMPOUND + 1), 532 t); 533 cifs_num_waiters_dec(server); 534 if (!rc) { 535 spin_lock(&server->req_lock); 536 scredits = *credits; 537 in_flight = server->in_flight; 538 spin_unlock(&server->req_lock); 539 540 trace_smb3_credit_timeout( 541 server->current_mid, 542 server->conn_id, server->hostname, 543 scredits, num_credits, in_flight); 544 cifs_server_dbg(VFS, "wait timed out after %d ms\n", 545 timeout); 546 return -EBUSY; 547 } 548 if (rc == -ERESTARTSYS) 549 return -ERESTARTSYS; 550 spin_lock(&server->req_lock); 551 continue; 552 } 553 554 /* 555 * Can not count locking commands against total 556 * as they are allowed to block on server. 557 */ 558 559 /* update # of requests on the wire to server */ 560 if ((flags & CIFS_TIMEOUT_MASK) != CIFS_BLOCKING_OP) { 561 *credits -= num_credits; 562 server->in_flight += num_credits; 563 if (server->in_flight > server->max_in_flight) 564 server->max_in_flight = server->in_flight; 565 *instance = server->reconnect_instance; 566 } 567 scredits = *credits; 568 in_flight = server->in_flight; 569 spin_unlock(&server->req_lock); 570 571 trace_smb3_waitff_credits(server->current_mid, 572 server->conn_id, server->hostname, scredits, 573 -(num_credits), in_flight); 574 cifs_dbg(FYI, "%s: remove %u credits total=%d\n", 575 __func__, num_credits, scredits); 576 break; 577 } 578 } 579 return 0; 580 } 581 582 int wait_for_free_request(struct TCP_Server_Info *server, const int flags, 583 unsigned int *instance) 584 { 585 return wait_for_free_credits(server, 1, -1, flags, 586 instance); 587 } 588 589 static int 590 wait_for_compound_request(struct TCP_Server_Info *server, int num, 591 const int flags, unsigned int *instance) 592 { 593 int *credits; 594 int scredits, in_flight; 595 596 credits = server->ops->get_credits_field(server, flags & CIFS_OP_MASK); 597 598 spin_lock(&server->req_lock); 599 scredits = *credits; 600 in_flight = server->in_flight; 601 602 if (*credits < num) { 603 /* 604 * If the server is tight on resources or just gives us less 605 * credits for other reasons (e.g. requests are coming out of 606 * order and the server delays granting more credits until it 607 * processes a missing mid) and we exhausted most available 608 * credits there may be situations when we try to send 609 * a compound request but we don't have enough credits. At this 610 * point the client needs to decide if it should wait for 611 * additional credits or fail the request. If at least one 612 * request is in flight there is a high probability that the 613 * server will return enough credits to satisfy this compound 614 * request. 615 * 616 * Return immediately if no requests in flight since we will be 617 * stuck on waiting for credits. 618 */ 619 if (server->in_flight == 0) { 620 spin_unlock(&server->req_lock); 621 trace_smb3_insufficient_credits(server->current_mid, 622 server->conn_id, server->hostname, scredits, 623 num, in_flight); 624 cifs_dbg(FYI, "%s: %d requests in flight, needed %d total=%d\n", 625 __func__, in_flight, num, scredits); 626 return -EDEADLK; 627 } 628 } 629 spin_unlock(&server->req_lock); 630 631 return wait_for_free_credits(server, num, 60000, flags, 632 instance); 633 } 634 635 int 636 cifs_wait_mtu_credits(struct TCP_Server_Info *server, size_t size, 637 size_t *num, struct cifs_credits *credits) 638 { 639 *num = size; 640 credits->value = 0; 641 credits->instance = server->reconnect_instance; 642 return 0; 643 } 644 645 int wait_for_response(struct TCP_Server_Info *server, struct mid_q_entry *mid) 646 { 647 unsigned int sleep_state = TASK_KILLABLE; 648 int error; 649 650 if (mid->sr_flags & CIFS_INTERRUPTIBLE_WAIT) 651 sleep_state = TASK_INTERRUPTIBLE; 652 653 error = wait_event_state(server->response_q, 654 mid->mid_state != MID_REQUEST_SUBMITTED && 655 mid->mid_state != MID_RESPONSE_RECEIVED, 656 (sleep_state | TASK_FREEZABLE_UNSAFE)); 657 if (error < 0) 658 return -ERESTARTSYS; 659 660 return 0; 661 } 662 663 static void cond_sock_shutdown(struct TCP_Server_Info *server) 664 { 665 bool shutdown; 666 667 lockdep_assert_held(&server->_srv_mutex); 668 669 spin_lock(&server->srv_lock); 670 /* 671 * No need to check status, ->need_sock_shutdown is only set when it's 672 * CifsNeedReconnect. 673 */ 674 shutdown = server->need_sock_shutdown && server->ssocket; 675 server->need_sock_shutdown = false; 676 spin_unlock(&server->srv_lock); 677 678 if (shutdown) 679 /* Don't release it here/yet! */ 680 kernel_sock_shutdown(server->ssocket, SHUT_RDWR); 681 } 682 683 /* 684 * Send a SMB request and set the callback function in the mid to handle 685 * the result. Caller is responsible for dealing with timeouts. 686 */ 687 int 688 cifs_call_async(struct TCP_Server_Info *server, struct smb_rqst *rqst, 689 mid_receive_t receive, mid_callback_t callback, 690 mid_handle_t handle, void *cbdata, const int flags, 691 const struct cifs_credits *exist_credits) 692 { 693 int rc; 694 struct mid_q_entry *mid; 695 struct cifs_credits credits = { .value = 0, .instance = 0 }; 696 unsigned int instance; 697 int optype; 698 699 optype = flags & CIFS_OP_MASK; 700 701 if ((flags & CIFS_HAS_CREDITS) == 0) { 702 rc = wait_for_free_request(server, flags, &instance); 703 if (rc) 704 return rc; 705 credits.value = 1; 706 credits.instance = instance; 707 } else 708 instance = exist_credits->instance; 709 710 cifs_server_lock(server); 711 712 /* 713 * We can't use credits obtained from the previous session to send this 714 * request. Check if there were reconnects after we obtained credits and 715 * return -EAGAIN in such cases to let callers handle it. 716 */ 717 if (instance != server->reconnect_instance) { 718 cifs_server_unlock(server); 719 add_credits_and_wake_if(server, &credits, optype); 720 return -EAGAIN; 721 } 722 723 mid = server->ops->setup_async_request(server, rqst); 724 if (IS_ERR(mid)) { 725 cifs_server_unlock(server); 726 add_credits_and_wake_if(server, &credits, optype); 727 return PTR_ERR(mid); 728 } 729 730 mid->sr_flags = flags; 731 mid->receive = receive; 732 mid->callback = callback; 733 mid->callback_data = cbdata; 734 mid->handle = handle; 735 mid->mid_state = MID_REQUEST_SUBMITTED; 736 737 /* put it on the pending_mid_q */ 738 spin_lock(&server->mid_queue_lock); 739 list_add_tail(&mid->qhead, &server->pending_mid_q); 740 spin_unlock(&server->mid_queue_lock); 741 742 /* 743 * Need to store the time in mid before calling I/O. For call_async, 744 * I/O response may come back and free the mid entry on another thread. 745 */ 746 cifs_save_when_sent(mid); 747 rc = smb_send_rqst(server, 1, rqst, flags); 748 749 if (rc < 0) { 750 revert_current_mid(server, mid->credits); 751 server->sequence_number -= 2; 752 delete_mid(server, mid); 753 cond_sock_shutdown(server); 754 } 755 756 cifs_server_unlock(server); 757 758 if (rc == 0) 759 return 0; 760 761 add_credits_and_wake_if(server, &credits, optype); 762 return rc; 763 } 764 765 int cifs_sync_mid_result(struct mid_q_entry *mid, struct TCP_Server_Info *server) 766 { 767 int rc = 0; 768 769 cifs_dbg(FYI, "%s: cmd=%d mid=%llu state=%d\n", 770 __func__, le16_to_cpu(mid->command), mid->mid, mid->mid_state); 771 772 spin_lock(&server->mid_queue_lock); 773 switch (mid->mid_state) { 774 case MID_RESPONSE_READY: 775 spin_unlock(&server->mid_queue_lock); 776 return rc; 777 case MID_RETRY_NEEDED: 778 rc = -EAGAIN; 779 break; 780 case MID_RESPONSE_MALFORMED: 781 rc = smb_EIO(smb_eio_trace_rx_sync_mid_malformed); 782 break; 783 case MID_SHUTDOWN: 784 rc = -EHOSTDOWN; 785 break; 786 case MID_RC: 787 rc = mid->mid_rc; 788 break; 789 default: 790 if (mid->deleted_from_q == false) { 791 list_del_init(&mid->qhead); 792 mid->deleted_from_q = true; 793 } 794 spin_unlock(&server->mid_queue_lock); 795 cifs_server_dbg(VFS, "%s: invalid mid state mid=%llu state=%d\n", 796 __func__, mid->mid, mid->mid_state); 797 rc = smb_EIO1(smb_eio_trace_rx_sync_mid_invalid, mid->mid_state); 798 goto sync_mid_done; 799 } 800 spin_unlock(&server->mid_queue_lock); 801 802 sync_mid_done: 803 release_mid(server, mid); 804 return rc; 805 } 806 807 static void 808 cifs_compound_callback(struct TCP_Server_Info *server, struct mid_q_entry *mid) 809 { 810 struct cifs_credits credits = { 811 .value = server->ops->get_credits(mid), 812 .instance = server->reconnect_instance, 813 }; 814 815 add_credits(server, &credits, mid->optype); 816 817 if (mid->mid_state == MID_RESPONSE_RECEIVED) 818 mid->mid_state = MID_RESPONSE_READY; 819 } 820 821 static void 822 cifs_compound_last_callback(struct TCP_Server_Info *server, struct mid_q_entry *mid) 823 { 824 cifs_compound_callback(server, mid); 825 cifs_wake_up_task(server, mid); 826 } 827 828 static void 829 cifs_cancelled_callback(struct TCP_Server_Info *server, struct mid_q_entry *mid) 830 { 831 cifs_compound_callback(server, mid); 832 release_mid(server, mid); 833 } 834 835 static void 836 cifs_mark_compound_mids_cancelled(struct mid_q_entry **mid, int count) 837 { 838 int i; 839 840 for (i = 0; i < count; i++) { 841 spin_lock(&mid[i]->mid_lock); 842 mid[i]->wait_cancelled = true; 843 spin_unlock(&mid[i]->mid_lock); 844 } 845 } 846 847 /* 848 * cifs_pick_channel - pick an eligible channel for network operations 849 * 850 * @ses: session reference 851 * 852 * Select an eligible channel (not terminating and not marked as needing 853 * reconnect), preferring the least loaded one. If no eligible channel is 854 * found, fall back to the primary channel (index 0). 855 * 856 * Return: TCP_Server_Info pointer for the chosen channel, or NULL if @ses is 857 * NULL. 858 */ 859 struct TCP_Server_Info *cifs_pick_channel(struct cifs_ses *ses) 860 { 861 uint index = 0; 862 unsigned int min_in_flight = UINT_MAX; 863 struct TCP_Server_Info *server = NULL; 864 int i, start, cur; 865 866 if (!ses) 867 return NULL; 868 869 spin_lock(&ses->chan_lock); 870 start = atomic_inc_return(&ses->chan_seq); 871 for (i = 0; i < ses->chan_count; i++) { 872 cur = (start + i) % ses->chan_count; 873 server = ses->chans[cur].server; 874 if (!server || server->terminate) 875 continue; 876 877 if (CIFS_CHAN_NEEDS_RECONNECT(ses, cur)) 878 continue; 879 880 /* 881 * strictly speaking, we should pick up req_lock to read 882 * server->in_flight. But it shouldn't matter much here if we 883 * race while reading this data. The worst that can happen is 884 * that we could use a channel that's not least loaded. Avoiding 885 * taking the lock could help reduce wait time, which is 886 * important for this function 887 */ 888 if (server->in_flight < min_in_flight) { 889 min_in_flight = server->in_flight; 890 index = cur; 891 } 892 } 893 894 server = ses->chans[index].server; 895 spin_unlock(&ses->chan_lock); 896 897 return server; 898 } 899 900 int 901 compound_send_recv(const unsigned int xid, struct cifs_ses *ses, 902 struct TCP_Server_Info *server, 903 const int flags, const int num_rqst, struct smb_rqst *rqst, 904 int *resp_buf_type, struct kvec *resp_iov) 905 { 906 int i, j, optype, rc = 0; 907 int num_processed = 0; 908 struct mid_q_entry *mid[MAX_COMPOUND]; 909 bool cancelled_mid[MAX_COMPOUND] = {false}; 910 struct cifs_credits credits[MAX_COMPOUND] = { 911 { .value = 0, .instance = 0 } 912 }; 913 unsigned int instance; 914 char *buf; 915 916 optype = flags & CIFS_OP_MASK; 917 918 for (i = 0; i < num_rqst; i++) 919 resp_buf_type[i] = CIFS_NO_BUFFER; /* no response buf yet */ 920 921 if (!ses || !ses->server || !server) { 922 cifs_dbg(VFS, "Null session\n"); 923 return smb_EIO(smb_eio_trace_null_pointers); 924 } 925 926 spin_lock(&server->srv_lock); 927 if (server->tcpStatus == CifsExiting) { 928 spin_unlock(&server->srv_lock); 929 return -ENOENT; 930 } 931 spin_unlock(&server->srv_lock); 932 933 /* 934 * Wait for all the requests to become available. 935 * This approach still leaves the possibility to be stuck waiting for 936 * credits if the server doesn't grant credits to the outstanding 937 * requests and if the client is completely idle, not generating any 938 * other requests. 939 * This can be handled by the eventual session reconnect. 940 */ 941 rc = wait_for_compound_request(server, num_rqst, flags, 942 &instance); 943 if (rc) 944 return rc; 945 946 for (i = 0; i < num_rqst; i++) { 947 credits[i].value = 1; 948 credits[i].instance = instance; 949 } 950 951 /* 952 * Make sure that we sign in the same order that we send on this socket 953 * and avoid races inside tcp sendmsg code that could cause corruption 954 * of smb data. 955 */ 956 957 cifs_server_lock(server); 958 959 /* 960 * All the parts of the compound chain belong obtained credits from the 961 * same session. We can not use credits obtained from the previous 962 * session to send this request. Check if there were reconnects after 963 * we obtained credits and return -EAGAIN in such cases to let callers 964 * handle it. 965 */ 966 if (instance != server->reconnect_instance) { 967 cifs_server_unlock(server); 968 for (j = 0; j < num_rqst; j++) 969 add_credits(server, &credits[j], optype); 970 return -EAGAIN; 971 } 972 973 for (i = 0; i < num_rqst; i++) { 974 mid[i] = server->ops->setup_request(ses, server, &rqst[i]); 975 if (IS_ERR(mid[i])) { 976 revert_current_mid(server, i); 977 for (j = 0; j < i; j++) 978 delete_mid(server, mid[j]); 979 cifs_server_unlock(server); 980 981 /* Update # of requests on wire to server */ 982 for (j = 0; j < num_rqst; j++) 983 add_credits(server, &credits[j], optype); 984 return PTR_ERR(mid[i]); 985 } 986 987 mid[i]->sr_flags = flags; 988 mid[i]->mid_state = MID_REQUEST_SUBMITTED; 989 mid[i]->optype = optype; 990 /* 991 * Invoke callback for every part of the compound chain 992 * to calculate credits properly. Wake up this thread only when 993 * the last element is received. 994 */ 995 if (i < num_rqst - 1) 996 mid[i]->callback = cifs_compound_callback; 997 else 998 mid[i]->callback = cifs_compound_last_callback; 999 } 1000 rc = smb_send_rqst(server, num_rqst, rqst, flags); 1001 1002 for (i = 0; i < num_rqst; i++) 1003 cifs_save_when_sent(mid[i]); 1004 1005 if (rc < 0) { 1006 revert_current_mid(server, num_rqst); 1007 server->sequence_number -= 2; 1008 for (i = 0; i < num_rqst; i++) { 1009 delete_mid(server, mid[i]); 1010 cancelled_mid[i] = true; 1011 } 1012 cond_sock_shutdown(server); 1013 } 1014 1015 cifs_server_unlock(server); 1016 1017 /* 1018 * If sending failed for some reason or it is an oplock break that we 1019 * will not receive a response to - return credits back 1020 */ 1021 if (rc < 0 || (flags & CIFS_NO_SRV_RSP)) { 1022 for (i = 0; i < num_rqst; i++) 1023 add_credits(server, &credits[i], optype); 1024 goto out; 1025 } 1026 1027 /* 1028 * At this point the request is passed to the network stack - we assume 1029 * that any credits taken from the server structure on the client have 1030 * been spent and we can't return them back. Once we receive responses 1031 * we will collect credits granted by the server in the mid callbacks 1032 * and add those credits to the server structure. 1033 */ 1034 1035 /* 1036 * Compounding is never used during session establish. 1037 */ 1038 spin_lock(&ses->ses_lock); 1039 if ((ses->ses_status == SES_NEW) || (optype & CIFS_NEG_OP) || (optype & CIFS_SESS_OP)) { 1040 spin_unlock(&ses->ses_lock); 1041 1042 if (WARN_ON_ONCE(num_rqst != 1 || !resp_iov)) 1043 return -EINVAL; 1044 1045 cifs_server_lock(server); 1046 smb311_update_preauth_hash(ses, server, rqst[0].rq_iov, rqst[0].rq_nvec); 1047 cifs_server_unlock(server); 1048 1049 spin_lock(&ses->ses_lock); 1050 } 1051 spin_unlock(&ses->ses_lock); 1052 1053 for (i = 0; i < num_rqst; i++) { 1054 rc = wait_for_response(server, mid[i]); 1055 if (rc != 0) 1056 break; 1057 } 1058 if (rc != 0) { 1059 /* 1060 * A completed CREATE earlier in the compound chain may have 1061 * opened a remote handle even though a later wait was 1062 * interrupted. Mark it cancelled so __release_mid() invokes 1063 * the existing unmatched-open cleanup. 1064 */ 1065 cifs_mark_compound_mids_cancelled(mid, i); 1066 1067 for (; i < num_rqst; i++) { 1068 cifs_server_dbg(FYI, "Cancelling wait for mid %llu cmd: %d\n", 1069 mid[i]->mid, le16_to_cpu(mid[i]->command)); 1070 send_cancel(ses, server, &rqst[i], mid[i], xid); 1071 spin_lock(&mid[i]->mid_lock); 1072 mid[i]->wait_cancelled = true; 1073 if (mid[i]->mid_state == MID_REQUEST_SUBMITTED || 1074 mid[i]->mid_state == MID_RESPONSE_RECEIVED) { 1075 mid[i]->callback = cifs_cancelled_callback; 1076 cancelled_mid[i] = true; 1077 credits[i].value = 0; 1078 } 1079 spin_unlock(&mid[i]->mid_lock); 1080 } 1081 } 1082 1083 for (i = 0; i < num_rqst; i++) { 1084 if (rc < 0) 1085 goto out; 1086 1087 rc = cifs_sync_mid_result(mid[i], server); 1088 if (rc != 0) { 1089 /* 1090 * A previous CREATE may have completed before this 1091 * response failed. Mark it cancelled so its remote 1092 * handle is closed when the mid is released. 1093 */ 1094 cifs_mark_compound_mids_cancelled(mid, i); 1095 /* Keep their response buffers for cancelled-mid cleanup. */ 1096 num_processed = 0; 1097 /* mark this mid as cancelled to not free it below */ 1098 cancelled_mid[i] = true; 1099 goto out; 1100 } 1101 1102 if (!mid[i]->resp_buf || 1103 mid[i]->mid_state != MID_RESPONSE_READY) { 1104 rc = smb_EIO1(smb_eio_trace_rx_mid_unready, mid[i]->mid_state); 1105 cifs_dbg(FYI, "Bad MID state?\n"); 1106 cifs_mark_compound_mids_cancelled(mid, i); 1107 num_processed = 0; 1108 goto out; 1109 } 1110 1111 rc = server->ops->check_receive(mid[i], server, 1112 flags & CIFS_LOG_ERROR); 1113 num_processed = i + 1; 1114 } 1115 1116 out: 1117 /* 1118 * Delay moving response buffers out of their mids until response 1119 * synchronization completes. This lets cancelled-mid cleanup inspect 1120 * an earlier CREATE response if a later MID fails. 1121 */ 1122 if (resp_iov) { 1123 for (i = 0; i < num_processed; i++) { 1124 buf = (char *)mid[i]->resp_buf; 1125 resp_iov[i].iov_base = buf; 1126 resp_iov[i].iov_len = mid[i]->resp_buf_size; 1127 1128 if (mid[i]->large_buf) 1129 resp_buf_type[i] = CIFS_LARGE_BUFFER; 1130 else 1131 resp_buf_type[i] = CIFS_SMALL_BUFFER; 1132 1133 /* mark it so buf will not be freed by delete_mid */ 1134 if ((flags & CIFS_NO_RSP_BUF) == 0) 1135 mid[i]->resp_buf = NULL; 1136 } 1137 } 1138 1139 /* 1140 * Compounding is never used during session establish. 1141 */ 1142 if (num_processed == num_rqst) { 1143 spin_lock(&ses->ses_lock); 1144 if ((ses->ses_status == SES_NEW) || (optype & CIFS_NEG_OP) || (optype & CIFS_SESS_OP)) { 1145 struct kvec iov = { 1146 .iov_base = resp_iov[0].iov_base, 1147 .iov_len = resp_iov[0].iov_len 1148 }; 1149 spin_unlock(&ses->ses_lock); 1150 cifs_server_lock(server); 1151 smb311_update_preauth_hash(ses, server, &iov, 1); 1152 cifs_server_unlock(server); 1153 spin_lock(&ses->ses_lock); 1154 } 1155 spin_unlock(&ses->ses_lock); 1156 } 1157 1158 /* 1159 * This will dequeue all mids. After this it is important that the 1160 * demultiplex_thread will not process any of these mids any further. 1161 * This is prevented above by using a noop callback that will not 1162 * wake this thread except for the very last PDU. 1163 */ 1164 for (i = 0; i < num_rqst; i++) { 1165 if (!cancelled_mid[i]) 1166 delete_mid(server, mid[i]); 1167 } 1168 1169 return rc; 1170 } 1171 1172 int 1173 cifs_send_recv(const unsigned int xid, struct cifs_ses *ses, 1174 struct TCP_Server_Info *server, 1175 struct smb_rqst *rqst, int *resp_buf_type, const int flags, 1176 struct kvec *resp_iov) 1177 { 1178 return compound_send_recv(xid, ses, server, flags, 1, 1179 rqst, resp_buf_type, resp_iov); 1180 } 1181 1182 1183 /* 1184 * Discard any remaining data in the current SMB. To do this, we borrow the 1185 * current bigbuf. 1186 */ 1187 int 1188 cifs_discard_remaining_data(struct TCP_Server_Info *server) 1189 { 1190 unsigned int rfclen = server->pdu_size; 1191 size_t remaining = rfclen - server->total_read; 1192 1193 while (remaining > 0) { 1194 ssize_t length; 1195 1196 length = cifs_discard_from_socket(server, 1197 min_t(size_t, remaining, 1198 CIFSMaxBufSize + MAX_HEADER_SIZE(server))); 1199 if (length < 0) 1200 return length; 1201 server->total_read += length; 1202 remaining -= length; 1203 } 1204 1205 return 0; 1206 } 1207 1208 static int 1209 __cifs_readv_discard(struct TCP_Server_Info *server, struct mid_q_entry *mid, 1210 bool malformed) 1211 { 1212 int length; 1213 1214 length = cifs_discard_remaining_data(server); 1215 dequeue_mid(server, mid, malformed); 1216 mid->resp_buf = server->smallbuf; 1217 server->smallbuf = NULL; 1218 return length; 1219 } 1220 1221 static int 1222 cifs_readv_discard(struct TCP_Server_Info *server, struct mid_q_entry *mid) 1223 { 1224 struct cifs_io_subrequest *rdata = mid->callback_data; 1225 1226 return __cifs_readv_discard(server, mid, rdata->result); 1227 } 1228 1229 int 1230 cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid) 1231 { 1232 int length, len; 1233 unsigned int data_offset, data_len, end_off; 1234 struct cifs_io_subrequest *rdata = mid->callback_data; 1235 char *buf = server->smallbuf; 1236 unsigned int buflen = server->pdu_size; 1237 bool use_rdma_mr = false; 1238 1239 cifs_dbg(FYI, "%s: mid=%llu offset=%llu bytes=%zu\n", 1240 __func__, mid->mid, rdata->subreq.start, rdata->subreq.len); 1241 1242 /* 1243 * read the rest of READ_RSP header (sans Data array), or whatever we 1244 * can if there's not enough data. At this point, we've read down to 1245 * the Mid. 1246 */ 1247 len = min_t(unsigned int, buflen, server->vals->read_rsp_size) - 1248 HEADER_SIZE(server) + 1; 1249 1250 length = cifs_read_from_socket(server, 1251 buf + HEADER_SIZE(server) - 1, len); 1252 if (length < 0) 1253 return length; 1254 server->total_read += length; 1255 1256 if (server->ops->is_session_expired && 1257 server->ops->is_session_expired(buf)) { 1258 cifs_reconnect(server, true); 1259 return -1; 1260 } 1261 1262 if (server->ops->is_status_pending && 1263 server->ops->is_status_pending(buf, server)) { 1264 cifs_discard_remaining_data(server); 1265 return -1; 1266 } 1267 1268 /* set up first two iov for signature check and to get credits */ 1269 rdata->iov[0].iov_base = buf; 1270 rdata->iov[0].iov_len = server->total_read; 1271 cifs_dbg(FYI, "0: iov_base=%p iov_len=%zu\n", 1272 rdata->iov[0].iov_base, rdata->iov[0].iov_len); 1273 1274 /* Was the SMB read successful? */ 1275 rdata->result = server->ops->map_error(buf, false); 1276 if (rdata->result != 0) { 1277 cifs_dbg(FYI, "%s: server returned error %d\n", 1278 __func__, rdata->result); 1279 /* normal error on read response */ 1280 return __cifs_readv_discard(server, mid, false); 1281 } 1282 1283 /* Is there enough to get to the rest of the READ_RSP header? */ 1284 if (server->total_read < server->vals->read_rsp_size) { 1285 cifs_dbg(FYI, "%s: server returned short header. got=%u expected=%zu\n", 1286 __func__, server->total_read, 1287 server->vals->read_rsp_size); 1288 rdata->result = smb_EIO2(smb_eio_trace_read_rsp_short, 1289 server->total_read, server->vals->read_rsp_size); 1290 return cifs_readv_discard(server, mid); 1291 } 1292 1293 data_offset = server->ops->read_data_offset(buf); 1294 if (data_offset < server->total_read) { 1295 /* 1296 * win2k8 sometimes sends an offset of 0 when the read 1297 * is beyond the EOF. Treat it as if the data starts just after 1298 * the header. 1299 */ 1300 cifs_dbg(FYI, "%s: data offset (%u) inside read response header\n", 1301 __func__, data_offset); 1302 data_offset = server->total_read; 1303 } else if (data_offset > MAX_CIFS_SMALL_BUFFER_SIZE) { 1304 /* data_offset is beyond the end of smallbuf */ 1305 cifs_dbg(FYI, "%s: data offset (%u) beyond end of smallbuf\n", 1306 __func__, data_offset); 1307 rdata->result = smb_EIO1(smb_eio_trace_read_overlarge, 1308 data_offset); 1309 return cifs_readv_discard(server, mid); 1310 } 1311 1312 cifs_dbg(FYI, "%s: total_read=%u data_offset=%u\n", 1313 __func__, server->total_read, data_offset); 1314 1315 len = data_offset - server->total_read; 1316 if (len > 0) { 1317 /* read any junk before data into the rest of smallbuf */ 1318 length = cifs_read_from_socket(server, 1319 buf + server->total_read, len); 1320 if (length < 0) 1321 return length; 1322 server->total_read += length; 1323 rdata->iov[0].iov_len = server->total_read; 1324 } 1325 1326 /* how much data is in the response? */ 1327 #ifdef CONFIG_CIFS_SMB_DIRECT 1328 use_rdma_mr = rdata->mr; 1329 #endif 1330 data_len = server->ops->read_data_length(buf, use_rdma_mr); 1331 if (!use_rdma_mr) { 1332 if (check_add_overflow(data_offset, data_len, &end_off) || 1333 end_off > buflen) { 1334 /* data_len is corrupt -- discard frame */ 1335 rdata->result = smb_EIO2(smb_eio_trace_read_rsp_malformed, 1336 end_off, buflen); 1337 return cifs_readv_discard(server, mid); 1338 } 1339 } 1340 1341 #ifdef CONFIG_CIFS_SMB_DIRECT 1342 if (rdata->mr) 1343 length = data_len; /* An RDMA read is already done. */ 1344 else 1345 #endif 1346 length = cifs_read_iter_from_socket(server, &rdata->subreq.io_iter, 1347 data_len); 1348 if (length > 0) 1349 rdata->got_bytes += length; 1350 server->total_read += length; 1351 1352 cifs_dbg(FYI, "total_read=%u buflen=%u remaining=%u\n", 1353 server->total_read, buflen, data_len); 1354 1355 /* discard anything left over */ 1356 if (server->total_read < buflen) 1357 return cifs_readv_discard(server, mid); 1358 1359 dequeue_mid(server, mid, false); 1360 mid->resp_buf = server->smallbuf; 1361 server->smallbuf = NULL; 1362 return length; 1363 } 1364