xref: /linux/fs/smb/client/transport.c (revision 32543b09681a142ff1803d87609060f491355346)
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