cifs: add pdu_size to the TCP_Server_Info structure

and get rid of some get_rfc1002_length() in smb2

Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <smfrench@gmail.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>

authored by Ronnie Sahlberg and committed by Steve French 2e96467d 5100d8a3

+9 -6
+2
fs/cifs/cifsglob.h
··· 665 struct delayed_work echo; /* echo ping workqueue job */ 666 char *smallbuf; /* pointer to current "small" buffer */ 667 char *bigbuf; /* pointer to current "big" buffer */ 668 unsigned int total_read; /* total amount of data read in this pass */ 669 #ifdef CONFIG_CIFS_FSCACHE 670 struct fscache_cookie *fscache; /* client index cache cookie */
··· 665 struct delayed_work echo; /* echo ping workqueue job */ 666 char *smallbuf; /* pointer to current "small" buffer */ 667 char *bigbuf; /* pointer to current "big" buffer */ 668 + /* Total size of this PDU. Only valid from cifs_demultiplex_thread */ 669 + unsigned int pdu_size; 670 unsigned int total_read; /* total amount of data read in this pass */ 671 #ifdef CONFIG_CIFS_FSCACHE 672 struct fscache_cookie *fscache; /* client index cache cookie */
+1 -1
fs/cifs/cifssmb.c
··· 1456 unsigned int data_offset, data_len; 1457 struct cifs_readdata *rdata = mid->callback_data; 1458 char *buf = server->smallbuf; 1459 - unsigned int buflen = get_rfc1002_length(buf) + 1460 server->vals->header_preamble_size; 1461 bool use_rdma_mr = false; 1462
··· 1456 unsigned int data_offset, data_len; 1457 struct cifs_readdata *rdata = mid->callback_data; 1458 char *buf = server->smallbuf; 1459 + unsigned int buflen = server->pdu_size + 1460 server->vals->header_preamble_size; 1461 bool use_rdma_mr = false; 1462
+2 -1
fs/cifs/connect.c
··· 772 { 773 int length; 774 char *buf = server->smallbuf; 775 - unsigned int pdu_length = get_rfc1002_length(buf); 776 777 /* make sure this will fit in a large buffer */ 778 if (pdu_length > CIFSMaxBufSize + MAX_HEADER_SIZE(server) - ··· 881 * so we can now interpret the length field. 882 */ 883 pdu_length = get_rfc1002_length(buf); 884 885 cifs_dbg(FYI, "RFC1002 header 0x%x\n", pdu_length); 886 if (!is_smb_response(server, buf[0]))
··· 772 { 773 int length; 774 char *buf = server->smallbuf; 775 + unsigned int pdu_length = server->pdu_size; 776 777 /* make sure this will fit in a large buffer */ 778 if (pdu_length > CIFSMaxBufSize + MAX_HEADER_SIZE(server) - ··· 881 * so we can now interpret the length field. 882 */ 883 pdu_length = get_rfc1002_length(buf); 884 + server->pdu_size = pdu_length; 885 886 cifs_dbg(FYI, "RFC1002 header 0x%x\n", pdu_length); 887 if (!is_smb_response(server, buf[0]))
+4 -4
fs/cifs/smb2ops.c
··· 2550 unsigned int npages; 2551 struct page **pages; 2552 unsigned int len; 2553 - unsigned int buflen = get_rfc1002_length(buf) + server->vals->header_preamble_size; 2554 int rc; 2555 int i = 0; 2556 ··· 2624 { 2625 int length; 2626 char *buf = server->smallbuf; 2627 - unsigned int pdu_length = get_rfc1002_length(buf); 2628 unsigned int buf_size; 2629 struct mid_q_entry *mid_entry; 2630 ··· 2668 smb3_receive_transform(struct TCP_Server_Info *server, struct mid_q_entry **mid) 2669 { 2670 char *buf = server->smallbuf; 2671 - unsigned int pdu_length = get_rfc1002_length(buf); 2672 struct smb2_transform_hdr *tr_hdr = (struct smb2_transform_hdr *)buf; 2673 unsigned int orig_len = le32_to_cpu(tr_hdr->OriginalMessageSize); 2674 ··· 2699 { 2700 char *buf = server->large_buf ? server->bigbuf : server->smallbuf; 2701 2702 - return handle_read_data(server, mid, buf, get_rfc1002_length(buf) + 2703 server->vals->header_preamble_size, 2704 NULL, 0, 0); 2705 }
··· 2550 unsigned int npages; 2551 struct page **pages; 2552 unsigned int len; 2553 + unsigned int buflen = server->pdu_size + server->vals->header_preamble_size; 2554 int rc; 2555 int i = 0; 2556 ··· 2624 { 2625 int length; 2626 char *buf = server->smallbuf; 2627 + unsigned int pdu_length = server->pdu_size; 2628 unsigned int buf_size; 2629 struct mid_q_entry *mid_entry; 2630 ··· 2668 smb3_receive_transform(struct TCP_Server_Info *server, struct mid_q_entry **mid) 2669 { 2670 char *buf = server->smallbuf; 2671 + unsigned int pdu_length = server->pdu_size; 2672 struct smb2_transform_hdr *tr_hdr = (struct smb2_transform_hdr *)buf; 2673 unsigned int orig_len = le32_to_cpu(tr_hdr->OriginalMessageSize); 2674 ··· 2699 { 2700 char *buf = server->large_buf ? server->bigbuf : server->smallbuf; 2701 2702 + return handle_read_data(server, mid, buf, server->pdu_size + 2703 server->vals->header_preamble_size, 2704 NULL, 0, 0); 2705 }