diff options
-rw-r--r-- | fs/cifs/cifsglob.h | 1 | ||||
-rw-r--r-- | fs/cifs/connect.c | 1 | ||||
-rw-r--r-- | fs/cifs/smb2transport.c | 2 | ||||
-rw-r--r-- | fs/cifs/transport.c | 2 |
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 | |||
604 | smb2_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server, | 604 | smb2_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; |