On Fri, 2011-11-11 at 19:45 -0800, Malahal Naineni wrote: > Trond Myklebust [Trond.Myklebust@xxxxxxxxxx] wrote: > > On Fri, 2011-11-11 at 18:04 -0500, Matthew Treinish wrote: > > > +static int nfs4_proc_vfh_lookup(struct rpc_clnt *clnt, struct inode *dir, > > > + struct qstr *name, struct nfs_fh *fhandle, struct nfs_fattr *fattr) > > > +{ > > > + struct nfs4_exception exception = { }; > > > + int err; > > > + do { > > > + int status; > > > + > > > + status = _nfs4_proc_lookup(clnt, dir, name, fhandle, fattr); > > > + switch (status) { > > > + case -NFS4ERR_BADNAME: > > > + return -ENOENT; > > > + case -NFS4ERR_MOVED: > > > + err = nfs4_get_referral(dir, name, fattr, fhandle); > > > + break; > > > + case -NFS4ERR_FHEXPIRED: > > > + return -NFS4ERR_FHEXPIRED; > > > + case -NFS4ERR_WRONGSEC: > > > + nfs_fixup_secinfo_attributes(fattr, fhandle); > > > > case -NFS4ERR_ACCESS: > > ??????? > > > > > + } > > > + err = nfs4_handle_exception(NFS_SERVER(dir), > > > + status, &exception); > > > + } while (exception.retry); > > > + return err; > > > +} > > > + > > > > What execution context is this function going to be running under and > > what guarantees that it actually has the right file access credentials > > to allow it to perform a lookup? > > I imagine, it is in the context of the process that received FHEXPIRED > error. It may not have credentials to perform a lookup on parent > directories. If it doesn't, that would end up with ESTALE with Matt's > patches, right Matt? My point is that if you don't have the ability to pass a credential as an argument, then you won't be able to recover from something like an OPEN, READ or WRITE, which all happen in the rpciod context, nor can you recover from the state recovery thread context. Note also that you are doing synchronous I/O, and so you will need a recovery thread context anyway in order to recover from stuff running in the rpciod context... -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html