Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp3141356ybn; Fri, 27 Sep 2019 01:35:55 -0700 (PDT) X-Google-Smtp-Source: APXvYqwmuWm8BZYbTPEkmrgAT0NfAOgP9Ce36nJOagpur5aq88aPdeGRHFEldYZKNLHtdbKjoM13 X-Received: by 2002:a17:906:82d3:: with SMTP id a19mr6607434ejy.151.1569573355473; Fri, 27 Sep 2019 01:35:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569573355; cv=none; d=google.com; s=arc-20160816; b=rY+SwMIgkgkv6oWFmrfgau892rnQzXIRg+xTkDaIqkS6LKj0IvOuvaandHyJMBhU4/ 4JEPjQG1POZL6OjjdcxvMSQC0VbxvIcnlvO8cE002T0a8a8OxZqAsdYyXYAWWGTUpMNE 8xVZ3hCUTf8kF7DvR7XzYlt9SlJZWr7YRPMitSxQgsvQl1EWia7DFm6wSVEdKaaQwu6G 3KLMV0mtfb2EPIozJ/KOwcgCRr04LnLtEAhzSrsFhCYOWP4uBrE9i/d7Cjl0G9taPris U6j68Gnn6shO2mW5ALu1NtgvjWT0HD7Jb3PzaVUSP4iJv8XVCdZ78T6sDmHOLtL16F/X x8Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=8q/w5sAXzXN1dRT+MgNlQctaxYrMedzUaye5evRWr8c=; b=F0wK4UoSki4Z1MQa2OS3qUR/dyEOIbVZp6rErhDhnguk12oeBohVkuntHY1i+wQH9B Kcdoh/S0nPcQ+CE3Vc7dudON77KlveH5cpkyH7I6vhYpFeHIfi7gIGl95zoRfWTguWkH DgtQw2deTtLmh21+R0WzBuaLtYCYFipdVnXfNrk2ejLcUGp9yKGrn40ulXZ9c8zizZSl 16J+Dj2z12M5F8Lw2k3xVJYIiX/loKq9sgw5Pu+Pq8t0Nbcfae0Ye0S8KxSQTpMSUenD 2IhbLuMTZpk7XfgX11GvOE3YOnkbn03HHeSwK79F5TZrt3kMEPPxl2XG/FohxYQWjzcA TZ2w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z33si1210592edz.314.2019.09.27.01.35.29; Fri, 27 Sep 2019 01:35:55 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726307AbfI0IdI (ORCPT + 99 others); Fri, 27 Sep 2019 04:33:08 -0400 Received: from mx1.redhat.com ([209.132.183.28]:46864 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725911AbfI0IdF (ORCPT ); Fri, 27 Sep 2019 04:33:05 -0400 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EFFF8C04D312 for ; Fri, 27 Sep 2019 08:33:04 +0000 (UTC) Received: by mail-wm1-f71.google.com with SMTP id n3so2432336wmf.3 for ; Fri, 27 Sep 2019 01:33:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=8q/w5sAXzXN1dRT+MgNlQctaxYrMedzUaye5evRWr8c=; b=e1f0Um4W/RIpMUfm9FJpFTeqSVw8lga2eA+4HDIjt0iDb+zFJ2PXMZuPiYtGNX0VsK xivysp1Kp2+daLrNRGRO+UdYRKEfVBGtyxQyep4YDkLi4gKErpKMA7KL4cEMOuUweqf0 W4lFEO7al9Dlu+Ih3rCZKCMIGACMD8sqYWrSxyHH2OsQk08yQpIjxNcpqn+xCfuX1hCa 9+729Ol6fDvAmEhgtkcFc0nCzRMfLeqIAoDkFFISXW11zMZOhyqs/OGRM0zXFZReB5if gvOkIYn141i06DdFti+S/JLI5pc6jk6nC1dGLmkh9lTLAIWNmzWbSjKdb2Vn07xd2VS6 I9zA== X-Gm-Message-State: APjAAAUmH3vGSDw/2VVpnGiY0u2JMGMNICWCIpymD54noECYmFO6LYJH BA3dlc0WGM0iikzoWn51ihZEQTr1ippbtvOOkkHkNiw/efn3IoyJVC+cr6PxWIArNpGEpVvvsIc cFhRO4C0CVPjQp3MZua6QRZ49 X-Received: by 2002:adf:e9c5:: with SMTP id l5mr1966704wrn.40.1569573183636; Fri, 27 Sep 2019 01:33:03 -0700 (PDT) X-Received: by 2002:adf:e9c5:: with SMTP id l5mr1966676wrn.40.1569573183304; Fri, 27 Sep 2019 01:33:03 -0700 (PDT) Received: from steredhat.homenet.telecomitalia.it (host174-200-dynamic.52-79-r.retail.telecomitalia.it. [79.52.200.174]) by smtp.gmail.com with ESMTPSA id 33sm2224730wra.41.2019.09.27.01.33.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Sep 2019 01:33:02 -0700 (PDT) Date: Fri, 27 Sep 2019 10:32:59 +0200 From: Stefano Garzarella To: Dexuan Cui Cc: "davem@davemloft.net" , KY Srinivasan , Haiyang Zhang , Stephen Hemminger , "sashal@kernel.org" , "stefanha@redhat.com" , "gregkh@linuxfoundation.org" , "arnd@arndb.de" , "deepa.kernel@gmail.com" , "ytht.net@gmail.com" , "tglx@linutronix.de" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-hyperv@vger.kernel.org" , "kvm@vger.kernel.org" , "virtualization@lists.linux-foundation.org" , Michael Kelley , "jhansen@vmware.com" Subject: Re: [PATCH net v2] vsock: Fix a lockdep warning in __vsock_release() Message-ID: <20190927083259.zpzseatncogfdrv4@steredhat.homenet.telecomitalia.it> References: <1569460241-57800-1-git-send-email-decui@microsoft.com> <20190926074749.sltehhkcgfduu7n2@steredhat.homenet.telecomitalia.it> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20180716 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Sep 27, 2019 at 05:37:20AM +0000, Dexuan Cui wrote: > > From: linux-hyperv-owner@vger.kernel.org > > On Behalf Of Stefano Garzarella > > Sent: Thursday, September 26, 2019 12:48 AM > > > > Hi Dexuan, > > > > On Thu, Sep 26, 2019 at 01:11:27AM +0000, Dexuan Cui wrote: > > > ... > > > NOTE: I only tested the code on Hyper-V. I can not test the code for > > > virtio socket, as I don't have a KVM host. :-( Sorry. > > > > > > @Stefan, @Stefano: please review & test the patch for virtio socket, > > > and let me know if the patch breaks anything. Thanks! > > > > Comment below, I'll test it ASAP! > > Stefano, Thank you! > > BTW, this is how I tested the patch: > 1. write a socket server program in the guest. The program calls listen() > and then calls sleep(10000 seconds). Note: accept() is not called. > > 2. create some connections to the server program in the guest. > > 3. kill the server program by Ctrl+C, and "dmesg" will show the scary > call-trace, if the kernel is built with > CONFIG_LOCKDEP=y > CONFIG_LOCKDEP_SUPPORT=y > > 4. Apply the patch, do the same test and we should no longer see the call-trace. Thanks very useful! I'll follow these steps! > > > > - lock_sock(sk); > > > + /* When "level" is 2, use the nested version to avoid the > > > + * warning "possible recursive locking detected". > > > + */ > > > + if (level == 1) > > > + lock_sock(sk); > > > > Since lock_sock() calls lock_sock_nested(sk, 0), could we use directly > > lock_sock_nested(sk, level) with level = 0 in vsock_release() and > > level = SINGLE_DEPTH_NESTING here in the while loop? > > > > Thanks, > > Stefano > > IMHO it's better to make the lock usage more explicit, as the patch does. > > lock_sock_nested(sk, level) or lock_sock_nested(sk, 0) seems a little > odd to me. But I'm open to your suggestion: if any of the network > maintainers, e.g. davem, also agrees with you, I'll change the code > as you suggested. :-) Sure! Just to be clear, I'm proposing this (plus the changes in the transports and yours useful comments): --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -638,7 +638,7 @@ struct sock *__vsock_create(struct net *net, } EXPORT_SYMBOL_GPL(__vsock_create); -static void __vsock_release(struct sock *sk) +static void __vsock_release(struct sock *sk, int level) { if (sk) { struct sk_buff *skb; @@ -650,7 +650,7 @@ static void __vsock_release(struct sock *sk) transport->release(vsk); - lock_sock(sk); + lock_sock_nested(sk, level); sock_orphan(sk); sk->sk_shutdown = SHUTDOWN_MASK; @@ -659,7 +659,7 @@ static void __vsock_release(struct sock *sk) /* Clean up any sockets that never were accepted. */ while ((pending = vsock_dequeue_accept(sk)) != NULL) { - __vsock_release(pending); + __vsock_release(pending, SINGLE_DEPTH_NESTING); sock_put(pending); } @@ -708,7 +708,7 @@ EXPORT_SYMBOL_GPL(vsock_stream_has_space); static int vsock_release(struct socket *sock) { - __vsock_release(sock->sk); + __vsock_release(sock->sk, 0); sock->sk = NULL; sock->state = SS_FREE; Thanks, Stefano