[pnfs] FW: CVS: nfsv4

Iyer, Rahul Rahul.Iyer at netapp.com
Wed Jan 31 05:55:40 EST 2007


Or, we could take the simpler approach... Call
nfs4_proc_destroy_session() *after* kill_anon_sb() is called :p
 

> -----Original Message-----
> From: Iyer, Rahul 
> Sent: Wednesday, January 31, 2007 1:26 AM
> To: pnfs at linux-nfs.org
> Subject: [pnfs] FW: CVS: nfsv4
> 
> Forgot to reply all
> Regards
> Rahul
>  
> 
> > -----Original Message-----
> > From: Iyer, Rahul
> > Sent: Wednesday, January 31, 2007 1:11 AM
> > To: 'William A. (Andy) Adamson'
> > Subject: RE: [pnfs] CVS: nfsv4
> > 
> > Hi Andy,
> > I figured out the bug. It was rather stupid on my part. 
> What happens 
> > is that in nfs4_kill_super() I call
> > nfs4_proc_destroy_session() which destroys the session and 
> frees the 
> > session struct. Then, nfs4_kill_super() calls kill_anon_sb(), which 
> > eventually calls clear_inode().
> > Thisresults in a call to pnfs_return_layout() in order to 
> return the 
> > layout. When this tries to setup a sequence op, the session 
> pointer it 
> > needs has been freed.
> > 
> > So, we need something like nfs4_return_all_layouts(). This 
> would walk 
> > the superblock inode list and return any layouts that it 
> might have. 
> > I'll fix this. In time, this function will traverse the 
> layout cache 
> > instead.
> > Regards
> > Rahul
> > 
> > 
> > > -----Original Message-----
> > > From: William A. (Andy) Adamson [mailto:andros at citi.umich.edu]
> > > Sent: Monday, January 29, 2007 1:22 PM
> > > To: Iyer, Rahul
> > > Subject: Re: [pnfs] CVS: nfsv4
> > > 
> > > yes.
> > > 
> > > 
> > > On 1/29/07, Iyer, Rahul <Rahul.Iyer at netapp.com> wrote:
> > > 
> > > 	Was it on the unmount the last time as well?
> > > 	Regards
> > > 	Rahul
> > > 	
> > > 	
> > > 	> -----Original Message-----
> > > 	> From: William A. (Andy) Adamson
> > > [mailto:andros at citi.umich.edu] 
> > > 	> Sent: Monday, January 29, 2007 12:50 PM
> > > 	> To: Iyer, Rahul
> > > 	> Cc: pnfs at linux-nfs.org
> > > 	> Subject: Re: [pnfs] CVS: nfsv4
> > > 	>
> > > 	> whoops! spoke too soon. 
> > > 	>
> > > 	> I mount, traverse into the mount point, vi a file, and then
> > > 	> umount and BANG:
> > > 	>
> > > 	> nfs4_sequence_done() gets called with a NULL data pointer.
> > > 	>
> > > 	> -->Andy
> > > 	>
> > > 	>
> > > 	> On 1/29/07, Iyer, Rahul <Rahul.Iyer at netapp.com> wrote:
> > > 	>
> > > 	>       Cool! I hope we catch this Heisenbug though...
> > > 	>       REGARDS
> > > 	>       Rahul
> > > 	>
> > > 	>
> > > 	>       > -----Original Message-----
> > > 	>       > From: William A. (Andy) Adamson
> > > 	> [mailto:andros at citi.umich.edu ]
> > > 	>       > Sent: Monday, January 29, 2007 10:09 AM 
> > > 	>       > To: Iyer, Rahul
> > > 	>       > Cc: pnfs at linux-nfs.org
> > > 	>       > Subject: Re: [pnfs] CVS: nfsv4
> > > 	>       >
> > > 	>       > hi rahul
> > > 	>       > 
> > > 	>       > i re-ran a kernel without the "null pointer 
> > > fix" and i can't
> > > 	>       > reproduce the problem.
> > > 	>       >
> > > 	>       > so, i can remove the check for the null session in 
> > > 	>       > nfs41_proc_sequence_done() and the null clp in
> > > 	> nfs4_sequence_done()
> > > 	>       >
> > > 	>       > -->Andy
> > > 	>       >
> > > 	>       >
> > > 	>       > On 1/29/07, Iyer, Rahul < 
> > > Rahul.Iyer at netapp.com> wrote:
> > > 	>       >
> > > 	>       >       So, the reason I used 
> > > nfs4_get_renew_cred() was that I
> > > 	>       > didn't want to
> > > 	>       >       send sequence always. If there are no 
> > > open files, then 
> > > 	>       > that's fine... We
> > > 	>       >       do not send a sequence and let the 
> > > clientid (and the
> > > 	>       > associated session)
> > > 	>       >       expire. We can set the session up as 
> > > and when needed 
> > > 	>       > again. AFAICS this
> > > 	>       >       approach sure beats littering the network with
> > > 	> needless traffic.
> > > 	>       >
> > > 	>       >       About the null pointer, what was NULL?
> > > 	>       > Nfs41_proc_sequence() takes 3
> > > 	>       >       arguments - a session pointer, a 
> > > nfs41_sequence_res
> > > 	>       > pointer and a status
> > > 	>       >       int. Which was NULL again and what was 
> > > the test case? 
> > > 	>       >       Regards
> > > 	>       >       Rahul
> > > 	>       >       P.S: I have some uncommitted code... We 
> > > have all pNFS
> > > 	>       > ops except for
> > > 	>       >       LAYOUTCOMMIT and LAYOUTRETURN 
> > > working... We should be 
> > > 	>       > able to finish
> > > 	>       >       that off on Monday and I'll commit it in one go.
> > > 	>       >
> > > 	>       >
> > > 	>       >       > -----Original Message-----
> > > 	>       >       > From: William Andros Adamson [mailto: 
> > > 	>       > andros at citi.umich.edu <mailto:andros at citi.umich.edu> ]
> > > 	>       >       > Sent: Saturday, January 27, 2007 2:48 PM 
> > > 	>       >       > To: pnfs at linux-nfs.org
> > > 	>       >       > Subject: [pnfs] CVS: nfsv4
> > > 	>       >       >
> > > 	>       >       > CVSROOT:      /cvs 
> > > 	>       >       > Module name:  nfsv4
> > > 	>       >       > Changes by:   andros at citi.umich.edu
> > > 	> 2007/01/27 17:48:03
> > > 	>       >       >
> > > 	>       >       > Modified files:
> > > 	>       >       >       cvs/pnfs/fs/nfs: nfs4proc.c nfs4renewd.c
> > > 	>       >       >
> > > 	>       >       > Log message:
> > > 	>       >       > nfs4_get_renew_cred() searches the list of 
> > > 	> stateowners for a
> > > 	>       >       > given nfs4_client and returns the first
> > > 	> credential it finds.
> > > 	>       >       > this works for OP_RENEW which is only needed
> > > 	> when state has 
> > > 	>       >       > been established.
> > > 	>       >       >
> > > 	>       >       > sessions changes the renew strategy:
> > > 	> OP_SEQUENCE is sent with
> > > 	>       >       > every RPC, and a OP_RENEW call must be sent 
> > > 	> caveat lease_time
> > > 	>       >       > even when no OPEN state has been established.
> > > 	>       >       >
> > > 	>       >       > if nfs4_get_renew_cred() fails to 
> > > find a credential,
> > > 	>       > create on with 
> > > 	>       >       > rpcauth_lookupcred() for the renew call under
> > > 	> sessions.
> > > 	>       >       >
> > > 	>       >       > nfs41_proc_sequence_done() can have a NULL
> > > 	> data - at least i 
> > > 	>       >       > hit it in my debugging....
> > > 	>       >       >
> > > 	>       >       > 
> > > _______________________________________________
> > > 	>       >       > pNFS mailing list
> > > 	>       >       > pNFS at linux-nfs.org
> > > 	>       >       > 
> > > http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
> > > 	>       >       > 
> > > 	>       >
> > > 	>       >
> > > 	>       >
> > > 	>       >
> > > 	>       >
> > > 	>
> > > 	>
> > > 	>
> > > 	>
> > > 	>
> > > 	
> > > 	
> > > 
> > > 
> > > 
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
> 


More information about the pNFS mailing list