From: VMware, Inc <> Date: Wed, 24 Feb 2010 22:07:32 +0000 (-0800) Subject: Correctly inherit vsock QP sizes on child connected stream sockets. X-Git-Tag: 2010.02.23-236320~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=85a8a9ac105168943dd4ad97f56731d71fc71498;p=thirdparty%2Fopen-vm-tools.git Correctly inherit vsock QP sizes on child connected stream sockets. This change makes it so we return the correct values for getsockopts on a child connected socket when querying actual / max / min QP sizes. Signed-off-by: Marcelo Vanzin --- diff --git a/open-vm-tools/modules/linux/vsock/linux/af_vsock.c b/open-vm-tools/modules/linux/vsock/linux/af_vsock.c index 2860a199f..c8611e7d0 100644 --- a/open-vm-tools/modules/linux/vsock/linux/af_vsock.c +++ b/open-vm-tools/modules/linux/vsock/linux/af_vsock.c @@ -1544,11 +1544,11 @@ VSockVmciRecvListen(struct sock *sk, // IN * If the proposed size fits within our min/max, accept * it. Otherwise propose our own size. */ - if (pkt->u.size >= vsk->queuePairMinSize && - pkt->u.size <= vsk->queuePairMaxSize) { + if (pkt->u.size >= vpending->queuePairMinSize && + pkt->u.size <= vpending->queuePairMaxSize) { qpSize = pkt->u.size; } else { - qpSize = vsk->queuePairSize; + qpSize = vpending->queuePairSize; } /* @@ -2720,9 +2720,6 @@ __VSockVmciCreate(struct net *net, // IN: Network namespace vsk->qpHandle = VMCI_INVALID_HANDLE; vsk->produceQ = vsk->consumeQ = NULL; vsk->produceSize = vsk->consumeSize = 0; - vsk->queuePairSize = VSOCK_DEFAULT_QP_SIZE; - vsk->queuePairMinSize = VSOCK_DEFAULT_QP_SIZE_MIN; - vsk->queuePairMaxSize = VSOCK_DEFAULT_QP_SIZE_MAX; vsk->listener = NULL; INIT_LIST_HEAD(&vsk->pendingLinks); INIT_LIST_HEAD(&vsk->acceptQueue); @@ -2735,8 +2732,14 @@ __VSockVmciCreate(struct net *net, // IN: Network namespace if (parent) { psk = vsock_sk(parent); vsk->trusted = psk->trusted; + vsk->queuePairSize = psk->queuePairSize; + vsk->queuePairMinSize = psk->queuePairMinSize; + vsk->queuePairMaxSize = psk->queuePairMaxSize; } else { vsk->trusted = capable(CAP_NET_ADMIN); + vsk->queuePairSize = VSOCK_DEFAULT_QP_SIZE; + vsk->queuePairMinSize = VSOCK_DEFAULT_QP_SIZE_MIN; + vsk->queuePairMaxSize = VSOCK_DEFAULT_QP_SIZE_MAX; } vsk->notifyOps = NULL;