Thread (6 messages) 6 messages, 2 authors, 2019-09-30

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help