mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
CIFS: Fix adjustment of credits for MTU requests
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>
This commit is contained in:
parent
c715f89c4d
commit
b983f7e923
@ -3278,12 +3278,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;
|
||||
}
|
||||
|
||||
@ -3555,12 +3557,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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user