From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: Re: RCU'ed dst_get_neighbour() Date: Tue, 29 Nov 2011 19:01:01 +0100 Message-ID: <1322589661.2596.2.camel@edumazet-laptop> References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: netdev@vger.kernel.org To: Marc Aurele La France Return-path: Received: from mail-bw0-f46.google.com ([209.85.214.46]:42448 "EHLO mail-bw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755377Ab1K2SBG (ORCPT ); Tue, 29 Nov 2011 13:01:06 -0500 Received: by bkas6 with SMTP id s6so824870bka.19 for ; Tue, 29 Nov 2011 10:01:04 -0800 (PST) In-Reply-To: Sender: netdev-owner@vger.kernel.org List-ID: Le mardi 29 novembre 2011 =C3=A0 10:44 -0700, Marc Aurele La France a =C3= =A9crit : > Hi. >=20 > Commit (1) seems to imply that all dst_get_neighbour() references now= need=20 > to be wrapped with rcu_read_lock()/rcu_read_unlock() sequences. See = (2)=20 > for one such proposed change. >=20 > In the case I have here (ipoib), this commit results in ... >=20 > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > [ INFO: suspicious rcu_dereference_check() usage. ] > --------------------------------------------------- > include/net/dst.h:91 invoked rcu_dereference_check() without protecti= on! >=20 > other info that might help us debug this: >=20 >=20 > rcu_scheduler_active =3D 1, debug_locks =3D 1 > 4 locks held by kworker/3:1/630: > #0: (ib_cm){.+.+.+}, at: []=20 > process_one_work+0x1ab/0x4f9 > #1: ((&(&work->work)->work)){+.+.+.}, at: []=20 > process_one_work+0x1ab/0x4f9 > #2: (rcu_read_lock_bh){.+....}, at: []=20 > dev_queue_xmit+0x0/0x5ae > #3: (_xmit_INFINIBAND){+.-...}, at: []=20 > sch_direct_xmit+0x4d/0x22b >=20 > stack backtrace: > Pid: 630, comm: kworker/3:1 Not tainted 3.1.3-smp #1 > Call Trace: > [] lockdep_rcu_dereference+0x9b/0xa4 > [] ipoib_start_xmit+0xf4/0x36f > [] dev_hard_start_xmit+0x2a7/0x54f > [] sch_direct_xmit+0x70/0x22b > [] dev_queue_xmit+0x309/0x5ae > [] ? napi_gro_receive+0xb3/0xb3 > [] ipoib_cm_rep_handler+0x208/0x248 > [] ? _raw_spin_unlock_irqrestore+0x3d/0x5b > [] ipoib_cm_tx_handler+0x95/0x27f > [] ? __trace_hardirqs_on_caller+0x41/0x65 > [] cm_process_work+0x26/0xbc > [] cm_rep_handler+0x274/0x2ae > [] cm_work_handler+0x41/0x91 > [] process_one_work+0x2a2/0x4f9 > [] ? process_one_work+0x1ab/0x4f9 > [] ? worker_thread+0x4a/0x1ca > [] ? cm_req_handler+0x355/0x355 > [] worker_thread+0xf9/0x1ca > [] ? gcwq_mayday_timeout+0x77/0x77 > [] kthread+0x86/0x8e > [] kernel_thread_helper+0x4/0x10 > [] ? retint_restore_args+0xe/0xe > [] ? kthread_stop+0x1cd/0x1cd > [] ? gs_change+0xb/0xb >=20 > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > [ INFO: suspicious rcu_dereference_check() usage. ] > --------------------------------------------------- > include/net/dst.h:91 invoked rcu_dereference_check() without protecti= on! >=20 > other info that might help us debug this: >=20 >=20 > rcu_scheduler_active =3D 1, debug_locks =3D 1 > 2 locks held by kworker/u:2/748: > #0: ((name)){.+.+.+}, at: []=20 > process_one_work+0x1ab/0x4f9 > #1: ((&port_priv->work)){+.+.+.}, at: []=20 > process_one_work+0x1ab/0x4f9 >=20 > stack backtrace: > Pid: 748, comm: kworker/u:2 Not tainted 3.1.3-smp #1 > Call Trace: > [] lockdep_rcu_dereference+0x9b/0xa4 > [] ipoib_mcast_join_finish+0x362/0x48a > [] ipoib_mcast_sendonly_join_complete+0x3b/0x174 > [] mcast_work_handler+0xba/0x182 > [] join_handler+0xe6/0xee > [] ib_sa_mcmember_rec_callback+0x51/0x5c > [] recv_handler+0x44/0x50 > [] ib_mad_complete_recv+0xc3/0x125 > [] ? find_mad_agent+0x13a/0x149 > [] ib_mad_recv_done_handler+0x2de/0x326 > [] ib_mad_completion_handler+0x5e/0x91 > [] process_one_work+0x2a2/0x4f9 > [] ? process_one_work+0x1ab/0x4f9 > [] ? worker_thread+0x4a/0x1ca > [] ? ib_mad_recv_done_handler+0x326/0x326 > [] worker_thread+0xf9/0x1ca > [] ? gcwq_mayday_timeout+0x77/0x77 > [] kthread+0x86/0x8e > [] kernel_thread_helper+0x4/0x10 > [] ? retint_restore_args+0xe/0xe > [] ? kthread_stop+0x1cd/0x1cd > [] ? gs_change+0xb/0xb >=20 > Comments/flames? >=20 > Thanks. >=20 > Marc. >=20 > PS: Please reply-to-all as I am not subscribed to netdev. >=20 > (1) http://git.kernel.org/?p=3Dlinux/kernel/git/torvalds/linux.git;a=3D= commitdiff;h=3Df2c31e32b378a6653f8de606149d963baf11d7d3 > (2) http://www.spinics.net/lists/netdev/msg179639.html >=20 > +----------------------------------+---------------------------------= -+ > | Marc Aurele La France | work: 1-780-492-9310 = | > | Academic Information and | fax: 1-780-492-1729 = | > | Communications Technologies | email: tsi@ualberta.ca = | > | 352 General Services Building +---------------------------------= -+ > | University of Alberta | = | > | Edmonton, Alberta | Standard disclaimers apply = | > | T6G 2H1 | = | > | CANADA | = | > +----------------------------------+---------------------------------= -+ Thanks for the report Marc, I'll take a look asap.