if (!PKT_FIELD(vsk, peerWaitingWriteDetected)) {
PKT_FIELD(vsk, peerWaitingWriteDetected) = TRUE;
- PKT_FIELD(vsk, writeNotifyWindow) -= PAGE_SIZE;
- if (PKT_FIELD(vsk, writeNotifyWindow) <
- PKT_FIELD(vsk, writeNotifyMinWindow)) {
+ if (PKT_FIELD(vsk, writeNotifyWindow) < PAGE_SIZE) {
PKT_FIELD(vsk, writeNotifyWindow) =
PKT_FIELD(vsk, writeNotifyMinWindow);
+ } else {
+ PKT_FIELD(vsk, writeNotifyWindow) -= PAGE_SIZE;
+ if (PKT_FIELD(vsk, writeNotifyWindow) <
+ PKT_FIELD(vsk, writeNotifyMinWindow)) {
+ PKT_FIELD(vsk, writeNotifyWindow) =
+ PKT_FIELD(vsk, writeNotifyMinWindow);
+ }
}
}
notifyLimit = vsk->consumeSize - PKT_FIELD(vsk, writeNotifyWindow);
VSockVmciSock *vsk;
vsk = vsock_sk(sk);
- PKT_FIELD(vsk, writeNotifyWindow) = 0;
+ PKT_FIELD(vsk, writeNotifyWindow) = PAGE_SIZE;
PKT_FIELD(vsk, writeNotifyMinWindow) = PAGE_SIZE;
PKT_FIELD(vsk, peerWaitingRead) = FALSE;
PKT_FIELD(vsk, peerWaitingWrite) = FALSE;
vsk = vsock_sk(sk);
PKT_FIELD(vsk, writeNotifyWindow) = vsk->consumeSize;
+ if (vsk->consumeSize < PKT_FIELD(vsk, writeNotifyMinWindow)) {
+ PKT_FIELD(vsk, writeNotifyMinWindow) = vsk->consumeSize;
+ }
}
vsk = vsock_sk(sk);
PKT_FIELD(vsk, writeNotifyWindow) = vsk->consumeSize;
+ if (vsk->consumeSize < PKT_FIELD(vsk, writeNotifyMinWindow)) {
+ PKT_FIELD(vsk, writeNotifyMinWindow) = vsk->consumeSize;
+ }
}
if (!PKT_FIELD(vsk, peerWaitingWriteDetected)) {
PKT_FIELD(vsk, peerWaitingWriteDetected) = TRUE;
- PKT_FIELD(vsk, writeNotifyWindow) -= PAGE_SIZE;
- if (PKT_FIELD(vsk, writeNotifyWindow) <
- PKT_FIELD(vsk, writeNotifyMinWindow)) {
+ if (PKT_FIELD(vsk, writeNotifyWindow) < PAGE_SIZE) {
PKT_FIELD(vsk, writeNotifyWindow) =
PKT_FIELD(vsk, writeNotifyMinWindow);
+ } else {
+ PKT_FIELD(vsk, writeNotifyWindow) -= PAGE_SIZE;
+ if (PKT_FIELD(vsk, writeNotifyWindow) <
+ PKT_FIELD(vsk, writeNotifyMinWindow)) {
+ PKT_FIELD(vsk, writeNotifyWindow) =
+ PKT_FIELD(vsk, writeNotifyMinWindow);
+ }
}
}
notifyLimit = vsk->consumeSize - PKT_FIELD(vsk, writeNotifyWindow);
VSockVmciSock *vsk;
vsk = vsock_sk(sk);
- PKT_FIELD(vsk, writeNotifyWindow) = 0;
+ PKT_FIELD(vsk, writeNotifyWindow) = PAGE_SIZE;
PKT_FIELD(vsk, writeNotifyMinWindow) = PAGE_SIZE;
PKT_FIELD(vsk, peerWaitingWrite) = FALSE;
PKT_FIELD(vsk, peerWaitingWriteDetected) = FALSE;
VSockVmciSock *vsk;
vsk = vsock_sk(sk);
- PKT_FIELD(vsk, writeNotifyWindow) = 0;
+ PKT_FIELD(vsk, writeNotifyWindow) = PAGE_SIZE;
PKT_FIELD(vsk, writeNotifyMinWindow) = PAGE_SIZE;
PKT_FIELD(vsk, peerWaitingWrite) = FALSE;
PKT_FIELD(vsk, peerWaitingWriteDetected) = FALSE;
- return;
}
vsk = vsock_sk(sk);
PKT_FIELD(vsk, writeNotifyWindow) = vsk->consumeSize;
+ if (vsk->consumeSize < PKT_FIELD(vsk, writeNotifyMinWindow)) {
+ PKT_FIELD(vsk, writeNotifyMinWindow) = vsk->consumeSize;
+ }
}
vsk = vsock_sk(sk);
PKT_FIELD(vsk, writeNotifyWindow) = vsk->consumeSize;
+ if (vsk->consumeSize < PKT_FIELD(vsk, writeNotifyMinWindow)) {
+ PKT_FIELD(vsk, writeNotifyMinWindow) = vsk->consumeSize;
+ }
}