From: Trond Myklebust <trond.myklebust@fys.uio.no>
To: Neil Brown <neilb@suse.de>
Cc: linux-nfs@vger.kernel.org
Subject: Re: Confused about BUG_ON in rpcb_getport_async
Date: Tue, 12 Aug 2008 16:32:58 -0400 [thread overview]
Message-ID: <1218573178.7253.31.camel@localhost> (raw)
In-Reply-To: <18592.62730.840231.108375-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
On Tue, 2008-08-12 at 12:27 +1000, Neil Brown wrote:
> Hi
> I have a report of a the BUG_ON in rpcb_getport_clnt being
> triggered. This is:
> /* Autobind on cloned rpc clients is discouraged */
> BUG_ON(clnt->cl_parent != clnt);
>
> It looks to me that while they might be discouraged, they are not
> prevented and so having the BUG_ON is wrong.
>
> When rpc_clone_client creates a clone, it sets cl_autobind to 0,
> and gives the new client a reference to the same cl_xprt as the
> original client.
>
> The only effect of cl_autobind is to prevent rpc_force_rebind from
> clearing the BOUND flag on ->cl_xprt.
> So while a call to rpc_force_rebind on the clone will not clear that
> flag, a call on the original client will clear that flag.
>
> So a cloned client can still end up with a ->cl_xprt with the BOUND
> flag clear.
>
> So call_bind (which is present in the call trace under the oops) can
> find that !xprt_bound, even when the client is a cloned client.
>
> When this happens, ->rpcbind, which is rpcb_getport_clnt, goes BOOM.
>
> What should happen when a clone client finds that its transport is no
> longer bound? Should rpc_getport_async just do
> clnt = task->tk_client->cl_parent;
> ??
This shouldn't be a particularly urgent problem, since lockd should
normally be the only thing that needs to use the autobind functionality,
and it does not use cloned clients.
That said, I think that the answer is that cloned clients may indeed use
rpcbind as long as they share the same program number and version as the
parent.
IOW: we should probably rather BUG_ON() calls to rpc_bind_new_program()
if the parent has xprt->cl_autobind set.
Cheers
Trond
next prev parent reply other threads:[~2008-08-12 20:33 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-12 2:27 Confused about BUG_ON in rpcb_getport_async Neil Brown
[not found] ` <18592.62730.840231.108375-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2008-08-12 20:32 ` Trond Myklebust [this message]
2008-08-13 23:45 ` Neil Brown
[not found] ` <18595.29231.61262.220929-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2008-08-14 0:10 ` Trond Myklebust
2008-08-14 2:26 ` Neil Brown
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=1218573178.7253.31.camel@localhost \
--to=trond.myklebust@fys.uio.no \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
/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.