From patchwork Wed Mar 1 03:56:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Tao X-Patchwork-Id: 734083 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3vY48L5Jlfz9s7s for ; Wed, 1 Mar 2017 16:42:10 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HlR1OkDe"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752303AbdCAFkw (ORCPT ); Wed, 1 Mar 2017 00:40:52 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:33654 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751982AbdCAFkS (ORCPT ); Wed, 1 Mar 2017 00:40:18 -0500 Received: by mail-pf0-f194.google.com with SMTP id b5so128309pfa.0; Tue, 28 Feb 2017 21:40:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=haf1Yfnk5Lmuo/mpMMr9n4YDXpuDYTorU+rvpRhukuU=; b=HlR1OkDeayDnmPBSyYwURK0kwfmaWPmJr9tmNoGMummG1mKmomr9I6cMKCI3pfgjFt gtG52u1zdIbwJMYsZy6lxhKw1MykXwc1ZkjKnUcfStbFES7OELe6rSZsP1+RWDmclJ6N WK/MC/J/vIUtwugAPANFa/yPV+4wU+AMuF+B44L/r1cFZMV5q1iLVGl/GKj7UQF35fN/ mO2/xhF+SQwPKv7v/3CHMPEFsS3/fsF+QWv082HF1wpKcPpRsUpAR0vcPhf0sd9ve9fH SQGi1RaHnWWrZLTGS8MjZKrs9R6pq0LZWeQ27j0Q1PxWfHI2ZLwAxWb6D7MAkj+U5pRC fQbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=haf1Yfnk5Lmuo/mpMMr9n4YDXpuDYTorU+rvpRhukuU=; b=RKfqEhNj4FzRQwh9EED7j0a+w4cNjrI3KpEHOsZ2j+t9zasTDosNu4f+90y7m28GVF OYAd21uT3KLzK2CY9VhiYwMxQadGOKr5BfTIqeZ56dTspMN0m0n/AT5V4way3OyEYQyz PZLRXwVdKZMb/TO+OPdOJUNWknuQZ1uyHNf7Gszn90smyNamsEAoiFEYtQPIk46Ld7nJ uoXlbamMzPNRL15/Fmijr7wjq5hSdC/G55zbcYjCZgmMle5BFY0xeMpFsp7Cg8KACPGe hvCIH5FwwfLcPa2iXOjyV0PGHzKXwNaWlbhd2zinMPlRF3FOLkaqQulbckqqycZUg2F1 Pgpg== X-Gm-Message-State: AMke39mT00JKedlgB08aURGaUWGckytsiaKK8roMxJCLE67QFkqNh8rWYHBkRIuW9hEziQ== X-Received: by 10.99.140.29 with SMTP id m29mr6558459pgd.174.1488340653791; Tue, 28 Feb 2017 19:57:33 -0800 (PST) Received: from hypervsock.localdomain (ec2-52-78-240-164.ap-northeast-2.compute.amazonaws.com. [52.78.240.164]) by smtp.gmail.com with ESMTPSA id n63sm6844703pfk.64.2017.02.28.19.57.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Feb 2017 19:57:32 -0800 (PST) From: Peng Tao To: David Miller Cc: netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, Stefan Hajnoczi , Jorgen Hansen , Peng Tao Subject: [PATCH-v4-RESEND 4/4] vsock: cancel packets when failing to connect Date: Wed, 1 Mar 2017 11:56:27 +0800 Message-Id: <1488340587-32416-5-git-send-email-bergwolf@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1488340587-32416-1-git-send-email-bergwolf@gmail.com> References: <1488340587-32416-1-git-send-email-bergwolf@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Otherwise we'll leave the packets queued until releasing vsock device. E.g., if guest is slow to start up, resulting ETIMEDOUT on connect, guest will get the connect requests from failed host sockets. Reviewed-by: Stefan Hajnoczi Reviewed-by: Jorgen Hansen Signed-off-by: Peng Tao --- net/vmw_vsock/af_vsock.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index 8a398b3..c73b03a 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -1101,10 +1101,19 @@ static const struct proto_ops vsock_dgram_ops = { .sendpage = sock_no_sendpage, }; +static int vsock_transport_cancel_pkt(struct vsock_sock *vsk) +{ + if (!transport->cancel_pkt) + return -EOPNOTSUPP; + + return transport->cancel_pkt(vsk); +} + static void vsock_connect_timeout(struct work_struct *work) { struct sock *sk; struct vsock_sock *vsk; + int cancel = 0; vsk = container_of(work, struct vsock_sock, dwork.work); sk = sk_vsock(vsk); @@ -1115,8 +1124,11 @@ static void vsock_connect_timeout(struct work_struct *work) sk->sk_state = SS_UNCONNECTED; sk->sk_err = ETIMEDOUT; sk->sk_error_report(sk); + cancel = 1; } release_sock(sk); + if (cancel) + vsock_transport_cancel_pkt(vsk); sock_put(sk); } @@ -1223,11 +1235,13 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr, err = sock_intr_errno(timeout); sk->sk_state = SS_UNCONNECTED; sock->state = SS_UNCONNECTED; + vsock_transport_cancel_pkt(vsk); goto out_wait; } else if (timeout == 0) { err = -ETIMEDOUT; sk->sk_state = SS_UNCONNECTED; sock->state = SS_UNCONNECTED; + vsock_transport_cancel_pkt(vsk); goto out_wait; }