Re: [PATCH] nfs4: don't map EACCESS and EPERM to EIO
From: Mkrtchyan, Tigran <hidden>
Date: 2023-06-09 13:30:42
Hi Trond, Obviously, the patch is incorrect. The behavior of the upstream kernel and RHEL kernels are different. Sorry for the noise, Tigran. ----- Original Message -----
From: "Trond Myklebust" <redacted> To: anna@kernel.org, "Tigran Mkrtchyan" <redacted> Cc: "linux-nfs" <redacted> Sent: Thursday, 8 June, 2023 19:53:07 Subject: Re: [PATCH] nfs4: don't map EACCESS and EPERM to EIO
On Thu, 2023-06-08 at 19:42 +0200, Tigran Mkrtchyan wrote:quoted
Hi Trond, I will check and let you know. What we see is EACCESS on layoutget reported as EIO to the applicationsIf 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 Trondquoted
Best regards, Tigran On June 8, 2023 5:33:16 PM GMT+02:00, Trond Myklebust [off-list ref] wrote:quoted
Hi Tigran, On Thu, 2023-06-08 at 16:49 +0200, Tigran Mkrtchyan wrote:quoted
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 [off-list ref] 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
Attachments
- smime.p7s [application/pkcs7-signature] 2208 bytes