[PATCH 11/16] nfsd4: return nfserr_wrongsec

J. Bruce Fields bfields at fieldses.org
Fri May 18 18:28:10 EDT 2007


On Fri, May 18, 2007 at 06:23:05PM -0400, Trond Myklebust wrote:
> On Fri, 2007-05-18 at 17:28 -0400, J. Bruce Fields wrote:
> > +	return nfserr_wrongsec;
> > +}
> 
> Hmm... What about NFSv2/v3 clients? They won't grok nfserr_wrongsec...

I'm fixing it up the same way we do for jukebox; see:

> > --- a/fs/nfsd/nfssvc.c
> > +++ b/fs/nfsd/nfssvc.c
> > @@ -492,6 +492,15 @@ out:
> >  	module_put_and_exit(0);
> >  }
> >  
> > +static __be32 map_new_errors(u32 vers, __be32 nfserr)
> > +{
> > +	if (nfserr == nfserr_jukebox && vers == 2)
> > +		return nfserr_dropit;
> > +	if (nfserr == nfserr_wrongsec && vers < 4)
> > +		return nfserr_perm;
> > +	return nfserr;
> > +}
> > +
> >  int
> >  nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
> >  {
> > @@ -534,6 +543,7 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
> >  
> >  	/* Now call the procedure handler, and encode NFS status. */
> >  	nfserr = proc->pc_func(rqstp, rqstp->rq_argp, rqstp->rq_resp);
> > +	nfserr = map_new_errors(rqstp->rq_vers, nfserr);
> >  	if (nfserr == nfserr_jukebox && rqstp->rq_vers == 2)
> >  		nfserr = nfserr_dropit;
> >  	if (nfserr == nfserr_dropit) {

Does that look sane?

--b.


More information about the NFSv4 mailing list