Skip to content

Commit 2e96467

Browse files
Ronnie Sahlbergsmfrench
authored andcommitted
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 <[email protected]> Signed-off-by: Steve French <[email protected]> Reviewed-by: Pavel Shilovsky <[email protected]>
1 parent 5100d8a commit 2e96467

File tree

4 files changed

+9
-6
lines changed

4 files changed

+9
-6
lines changed

fs/cifs/cifsglob.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,8 @@ struct TCP_Server_Info {
665665
struct delayed_work echo; /* echo ping workqueue job */
666666
char *smallbuf; /* pointer to current "small" buffer */
667667
char *bigbuf; /* pointer to current "big" buffer */
668+
/* Total size of this PDU. Only valid from cifs_demultiplex_thread */
669+
unsigned int pdu_size;
668670
unsigned int total_read; /* total amount of data read in this pass */
669671
#ifdef CONFIG_CIFS_FSCACHE
670672
struct fscache_cookie *fscache; /* client index cache cookie */

fs/cifs/cifssmb.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1456,7 +1456,7 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)
14561456
unsigned int data_offset, data_len;
14571457
struct cifs_readdata *rdata = mid->callback_data;
14581458
char *buf = server->smallbuf;
1459-
unsigned int buflen = get_rfc1002_length(buf) +
1459+
unsigned int buflen = server->pdu_size +
14601460
server->vals->header_preamble_size;
14611461
bool use_rdma_mr = false;
14621462

fs/cifs/connect.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,7 @@ standard_receive3(struct TCP_Server_Info *server, struct mid_q_entry *mid)
772772
{
773773
int length;
774774
char *buf = server->smallbuf;
775-
unsigned int pdu_length = get_rfc1002_length(buf);
775+
unsigned int pdu_length = server->pdu_size;
776776

777777
/* make sure this will fit in a large buffer */
778778
if (pdu_length > CIFSMaxBufSize + MAX_HEADER_SIZE(server) -
@@ -881,6 +881,7 @@ cifs_demultiplex_thread(void *p)
881881
* so we can now interpret the length field.
882882
*/
883883
pdu_length = get_rfc1002_length(buf);
884+
server->pdu_size = pdu_length;
884885

885886
cifs_dbg(FYI, "RFC1002 header 0x%x\n", pdu_length);
886887
if (!is_smb_response(server, buf[0]))

fs/cifs/smb2ops.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2550,7 +2550,7 @@ receive_encrypted_read(struct TCP_Server_Info *server, struct mid_q_entry **mid)
25502550
unsigned int npages;
25512551
struct page **pages;
25522552
unsigned int len;
2553-
unsigned int buflen = get_rfc1002_length(buf) + server->vals->header_preamble_size;
2553+
unsigned int buflen = server->pdu_size + server->vals->header_preamble_size;
25542554
int rc;
25552555
int i = 0;
25562556

@@ -2624,7 +2624,7 @@ receive_encrypted_standard(struct TCP_Server_Info *server,
26242624
{
26252625
int length;
26262626
char *buf = server->smallbuf;
2627-
unsigned int pdu_length = get_rfc1002_length(buf);
2627+
unsigned int pdu_length = server->pdu_size;
26282628
unsigned int buf_size;
26292629
struct mid_q_entry *mid_entry;
26302630

@@ -2668,7 +2668,7 @@ static int
26682668
smb3_receive_transform(struct TCP_Server_Info *server, struct mid_q_entry **mid)
26692669
{
26702670
char *buf = server->smallbuf;
2671-
unsigned int pdu_length = get_rfc1002_length(buf);
2671+
unsigned int pdu_length = server->pdu_size;
26722672
struct smb2_transform_hdr *tr_hdr = (struct smb2_transform_hdr *)buf;
26732673
unsigned int orig_len = le32_to_cpu(tr_hdr->OriginalMessageSize);
26742674

@@ -2699,7 +2699,7 @@ smb3_handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid)
26992699
{
27002700
char *buf = server->large_buf ? server->bigbuf : server->smallbuf;
27012701

2702-
return handle_read_data(server, mid, buf, get_rfc1002_length(buf) +
2702+
return handle_read_data(server, mid, buf, server->pdu_size +
27032703
server->vals->header_preamble_size,
27042704
NULL, 0, 0);
27052705
}

0 commit comments

Comments
 (0)