]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Correctly inherit vsock QP sizes on child connected stream sockets.
authorVMware, Inc <>
Wed, 24 Feb 2010 22:07:32 +0000 (14:07 -0800)
committerMarcelo Vanzin <mvanzin@vmware.com>
Wed, 24 Feb 2010 22:07:32 +0000 (14:07 -0800)
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 <mvanzin@vmware.com>
open-vm-tools/modules/linux/vsock/linux/af_vsock.c

index 2860a199fecd7d239540a04e58c5afb4e3a6410d..c8611e7d03a01a61f187fe20b15b8b801a9d778f 100644 (file)
@@ -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;