]> git.infradead.org Git - users/hch/misc.git/commitdiff
nfs_common: factor out nfs4_errtbl and nfs4_stat_to_errno
authorMike Snitzer <snitzer@kernel.org>
Thu, 5 Sep 2024 19:09:36 +0000 (15:09 -0400)
committerAnna Schumaker <anna.schumaker@oracle.com>
Mon, 23 Sep 2024 19:03:29 +0000 (15:03 -0400)
Common nfs4_stat_to_errno() is used by fs/nfs/nfs4xdr.c and will be
used by fs/nfs/localio.c

Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: NeilBrown <neilb@suse.de>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
fs/nfs/nfs4xdr.c
fs/nfs_common/common.c
include/linux/nfs_common.h

index b61ffe6b9851489a3270b608ad40339c633a8b70..18d268029b1c3d1824bb7ac266546679c31c2ad3 100644 (file)
@@ -65,7 +65,6 @@
 #define NFSDBG_FACILITY                NFSDBG_XDR
 
 struct compound_hdr;
-static int nfs4_stat_to_errno(int);
 static void encode_layoutget(struct xdr_stream *xdr,
                             const struct nfs4_layoutget_args *args,
                             struct compound_hdr *hdr);
@@ -7619,72 +7618,6 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
        return 0;
 }
 
-/*
- * We need to translate between nfs status return values and
- * the local errno values which may not be the same.
- */
-static struct {
-       int stat;
-       int errno;
-} nfs_errtbl[] = {
-       { NFS4_OK,              0               },
-       { NFS4ERR_PERM,         -EPERM          },
-       { NFS4ERR_NOENT,        -ENOENT         },
-       { NFS4ERR_IO,           -errno_NFSERR_IO},
-       { NFS4ERR_NXIO,         -ENXIO          },
-       { NFS4ERR_ACCESS,       -EACCES         },
-       { NFS4ERR_EXIST,        -EEXIST         },
-       { NFS4ERR_XDEV,         -EXDEV          },
-       { NFS4ERR_NOTDIR,       -ENOTDIR        },
-       { NFS4ERR_ISDIR,        -EISDIR         },
-       { NFS4ERR_INVAL,        -EINVAL         },
-       { NFS4ERR_FBIG,         -EFBIG          },
-       { NFS4ERR_NOSPC,        -ENOSPC         },
-       { NFS4ERR_ROFS,         -EROFS          },
-       { NFS4ERR_MLINK,        -EMLINK         },
-       { NFS4ERR_NAMETOOLONG,  -ENAMETOOLONG   },
-       { NFS4ERR_NOTEMPTY,     -ENOTEMPTY      },
-       { NFS4ERR_DQUOT,        -EDQUOT         },
-       { NFS4ERR_STALE,        -ESTALE         },
-       { NFS4ERR_BADHANDLE,    -EBADHANDLE     },
-       { NFS4ERR_BAD_COOKIE,   -EBADCOOKIE     },
-       { NFS4ERR_NOTSUPP,      -ENOTSUPP       },
-       { NFS4ERR_TOOSMALL,     -ETOOSMALL      },
-       { NFS4ERR_SERVERFAULT,  -EREMOTEIO      },
-       { NFS4ERR_BADTYPE,      -EBADTYPE       },
-       { NFS4ERR_LOCKED,       -EAGAIN         },
-       { NFS4ERR_SYMLINK,      -ELOOP          },
-       { NFS4ERR_OP_ILLEGAL,   -EOPNOTSUPP     },
-       { NFS4ERR_DEADLOCK,     -EDEADLK        },
-       { NFS4ERR_NOXATTR,      -ENODATA        },
-       { NFS4ERR_XATTR2BIG,    -E2BIG          },
-       { -1,                   -EIO            }
-};
-
-/*
- * Convert an NFS error code to a local one.
- * This one is used jointly by NFSv2 and NFSv3.
- */
-static int
-nfs4_stat_to_errno(int stat)
-{
-       int i;
-       for (i = 0; nfs_errtbl[i].stat != -1; i++) {
-               if (nfs_errtbl[i].stat == stat)
-                       return nfs_errtbl[i].errno;
-       }
-       if (stat <= 10000 || stat > 10100) {
-               /* The server is looney tunes. */
-               return -EREMOTEIO;
-       }
-       /* If we cannot translate the error, the recovery routines should
-        * handle it.
-        * Note: remaining NFSv4 error codes have values > 10000, so should
-        * not conflict with native Linux error codes.
-        */
-       return -stat;
-}
-
 #ifdef CONFIG_NFS_V4_2
 #include "nfs42xdr.c"
 #endif /* CONFIG_NFS_V4_2 */
