[pnfs] [PATCH 1/1] Replaced BUG() with BUG_ON()
Iyer, Rahul
Rahul.Iyer at netapp.com
Wed May 2 16:23:23 EDT 2007
> -----Original Message-----
> From: Benny Halevy [mailto:bhalevy at panasas.com]
> Sent: Wednesday, May 02, 2007 1:20 PM
> To: Iyer, Rahul
> Cc: pnfs at linux-nfs.org
> Subject: Re: [pnfs] [PATCH 1/1] Replaced BUG() with BUG_ON()
>
> The problem I hit is caused by the fact that that I'm not
> using the file layout.
>
> nfs_write_rpcsetup() does not set data->session before
> calling pnfs_try_to_write_data().
>
> When we do the pnfs write via the layout driver there's
> indeed no session in my case.
>
> The files layout driver sets data->session to the DS session as
> data->session = dserver.dev_item->clp->cl_session;
>
> and on the async callback path pnfs4_write_done() is called.
> [note, without properly going through pnfs4_proc_write_setup
> in my case, it is called only when writing to the MDS to to
> the DS via calls to nfs_initiate_write()]
>
> pnfs4_write_done(), in turn, calls the
> NFS_SERVER(inode)->rpc_ops-> sequence_done if not null,
> unconditionally in all cases.
>
> The fix I tested is attached. It calls sequence_done only if
> data->session is not NULL.
>
Yep! The patch looks good.
> Another question is whether calling
> server->rpc_ops->sequence_done is appropriate both for the
> MDS and for the DS case.
>
Isn't it appropriate? There should always be a session between the MDS
and the client regardless of the protocol being used between the client
and the DS.
Thanks
Regards
Rahul
> Benny
>
> Benny Halevy wrote:
> > iyer at netapp.com wrote:
> >> From: Rahul Iyer <iyer at netapp.com>
> >>
> >> Replaced instances of
> >>
> >> if (....)
> >> BUG();
> >>
> >> with
> >>
> >> BUG_on(...);
> >>
> >> Signed-off-by: Rahul Iyer <iyer at netapp.com>
> >> ---
> >> fs/nfs/nfs4proc.c | 31 +++++++++++++------------------
> >> 1 files changed, 13 insertions(+), 18 deletions(-)
> >>
> >> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index
> >> b4ce093..89702cf 100644
> >> --- a/fs/nfs/nfs4proc.c
> >> +++ b/fs/nfs/nfs4proc.c
> >> @@ -222,10 +222,9 @@ static int
> nfs41_proc_sequence_done(struct nfs4_session *session, struct nfs41_s
> >> unsigned long timestamp;
> >> struct nfs4_client *clp;
> >>
> >> - if (!session || !(clp = session->client)) {
> >> - printk(KERN_EMERG "%s is NULL!!!\n",
> (!session)?"session":"clp");
> >> - BUG();
> >> - }
> >> + BUG_ON(!session);
> >
> > Rahul, this BUG_ON introduces a bug :-( Previously the
> function just
> > returned if !session, now it BUG()'s.
> >
> >> + clp = session->client;
> >> + BUG_ON(!clp);
> >>
> >
> > _______________________________________________
> > pNFS mailing list
> > pNFS at linux-nfs.org
> > http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>
>
More information about the pNFS
mailing list