RE: [PATCH net v2] vsock: Fix a lockdep warning in __vsock_release()
From: Dexuan Cui <decui@microsoft.com>
Date: 2019-09-27 05:37:36
Also in:
kvm, linux-hyperv, lkml
From: linux-hyperv-owner@vger.kernel.org [off-list ref] 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:quoted
... 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.
quoted
- 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. :-) Thanks, -- Dexuan