Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751639AbdCNQlq (ORCPT ); Tue, 14 Mar 2017 12:41:46 -0400 Received: from mail-wm0-f49.google.com ([74.125.82.49]:35334 "EHLO mail-wm0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750788AbdCNQlo (ORCPT ); Tue, 14 Mar 2017 12:41:44 -0400 MIME-Version: 1.0 In-Reply-To: References: <1489502504.28631.115.camel@edumazet-glaptop3.roam.corp.google.com> From: Cong Wang Date: Tue, 14 Mar 2017 09:41:22 -0700 Message-ID: Subject: Re: net: deadlock between ip_expire/sch_direct_xmit To: Eric Dumazet Cc: Dmitry Vyukov , Eric Dumazet , David Miller , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , Patrick McHardy , netdev , LKML , Jamal Hadi Salim , syzkaller Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1172 Lines: 31 On Tue, Mar 14, 2017 at 7:56 AM, Eric Dumazet wrote: > On Tue, Mar 14, 2017 at 7:46 AM, Dmitry Vyukov wrote: > >> I am confused. Lockdep has observed both of these stacks: >> >> CPU0 CPU1 >> ---- ---- >> lock(&(&q->lock)->rlock); >> lock(_xmit_ETHER#2); >> lock(&(&q->lock)->rlock); >> lock(_xmit_ETHER#2); >> >> >> So it somehow happened. Or what do you mean? >> > > Lockdep said " possible circular locking dependency detected " . > It is not an actual deadlock, but lockdep machinery firing. > > For a dead lock to happen, this would require that he ICMP message > sent by ip_expire() is itself fragmented and reassembled. > This cannot be, because ICMP messages are not candidates for > fragmentation, but lockdep can not know that of course... It doesn't have to be ICMP, as long as get the same hash for the inet_frag_queue, we will need to take the same lock and deadlock will happen. hash = ipqhashfn(iph->id, iph->saddr, iph->daddr, iph->protocol); So it is really up to this hash function.