|
|
@@ -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;
|
|
|
}
|
|
|
|