index a4ee95da2174e1e497fac676034e37589d1b95a6..34a115176f97ebff1db2a39dfd6c6e8789492612 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <linux/module.h>
 #include <linux/nfs_common.h>
+#include <linux/nfs4.h>
 
 /*
  * We need to translate between nfs status return values and
@@ -65,3 +66,69 @@ int nfs_stat_to_errno(enum nfs_stat status)
        return nfs_errtbl[i].errno;
 }
 EXPORT_SYMBOL_GPL(nfs_stat_to_errno);
+
+/*
+ * We need to translate between nfs v4 status return values and
+ * the local errno values which may not be the same.
+ */
+static const struct {
+       int stat;
+       int errno;
+} nfs4_errtbl[] = {
+       { NFS4_OK,              0               },
+       { NFS4ERR_PERM,         -EPERM          },
+       { NFS4ERR_NOENT,        -ENOENT         },
+       { NFS4ERR_IO,           -errno_NFSERR_IO},
+       { NFS4ERR_NXIO,         -ENXIO          },
+       { NFS4ERR_ACCESS,       -EACCES         },
+       { NFS4ERR_EXIST,        -EEXIST         },
+       { NFS4ERR_XDEV,         -EXDEV          },
+       { NFS4ERR_NOTDIR,       -ENOTDIR        },
+       { NFS4ERR_ISDIR,        -EISDIR         },
+       { NFS4ERR_INVAL,        -EINVAL         },
+       { NFS4ERR_FBIG,         -EFBIG          },
+       { NFS4ERR_NOSPC,        -ENOSPC         },
+       { NFS4ERR_ROFS,         -EROFS          },
+       { NFS4ERR_MLINK,        -EMLINK         },
+       { NFS4ERR_NAMETOOLONG,  -ENAMETOOLONG   },
+       { NFS4ERR_NOTEMPTY,     -ENOTEMPTY      },
+       { NFS4ERR_DQUOT,        -EDQUOT         },
+       { NFS4ERR_STALE,        -ESTALE         },
+       { NFS4ERR_BADHANDLE,    -EBADHANDLE     },
+       { NFS4ERR_BAD_COOKIE,   -EBADCOOKIE     },
+       { NFS4ERR_NOTSUPP,      -ENOTSUPP       },
+       { NFS4ERR_TOOSMALL,     -ETOOSMALL      },
+       { NFS4ERR_SERVERFAULT,  -EREMOTEIO      },
+       { NFS4ERR_BADTYPE,      -EBADTYPE       },
+       { NFS4ERR_LOCKED,       -EAGAIN         },
+       { NFS4ERR_SYMLINK,      -ELOOP          },
+       { NFS4ERR_OP_ILLEGAL,   -EOPNOTSUPP     },
+       { NFS4ERR_DEADLOCK,     -EDEADLK        },
+       { NFS4ERR_NOXATTR,      -ENODATA        },
+       { NFS4ERR_XATTR2BIG,    -E2BIG          },
+       { -1,                   -EIO            }
+};
+
+/*
+ * Convert an NFS error code to a local one.
+ * This one is used by NFSv4.
+ */
+int nfs4_stat_to_errno(int stat)
+{
+       int i;
+       for (i = 0; nfs4_errtbl[i].stat != -1; i++) {
+               if (nfs4_errtbl[i].stat == stat)
+                       return nfs4_errtbl[i].errno;
+       }
+       if (stat <= 10000 || stat > 10100) {
+               /* The server is looney tunes. */
+               return -EREMOTEIO;
+       }
+       /* If we cannot translate the error, the recovery routines should
+        * handle it.
+        * Note: remaining NFSv4 error codes have values > 10000, so should
+        * not conflict with native Linux error codes.
+        */
+       return -stat;
+}
+EXPORT_SYMBOL_GPL(nfs4_stat_to_errno);
index 3395c4a4d372044bd7cd62a41d0c3e8e46bc3c89..5fc02df882521e11ec9b43e9c0fd89db566223d1 100644 (file)
@@ -12,5 +12,6 @@
 #define errno_NFSERR_IO EIO
 
 int nfs_stat_to_errno(enum nfs_stat status);
+int nfs4_stat_to_errno(int stat);
 
 #endif /* _LINUX_NFS_COMMON_H */