[PATCH] Add EMFILE to nfsd errors

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

 



This patch adds the EMFILE to nfsd errors for better error output.

I've encountered a hard-to-debug situation, when I used a fuse under an NFS export, because of a 'too many open files' error.

Before the patch nfsd warns with this message:
'nfsd4_process_open2 failed to open newly-created file! status=5'  (5: EIO)

After the patch:
'nfsd4_process_open2 failed to open newly-created file! status=24' (24: EMFILE)

Also the client returns with EREMOTEIO instead of EIO, which indicates a server error from the NFS client side.

Signed-off-by: Armin ZENTAI <armin@xxxxxxxxxxx>
---
 fs/nfsd/nfsd.h           | 1 +
 fs/nfsd/nfsproc.c        | 1 +
 include/uapi/linux/nfs.h | 1 +
 3 files changed, 3 insertions(+)

diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
index 066899929863..19a269d75fb5 100644
--- a/fs/nfsd/nfsd.h
+++ b/fs/nfsd/nfsd.h
@@ -217,6 +217,7 @@ void		nfsd_lockd_shutdown(void);
 #define	nfserr_cb_path_down	cpu_to_be32(NFSERR_CB_PATH_DOWN)
 #define	nfserr_locked		cpu_to_be32(NFSERR_LOCKED)
 #define	nfserr_wrongsec		cpu_to_be32(NFSERR_WRONGSEC)
+#define nfserr_emfile  		cpu_to_be32(NFSERR_EMFILE)
 #define nfserr_badiomode		cpu_to_be32(NFS4ERR_BADIOMODE)
 #define nfserr_badlayout		cpu_to_be32(NFS4ERR_BADLAYOUT)
 #define nfserr_bad_session_digest	cpu_to_be32(NFS4ERR_BAD_SESSION_DIGEST)
diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c
index 0d20fd161225..ff9e883c7829 100644
--- a/fs/nfsd/nfsproc.c
+++ b/fs/nfsd/nfsproc.c
@@ -810,6 +810,7 @@ nfserrno (int errno)
 		{ nfserr_serverfault, -ENFILE },
 		{ nfserr_io, -EUCLEAN },
 		{ nfserr_perm, -ENOKEY },
+		{ nfserr_emfile, -EMFILE },
 	};
 	int	i;

diff --git a/include/uapi/linux/nfs.h b/include/uapi/linux/nfs.h
index 946cb62d64b0..dcb0ea33f2db 100644
--- a/include/uapi/linux/nfs.h
+++ b/include/uapi/linux/nfs.h
@@ -57,6 +57,7 @@
 	NFSERR_NOTDIR = 20,		/* v2 v3 v4 */
 	NFSERR_ISDIR = 21,		/* v2 v3 v4 */
 	NFSERR_INVAL = 22,		/* v2 v3 v4 */
+	NFSERR_EMFILE = 24,		/* v2 v3 v4 */
 	NFSERR_FBIG = 27,		/* v2 v3 v4 */
 	NFSERR_NOSPC = 28,		/* v2 v3 v4 */
 	NFSERR_ROFS = 30,		/* v2 v3 v4 */
--
2.11.0




[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