mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
CIFS: Fix adjustment of credits for MTU requests
commit b983f7e923 upstream.
Currently for MTU requests we allocate maximum possible credits
in advance and then adjust them according to the request size.
While we were adjusting the number of credits belonging to the
server, we were skipping adjustment of credits belonging to the
request. This patch fixes it by setting request credits to
CreditCharge field value of SMB2 packet header.
Also ask 1 credit more for async read and write operations to
increase parallelism and match the behavior of other operations.
Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
CC: Stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
045e3d2f12
commit
d1130682d1
@@ -3185,12 +3185,14 @@ smb2_async_readv(struct cifs_readdata *rdata)
|
||||
if (rdata->credits) {
|
||||
shdr->CreditCharge = cpu_to_le16(DIV_ROUND_UP(rdata->bytes,
|
||||
SMB2_MAX_BUFFER_SIZE));
|
||||
shdr->CreditRequest = shdr->CreditCharge;
|
||||
shdr->CreditRequest =
|
||||
cpu_to_le16(le16_to_cpu(shdr->CreditCharge) + 1);
|
||||
spin_lock(&server->req_lock);
|
||||
server->credits += rdata->credits -
|
||||
le16_to_cpu(shdr->CreditCharge);
|
||||
spin_unlock(&server->req_lock);
|
||||
wake_up(&server->request_q);
|
||||
rdata->credits = le16_to_cpu(shdr->CreditCharge);
|
||||
flags |= CIFS_HAS_CREDITS;
|
||||
}
|
||||
|
||||
@@ -3462,12 +3464,14 @@ smb2_async_writev(struct cifs_writedata *wdata,
|
||||
if (wdata->credits) {
|
||||
shdr->CreditCharge = cpu_to_le16(DIV_ROUND_UP(wdata->bytes,
|
||||
SMB2_MAX_BUFFER_SIZE));
|
||||
shdr->CreditRequest = shdr->CreditCharge;
|
||||
shdr->CreditRequest =
|
||||
cpu_to_le16(le16_to_cpu(shdr->CreditCharge) + 1);
|
||||
spin_lock(&server->req_lock);
|
||||
server->credits += wdata->credits -
|
||||
le16_to_cpu(shdr->CreditCharge);
|
||||
spin_unlock(&server->req_lock);
|
||||
wake_up(&server->request_q);
|
||||
wdata->credits = le16_to_cpu(shdr->CreditCharge);
|
||||
flags |= CIFS_HAS_CREDITS;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user