From: Boaz Harrosh <bharrosh@panasas.com>
To: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: Benny Halevy <bhalevy@panasas.com>,
linux-nfs@vger.kernel.org, pnfs@linux-nfs.org
Subject: Re: [pnfs] [PATCH 08/14] SQUASHME: Removal of ugly #ifdefs
Date: Mon, 15 Jun 2009 11:48:36 +0300 [thread overview]
Message-ID: <4A360AE4.7040803@panasas.com> (raw)
In-Reply-To: <1244998412.5298.0.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
On 06/14/2009 07:53 PM, Trond Myklebust wrote:
> On Sun, 2009-06-14 at 10:30 -0400, Benny Halevy wrote:
>> On Jun. 12, 2009, 1:54 -0400, Ricardo Labiaga <Ricardo.Labiaga@netapp.com> wrote:
>>> [squash with: nfs41: Implement NFSv4.1 callback service process]
>>>
>>> Signed-off-by: Ricardo Labiaga <Ricardo.Labiaga@netapp.com>
>>> ---
>>> fs/nfs/callback.c | 50 +++++++++++++++++++++++++++++++++++---------------
>>> 1 files changed, 35 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
>>> index 4395c96..116424e 100644
>>> --- a/fs/nfs/callback.c
>>> +++ b/fs/nfs/callback.c
>>> @@ -209,6 +209,39 @@ out:
>>> dprintk("--> %s return %p\n", __func__, rqstp);
>>> return rqstp;
>>> }
>>> +
>>> +static inline void nfs_callback_svc_setup(u32 minorversion,
>>> + struct svc_serv *serv, struct rpc_xprt *xprt,
>>> + struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp))
>>> +{
>>> + if (minorversion) {
>>> + *rqstpp = nfs41_callback_up(serv, xprt);
>>> + *callback_svc = nfs41_callback_svc;
>>> + } else {
>>> + *rqstpp = nfs4_callback_up(serv);
>>> + *callback_svc = nfs4_callback_svc;
>>> + }
>>> +}
>>> +
>>> +static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt,
>>> + struct nfs_callback_data *cb_info)
>>> +{
>>> + if (minorversion)
>>> + xprt->bc_serv = cb_info->serv;
>>> +}
>>> +#else
>>> +static inline void nfs_callback_svc_setup(u32 minorversion,
>>> + struct svc_serv *serv, struct rpc_xprt *xprt,
>>> + struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp))
>>> +{
>>> + *rqstpp = nfs4_callback_up(serv);
>>> + *callback_svc = nfs4_callback_svc;
>>> +}
>>> +
>>> +static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt,
>>> + struct nfs_callback_data *cb_info)
>>> +{
>>> +}
>>> #endif /* CONFIG_NFS_V4_1 */
>> Although this removes the ungly #ifdefs from inside nfs_callback_up
>> it just introduces them elsewhere and what's worse, it adds code
>> duplication which is even more unreadable and harder to maintain.
>>
>> How about something along these line?
>>
>> static inline void nfs_callback_svc_setup(u32 minorversion,
>> struct svc_serv *serv, struct rpc_xprt *xprt,
>> struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp))
>> {
>> #ifdef CONFIG_NFS_V4_1
>> if (minorversion) {
>> *rqstpp = nfs41_callback_up(serv, xprt);
>> *callback_svc = nfs41_callback_svc;
>> return;
>> }
>> #endif /* CONFIG_NFS_V4_1 */\
>
> NACK.... That's _exactly_ the kind of unreadable nonsense I _DON'T_ want
> to see....
>
if you do somewhere global
#ifdef CONFIG_NFS_V4_1
...
#else
const int minorversion = 0;
#endif
Then the above if (minorversion) will be optimized out if not CONFIG_NFS_V4_1,
by the compiler. (And as a bonus it still gets parsed even if not defined)
>> *rqstpp = nfs4_callback_up(serv);
>> *callback_svc = nfs4_callback_svc;
>> }
>>
>> static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt,
>> struct nfs_callback_data *cb_info)
>> {
>> #ifdef CONFIG_NFS_V4_1
>> if (minorversion)
>> xprt->bc_serv = cb_info->serv;
>> #endif /* CONFIG_NFS_V4_1 */
>> }
>>
>> Benny
>>
>>>
>>> /*
>>> @@ -225,10 +258,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
>>>
>>> mutex_lock(&nfs_callback_mutex);
>>> if (cb_info->users++ || cb_info->task != NULL) {
>>> -#if defined(CONFIG_NFS_V4_1)
>>> - if (minorversion)
>>> - xprt->bc_serv = cb_info->serv;
>>> -#endif /* CONFIG_NFS_V4_1 */
>>> + nfs_callback_bc_serv(minorversion, xprt, cb_info);
>>> goto out;
>>> }
>>> serv = svc_create(&nfs4_callback_program, NFS4_CALLBACK_BUFSIZE, NULL);
>>> @@ -239,17 +269,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
>>>
>>> /* FIXME: either 4.0 or 4.1 callback service can be up at a time
>>> * need to monitor and control them both */
>>> - if (!minorversion) {
>>> - rqstp = nfs4_callback_up(serv);
>>> - callback_svc = nfs4_callback_svc;
>>> - } else {
>>> -#if defined(CONFIG_NFS_V4_1)
>>> - rqstp = nfs41_callback_up(serv, xprt);
>>> - callback_svc = nfs41_callback_svc;
>>> -#else /* CONFIG_NFS_V4_1 */
>>> - BUG();
>>> -#endif /* CONFIG_NFS_V4_1 */
>>> - }
>>> + nfs_callback_svc_setup(minorversion, serv, xprt, &rqstp, &callback_svc);
>>>
>>> if (IS_ERR(rqstp)) {
>>> ret = PTR_ERR(rqstp);
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
Boaz
next prev parent reply other threads:[~2009-06-15 9:03 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-12 5:54 [PATCH 0/14] Updates to nfs41 client backchannel for 2.6.31 Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 01/14] SQUASHME: Type check arguments of nfs_callback_up Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 02/14] SQUASHME: Update copyright notice and explain page allocation Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 03/14] SQUASHME: Update Copyright notice and fix formatting Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 04/14] SQUASHME: rpc_count_iostats incorrectly exits early Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 05/14] SQUASHME: Convert rpc_reply_expected() to inline function Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 06/14] SQUASHME: Remove unnecessary BUG_ON() Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 07/14] SQUASHME: Rename variable Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 08/14] SQUASHME: Removal of ugly #ifdefs Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 09/14] SQUASHME: nfs41: sunrpc: Add RPC direction back into the XDR buffer Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 10/14] SQUASHME: nfs41: sunrpc: Don't skip past the RPC call direction Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 11/14] SQUASHME: Moves embedded #ifdefs into #ifdef function blocks Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 12/14] SQUASHME: Removes bc_svc_process() declaration Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 13/14] SQUASHME: Move bc_svc_process() declaration to correct patch Ricardo Labiaga
2009-06-12 5:54 ` [PATCH 14/14] SQUASHME: Update copyright Ricardo Labiaga
2009-06-14 14:39 ` [PATCH 11/14] SQUASHME: Moves embedded #ifdefs into #ifdef function blocks Benny Halevy
2009-06-14 16:55 ` Trond Myklebust
2009-06-14 14:34 ` [PATCH 10/14] SQUASHME: nfs41: sunrpc: Don't skip past the RPC call direction Benny Halevy
2009-06-15 15:37 ` Labiaga, Ricardo
2009-06-12 14:22 ` [PATCH 09/14] SQUASHME: nfs41: sunrpc: Add RPC direction back into the XDR buffer Benny Halevy
2009-06-12 15:07 ` Labiaga, Ricardo
2009-06-14 14:30 ` [PATCH 08/14] SQUASHME: Removal of ugly #ifdefs Benny Halevy
2009-06-14 16:53 ` Trond Myklebust
[not found] ` <1244998412.5298.0.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-06-15 8:48 ` Boaz Harrosh [this message]
2009-06-15 15:31 ` Labiaga, Ricardo
2009-06-15 16:59 ` Halevy, Benny
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=4A360AE4.7040803@panasas.com \
--to=bharrosh@panasas.com \
--cc=Trond.Myklebust@netapp.com \
--cc=bhalevy@panasas.com \
--cc=linux-nfs@vger.kernel.org \
--cc=pnfs@linux-nfs.org \
/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.