From: Steve Dickson <SteveD@redhat.com>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: Olaf Kirch <okir@suse.de>, Neil Brown <neilb@suse.de>,
Linux NFS Mailing List <linux-nfs@vger.kernel.org>
Subject: Re: nfs-utils: support/nfs/rpcmisc.c
Date: Wed, 28 Jan 2009 07:21:00 -0500 [thread overview]
Message-ID: <49804DAC.2000309@RedHat.com> (raw)
In-Reply-To: <619E3D97-A202-4F6C-B308-B631F470A8E0@oracle.com>
Chuck Lever wrote:
> Hi all-
>
> I've been stuck on updating the rpc_init() function in
> support/nfs/rpcmisc.c to use TI-RPC functions for a while now. This
> week I found yet another issue, and would like to ask your opinion about
> how to architect a solution.
>
> rpc_init() is used only by rpc.statd and rpc.mountd, to set up their RPC
> listeners. It has logic in it to detect the case where fd 0 is a socket
> being passed in from inetd (I think that's what this does).
I would have to agree... why else would a getsockname(0, ....) be done?
>
> It also has some statics to save the UDP and TCP listener xprt's from a
> previous call, so it doesn't create these again. Specifically for
> rpc.statd, rpc_init() is called only once to set up the UDP and TCP
> listeners, so I don't think those statics would ever be referenced after
> being set during the first call.
>
> Does rpc_init() really need to save the xprts for rpc.statd? rpc_init()
> peeks at xp_port in the returned SVC_XPRT to decide whether to use the
> saved xprt, but TI-RPC's service creation API doesn't fill this field
> in. So this logic won't even work for xprts created with TI-RPC calls.
> I seem to recall seeing some code in libtirpc that already checks a list
> of xprts to prevent the creation of duplicates.
I would say no... reusing connections is always a tricky proposition at best
and generally fairly error prone... but if we were going to reuse connections
I would like to see the logic broken out into to different routines, similar
to rpc_init() and rpc_reinit()...
>
> I also notice that rpc_init() uses xlog() to report errors, whereas
> rpc.statd uses note(), and does not initialize the xlog() reporting
> framework. So rpc.statd problems in this area are sporadically
> reported, often without any identifying program name.
This is one area that nfs-utils is a bit out of control... every
daemon seems to have it own way of logging...
>
> And, for rpc.statd, do the listener sockets need to be non-blocking?
> There are four paths in rpc_init() that create listener sockets: one is
> by passing RPC_ANYSOCK to the RPC library; one is using the pre-existing
> fd 0 if it's a socket. The other two are local implementations that
> create a fresh socket, but one sets O_NONBLOCK, and the other doesn't.
> As far as I can tell, O_NONBLOCK support was added just for rpc.mountd,
> but three of these four paths probably do not create non-blocking
> listener sockets. What does rpc.statd need?
I would say no... The O_NONBLOCK business seems to be needed for mountd to
run with multiple processes reading from the same socket... Since statd
does not do this, there is no needed for O_NONBLOCK to be set...
>
> I'm considering creating a version of rpc_init() under utils/statd that
> strips out all of the unnecessary features, uses note() instead of
> xlot(), and then adds support for AF_INET6.
I would say... clean it up... esp when it comes to using the same logging
routines...
steved.
next prev parent reply other threads:[~2009-01-28 12:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-27 20:20 nfs-utils: support/nfs/rpcmisc.c Chuck Lever
2009-01-28 12:21 ` Steve Dickson [this message]
[not found] ` <49804DAC.2000309-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2009-01-28 17:59 ` Chuck Lever
2009-01-28 16:37 ` Jeff Layton
[not found] ` <20090128113749.7893533a-RtJpwOs3+0O+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2009-01-28 18:05 ` Chuck Lever
2009-01-28 18:17 ` Jeff Layton
[not found] ` <20090128131707.401de2f1-RtJpwOs3+0O+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2009-01-28 18:19 ` Chuck Lever
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=49804DAC.2000309@RedHat.com \
--to=steved@redhat.com \
--cc=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=okir@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox