Commit e831e6cf authored by Jeff Layton's avatar Jeff Layton Committed by Steve French

cifs: make smb_msg local to read_from_socket

If msg_controllen is 0, then the socket layer should never touch these
fields. Thus, there's no need to continually reset them. Also, there's
no need to keep this field on the stack for the demultiplex thread, just
make it a local variable in read_from_socket.
Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarSteve French <smfrench@gmail.com>
parent e2218eab
...@@ -359,16 +359,20 @@ allocate_buffers(char **bigbuf, char **smallbuf, unsigned int size, ...@@ -359,16 +359,20 @@ allocate_buffers(char **bigbuf, char **smallbuf, unsigned int size,
} }
static int static int
read_from_socket(struct TCP_Server_Info *server, struct msghdr *smb_msg, read_from_socket(struct TCP_Server_Info *server,
struct kvec *iov, unsigned int to_read, struct kvec *iov, unsigned int to_read,
unsigned int *ptotal_read, bool is_header_read) unsigned int *ptotal_read, bool is_header_read)
{ {
int length, rc = 0; int length, rc = 0;
unsigned int total_read; unsigned int total_read;
struct msghdr smb_msg;
char *buf = iov->iov_base; char *buf = iov->iov_base;
smb_msg.msg_control = NULL;
smb_msg.msg_controllen = 0;
for (total_read = 0; total_read < to_read; total_read += length) { for (total_read = 0; total_read < to_read; total_read += length) {
length = kernel_recvmsg(server->ssocket, smb_msg, iov, 1, length = kernel_recvmsg(server->ssocket, &smb_msg, iov, 1,
to_read - total_read, 0); to_read - total_read, 0);
if (server->tcpStatus == CifsExiting) { if (server->tcpStatus == CifsExiting) {
/* then will exit */ /* then will exit */
...@@ -397,8 +401,6 @@ read_from_socket(struct TCP_Server_Info *server, struct msghdr *smb_msg, ...@@ -397,8 +401,6 @@ read_from_socket(struct TCP_Server_Info *server, struct msghdr *smb_msg,
iov->iov_base = (to_read - total_read) + iov->iov_base = (to_read - total_read) +
buf; buf;
iov->iov_len = to_read - total_read; iov->iov_len = to_read - total_read;
smb_msg->msg_control = NULL;
smb_msg->msg_controllen = 0;
rc = 3; rc = 3;
} else } else
rc = 1; rc = 1;
...@@ -634,7 +636,6 @@ cifs_demultiplex_thread(void *p) ...@@ -634,7 +636,6 @@ cifs_demultiplex_thread(void *p)
unsigned int pdu_length, total_read; unsigned int pdu_length, total_read;
char *buf = NULL, *bigbuf = NULL, *smallbuf = NULL; char *buf = NULL, *bigbuf = NULL, *smallbuf = NULL;
struct smb_hdr *smb_buffer = NULL; struct smb_hdr *smb_buffer = NULL;
struct msghdr smb_msg;
struct kvec iov; struct kvec iov;
struct task_struct *task_to_wake = NULL; struct task_struct *task_to_wake = NULL;
struct mid_q_entry *mid_entry; struct mid_q_entry *mid_entry;
...@@ -665,8 +666,6 @@ cifs_demultiplex_thread(void *p) ...@@ -665,8 +666,6 @@ cifs_demultiplex_thread(void *p)
buf = smallbuf; buf = smallbuf;
iov.iov_base = buf; iov.iov_base = buf;
iov.iov_len = 4; iov.iov_len = 4;
smb_msg.msg_control = NULL;
smb_msg.msg_controllen = 0;
pdu_length = 4; /* enough to get RFC1001 header */ pdu_length = 4; /* enough to get RFC1001 header */
incomplete_rcv: incomplete_rcv:
...@@ -681,7 +680,7 @@ cifs_demultiplex_thread(void *p) ...@@ -681,7 +680,7 @@ cifs_demultiplex_thread(void *p)
continue; continue;
} }
rc = read_from_socket(server, &smb_msg, &iov, pdu_length, rc = read_from_socket(server, &iov, pdu_length,
&total_read, true /* header read */); &total_read, true /* header read */);
if (rc == 3) if (rc == 3)
goto incomplete_rcv; goto incomplete_rcv;
...@@ -710,7 +709,7 @@ cifs_demultiplex_thread(void *p) ...@@ -710,7 +709,7 @@ cifs_demultiplex_thread(void *p)
iov.iov_base = 4 + buf; iov.iov_base = 4 + buf;
iov.iov_len = pdu_length; iov.iov_len = pdu_length;
rc = read_from_socket(server, &smb_msg, &iov, pdu_length, rc = read_from_socket(server, &iov, pdu_length,
&total_read, false); &total_read, false);
if (rc == 2) if (rc == 2)
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment