All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@redhat.com>
To: Ross Zwisler <ross.zwisler@linux.intel.com>,
	Trond Myklebust <trond.myklebust@primarydata.com>,
	Anna Schumaker <anna.schumaker@netapp.com>,
	"J. Bruce Fields" <bfields@fieldses.org>,
	"David S. Miller" <davem@davemloft.net>,
	linux-nfs@vger.kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, Andy Adamson <andros@netapp.com>
Subject: Re: net/sunrpc/clnt.c:2773 suspicious rcu_dereference_check() usage!
Date: Tue, 08 Nov 2016 06:53:48 -0500	[thread overview]
Message-ID: <1478606028.2443.2.camel@redhat.com> (raw)
In-Reply-To: <20161108054202.GA12406@linux.intel.com>

On Mon, 2016-11-07 at 22:42 -0700, Ross Zwisler wrote:
> I've got a virtual machine that has some NFS mounts, and with a newly compiled
> kernel based on v4.9-rc3 I see the following warning/info message:
> 
> [   42.750181] ===============================
> [   42.750192] [ INFO: suspicious RCU usage. ]
> [   42.750203] 4.9.0-rc3-00002-g7b6e7de #3 Not tainted
> [   42.750213] -------------------------------
> [   42.750225] net/sunrpc/clnt.c:2773 suspicious rcu_dereference_check() usage!
> [   42.750235] 
> [   42.750235] other info that might help us debug this:
> [   42.750235] 
> [   42.750246] 
> [   42.750246] rcu_scheduler_active = 1, debug_locks = 0
> [   42.750257] 1 lock held by mount.nfs4/6440:
> [   42.750278]  #0: 
> [   42.750299]  (
> [   42.750319] &(&nn->nfs_client_lock)->rlock
> [   42.750340] ){+.+...}
> [   42.750362] , at: 
> [   42.750372] [<ffffffff813012b5>] nfs_get_client+0x105/0x5e0
> [   42.750383] 
> [   42.750383] stack backtrace:
> [   42.750394] CPU: 0 PID: 6440 Comm: mount.nfs4 Not tainted 4.9.0-rc3-00002-g7b6e7de #3
> [   42.750406] Hardware name: Intel Corporation PURLEY/PURLEY, BIOS PLYDCRB1.MBH.0096.D23.1608240105 08/24/2016
> [   42.750429]  ffffc9000092fa68 ffffffff8150730f ffff88014ec8da40 0000000000000001
> [   42.750452]  ffffc9000092fa98 ffffffff810bc3f7 ffff880150b0b228 ffff88015068dbb0
> [   42.750475]  ffffc9000092fb38 ffff88014fc99180 ffffc9000092fac0 ffffffff81b243e5
> [   42.750486] Call Trace:
> [   42.750498]  [<ffffffff8150730f>] dump_stack+0x67/0x98
> [   42.750511]  [<ffffffff810bc3f7>] lockdep_rcu_suspicious+0xe7/0x120
> [   42.750524]  [<ffffffff81b243e5>] rpc_clnt_xprt_switch_has_addr+0x115/0x150
> [   42.750536]  [<ffffffff813013f4>] nfs_get_client+0x244/0x5e0
> [   42.750549]  [<ffffffff813012ac>] ? nfs_get_client+0xfc/0x5e0
> [   42.750561]  [<ffffffff813568f8>] nfs4_set_client+0x98/0x130
> [   42.750574]  [<ffffffff8135872e>] nfs4_create_server+0x13e/0x390
> [   42.750588]  [<ffffffff8134cd0e>] nfs4_remote_mount+0x2e/0x60
> [   42.750600]  [<ffffffff811f3a29>] mount_fs+0x39/0x170
> [   42.750614]  [<ffffffff81214a0b>] vfs_kern_mount+0x6b/0x150
> [   42.750626]  [<ffffffff8134cbec>] ? nfs_do_root_mount+0x3c/0xc0
> [   42.750639]  [<ffffffff8134cc36>] nfs_do_root_mount+0x86/0xc0
> [   42.750652]  [<ffffffff8134d014>] nfs4_try_mount+0x44/0xc0
> [   42.750664]  [<ffffffff81302097>] ? get_nfs_version+0x27/0x90
> [   42.750677]  [<ffffffff81310f8c>] nfs_fs_mount+0x4ac/0xd80
> [   42.750689]  [<ffffffff810bb938>] ? lockdep_init_map+0x88/0x1f0
> [   42.750701]  [<ffffffff81311ac0>] ? nfs_clone_super+0x130/0x130
> [   42.750713]  [<ffffffff8130f300>] ? param_set_portnr+0x70/0x70
> [   42.750726]  [<ffffffff811f3a29>] mount_fs+0x39/0x170
> [   42.750740]  [<ffffffff81214a0b>] vfs_kern_mount+0x6b/0x150
> [   42.750752]  [<ffffffff812176f1>] do_mount+0x1f1/0xd10
> [   42.750765]  [<ffffffff81217441>] ? copy_mount_options+0xa1/0x140
> [   42.750777]  [<ffffffff81218543>] SyS_mount+0x83/0xd0
> [   42.750790]  [<ffffffff81002abc>] do_syscall_64+0x5c/0x130
> [   42.750802]  [<ffffffff81c479a4>] entry_SYSCALL64_slow_path+0x25/0x25
> 
> This rcu_dereference_check() was introduced by the following commit:
> 
> commit 39e5d2df959dd4aea81fa33d765d2a5cc67a0512
> Author: Andy Adamson <andros@netapp.com>
> Date:   Fri Sep 9 09:22:25 2016 -0400
> 
>     SUNRPC search xprt switch for sockaddr
>     
>     Signed-off-by: Andy Adamson <andros@netapp.com>
>     Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
> 
> Thanks,
> - Ross

Thanks Ross,

----------------------8<----------------------
bool rpc_clnt_xprt_switch_has_addr(struct rpc_clnt *clnt,
                                   const struct sockaddr *sap)
{
        struct rpc_xprt_switch *xps;
        bool ret;

        xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch);

        rcu_read_lock();
        ret = rpc_xprt_switch_has_addr(xps, sap);
        rcu_read_unlock();
        return ret;
}
----------------------8<----------------------

Looks like the simple fix is to just move that rcu_dereference call
inside the rcu_read_lock there.

Cheers,
-- 
Jeff Layton <jlayton@redhat.com>

  reply	other threads:[~2016-11-08 11:53 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-08  5:42 net/sunrpc/clnt.c:2773 suspicious rcu_dereference_check() usage! Ross Zwisler
2016-11-08  5:42 ` Ross Zwisler
2016-11-08 11:53 ` Jeff Layton [this message]
2016-11-08 12:09   ` Jeff Layton
2016-11-08 12:42     ` Anna Schumaker
2016-11-08 17:43       ` Ross Zwisler
2016-11-08 17:56         ` Anna Schumaker
2016-11-08 17:56           ` Anna Schumaker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1478606028.2443.2.camel@redhat.com \
    --to=jlayton@redhat.com \
    --cc=andros@netapp.com \
    --cc=anna.schumaker@netapp.com \
    --cc=bfields@fieldses.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=ross.zwisler@linux.intel.com \
    --cc=trond.myklebust@primarydata.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.