aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/cifs/cifsglob.h1
-rw-r--r--fs/cifs/connect.c1
-rw-r--r--fs/cifs/smb2transport.c2
-rw-r--r--fs/cifs/transport.c2
4 files changed, 4 insertions, 2 deletions
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
index 5c1568ccd67d..cb950a5fa078 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -1376,6 +1376,7 @@ struct mid_q_entry {
1376 mid_handle_t *handle; /* call handle mid callback */ 1376 mid_handle_t *handle; /* call handle mid callback */
1377 void *callback_data; /* general purpose pointer for callback */ 1377 void *callback_data; /* general purpose pointer for callback */
1378 void *resp_buf; /* pointer to received SMB header */ 1378 void *resp_buf; /* pointer to received SMB header */
1379 unsigned int resp_buf_size;
1379 int mid_state; /* wish this were enum but can not pass to wait_event */ 1380 int mid_state; /* wish this were enum but can not pass to wait_event */
1380 unsigned int mid_flags; 1381 unsigned int mid_flags;
1381 __le16 command; /* smb command code */ 1382 __le16 command; /* smb command code */
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 48012a0addf1..e8830f076a7f 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -928,6 +928,7 @@ cifs_demultiplex_thread(void *p)
928 928
929 server->lstrp = jiffies; 929 server->lstrp = jiffies;
930 if (mid_entry != NULL) { 930 if (mid_entry != NULL) {
931 mid_entry->resp_buf_size = server->pdu_size;
931 if ((mid_entry->mid_flags & MID_WAIT_CANCELLED) && 932 if ((mid_entry->mid_flags & MID_WAIT_CANCELLED) &&
932 mid_entry->mid_state == MID_RESPONSE_RECEIVED && 933 mid_entry->mid_state == MID_RESPONSE_RECEIVED &&
933 server->ops->handle_cancelled_mid) 934 server->ops->handle_cancelled_mid)
diff --git a/fs/cifs/smb2transport.c b/fs/cifs/smb2transport.c
index bf49cb73b9e6..8806f3f76c1d 100644
--- a/fs/cifs/smb2transport.c
+++ b/fs/cifs/smb2transport.c
@@ -604,7 +604,7 @@ int
604smb2_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server, 604smb2_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server,
605 bool log_error) 605 bool log_error)
606{ 606{
607 unsigned int len = get_rfc1002_length(mid->resp_buf); 607 unsigned int len = mid->resp_buf_size;
608 struct kvec iov[2]; 608 struct kvec iov[2];
609 struct smb_rqst rqst = { .rq_iov = iov, 609 struct smb_rqst rqst = { .rq_iov = iov,
610 .rq_nvec = 2 }; 610 .rq_nvec = 2 };
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
index 279718dcb2ed..8f6f25918229 100644
--- a/fs/cifs/transport.c
+++ b/fs/cifs/transport.c
@@ -790,7 +790,7 @@ cifs_send_recv(const unsigned int xid, struct cifs_ses *ses,
790 790
791 buf = (char *)midQ->resp_buf; 791 buf = (char *)midQ->resp_buf;
792 resp_iov->iov_base = buf; 792 resp_iov->iov_base = buf;
793 resp_iov->iov_len = get_rfc1002_length(buf) + 793 resp_iov->iov_len = midQ->resp_buf_size +
794 ses->server->vals->header_preamble_size; 794 ses->server->vals->header_preamble_size;
795 if (midQ->large_buf) 795 if (midQ->large_buf)
796 *resp_buf_type = CIFS_LARGE_BUFFER; 796 *resp_buf_type = CIFS_LARGE_BUFFER;