Re: [PATCH] nfs4: don't map EACCESS and EPERM to EIO

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2023-06-08 at 19:42 +0200, Tigran Mkrtchyan wrote:
> Hi Trond,
> 
> I will check and let you know. What we see is EACCESS on layoutget
> reported as EIO to the applications
> 

If this is for a write, then that might just be
nfs_mapping_set_error(). In newer kernels, it tries to avoid sending
errors that are unexpected for strictly POSIX applications.

Cheers
  Trond

> Best regards,
> Tigran 
> 
> 
> On June 8, 2023 5:33:16 PM GMT+02:00, Trond Myklebust
> <trondmy@xxxxxxxxxxxxxxx> wrote:
> > Hi Tigran,
> > 
> > On Thu, 2023-06-08 at 16:49 +0200, Tigran Mkrtchyan wrote:
> > > the nfs4_map_errors function converts NFS specific errors to
> > > userland
> > > errors. However, it ignores NFS4ERR_PERM and EPERM, which then
> > > get
> > > mapped to EIO.
> > > 
> > > Signed-off-by: Tigran Mkrtchyan
> > > <tigran.mkrtchyan@xxxxxxx> fs/nfs/nfs4proc.c | 2 ++
> > >  1 file changed, 2 insertions(+)
> > > 
> > > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> > > index d3665390c4cb..795205fe4f30 100644
> > > --- a/fs/nfs/nfs4proc.c
> > > +++ b/fs/nfs/nfs4proc.c
> > > @@ -171,12 +171,14 @@ static int nfs4_map_errors(int err)
> > >         case -NFS4ERR_LAYOUTTRYLATER:
> > >         case -NFS4ERR_RECALLCONFLICT:
> > >                 return -EREMOTEIO;
> > > +       case -NFS4ERR_PERM:
> > >         case -NFS4ERR_WRONGSEC:
> > >         case -NFS4ERR_WRONG_CRED:
> > >                 return -EPERM;
> > >         case -NFS4ERR_BADOWNER:
> > >         case -NFS4ERR_BADNAME:
> > >                 return -EINVAL;
> > > +       case -NFS4ERR_ACCESS:
> > >         case -NFS4ERR_SHARE_DENIED:
> > >                 return -EACCES;
> > >         case -NFS4ERR_MINOR_VERS_MISMATCH:
> > > 
> > 
> > Hmm... Aren't both these cases covered by the exception at the top
> > of
> > the function?
> > 
> > static int nfs4_map_errors(int err)
> > {
> >         if (err >= -1000)
> >                 return err;
> > 
> > As I read it, that should mean that err = -NFS4ERR_ACCESS (= -13)
> > and
> > err = -NFS4ERR_PERM (= -1) will get returned verbatim.
> > 
> > Are you seeing these NFS4ERR_ACCESS and NFS4ERR_PERM cases hitting
> > the
> > default: dprintk() when you turn it on?
> > 

-- 
Trond Myklebust 
CTO, Hammerspace Inc 
1900 S Norfolk St, Suite 350 - #45 
San Mateo, CA 94403 
​
www.hammerspace.com




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux