diff options
Diffstat (limited to 'fs/ksmbd/connection.c')
| -rw-r--r-- | fs/ksmbd/connection.c | 28 | 
1 files changed, 10 insertions, 18 deletions
| diff --git a/fs/ksmbd/connection.c b/fs/ksmbd/connection.c index 5b10b03800c1..365ac32af505 100644 --- a/fs/ksmbd/connection.c +++ b/fs/ksmbd/connection.c @@ -112,10 +112,8 @@ void ksmbd_conn_enqueue_request(struct ksmbd_work *work)  	struct ksmbd_conn *conn = work->conn;  	struct list_head *requests_queue = NULL; -	if (conn->ops->get_cmd_val(work) != SMB2_CANCEL_HE) { +	if (conn->ops->get_cmd_val(work) != SMB2_CANCEL_HE)  		requests_queue = &conn->requests; -		work->synchronous = true; -	}  	if (requests_queue) {  		atomic_inc(&conn->req_running); @@ -136,14 +134,14 @@ int ksmbd_conn_try_dequeue_request(struct ksmbd_work *work)  	if (!work->multiRsp)  		atomic_dec(&conn->req_running); -	spin_lock(&conn->request_lock);  	if (!work->multiRsp) { +		spin_lock(&conn->request_lock);  		list_del_init(&work->request_entry); -		if (!work->synchronous) -			list_del_init(&work->async_request_entry); +		spin_unlock(&conn->request_lock); +		if (work->asynchronous) +			release_async_work(work);  		ret = 0;  	} -	spin_unlock(&conn->request_lock);  	wake_up_all(&conn->req_running_q);  	return ret; @@ -298,7 +296,7 @@ int ksmbd_conn_handler_loop(void *p)  		kvfree(conn->request_buf);  		conn->request_buf = NULL; -		size = t->ops->read(t, hdr_buf, sizeof(hdr_buf)); +		size = t->ops->read(t, hdr_buf, sizeof(hdr_buf), -1);  		if (size != sizeof(hdr_buf))  			break; @@ -319,20 +317,14 @@ int ksmbd_conn_handler_loop(void *p)  		}  		/* -		 * Check if pdu size is valid (min : smb header size, -		 * max : 0x00FFFFFF). +		 * Check maximum pdu size(0x00FFFFFF).  		 */ -		if (pdu_size < __SMB2_HEADER_STRUCTURE_SIZE || -		    pdu_size > MAX_STREAM_PROT_LEN) { +		if (pdu_size > MAX_STREAM_PROT_LEN)  			break; -		}  		/* 4 for rfc1002 length field */  		size = pdu_size + 4; -		conn->request_buf = kvmalloc(size, -					     GFP_KERNEL | -					     __GFP_NOWARN | -					     __GFP_NORETRY); +		conn->request_buf = kvmalloc(size, GFP_KERNEL);  		if (!conn->request_buf)  			break; @@ -344,7 +336,7 @@ int ksmbd_conn_handler_loop(void *p)  		 * We already read 4 bytes to find out PDU size, now  		 * read in PDU  		 */ -		size = t->ops->read(t, conn->request_buf + 4, pdu_size); +		size = t->ops->read(t, conn->request_buf + 4, pdu_size, 2);  		if (size < 0) {  			pr_err("sock_read failed: %d\n", size);  			break; |