Message ID | 20240829010424.83693-3-snitzer@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | nfs/nfsd: add support for LOCALIO | expand |
On Wed, 2024-08-28 at 21:03 -0400, Mike Snitzer wrote: > 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> > --- > fs/nfs/nfs4xdr.c | 67 -------------------------------------- > fs/nfs_common/common.c | 67 ++++++++++++++++++++++++++++++++++++++ > include/linux/nfs_common.h | 1 + > 3 files changed, 68 insertions(+), 67 deletions(-) > > diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c > index b4091af1a60d..971305bdaecb 100644 > --- a/fs/nfs/nfs4xdr.c > +++ b/fs/nfs/nfs4xdr.c > @@ -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 */ > diff --git a/fs/nfs_common/common.c b/fs/nfs_common/common.c > index a4ee95da2174..34a115176f97 100644 > --- a/fs/nfs_common/common.c > +++ b/fs/nfs_common/common.c > @@ -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); > diff --git a/include/linux/nfs_common.h b/include/linux/nfs_common.h > index 3395c4a4d372..5fc02df88252 100644 > --- a/include/linux/nfs_common.h > +++ b/include/linux/nfs_common.h > @@ -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 */ Reviewed-by: Jeff Layton <jlayton@kernel.org>
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index b4091af1a60d..971305bdaecb 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -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 */ diff --git a/fs/nfs_common/common.c b/fs/nfs_common/common.c index a4ee95da2174..34a115176f97 100644 --- a/fs/nfs_common/common.c +++ b/fs/nfs_common/common.c @@ -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); diff --git a/include/linux/nfs_common.h b/include/linux/nfs_common.h index 3395c4a4d372..5fc02df88252 100644 --- a/include/linux/nfs_common.h +++ b/include/linux/nfs_common.h @@ -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 */
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> --- fs/nfs/nfs4xdr.c | 67 -------------------------------------- fs/nfs_common/common.c | 67 ++++++++++++++++++++++++++++++++++++++ include/linux/nfs_common.h | 1 + 3 files changed, 68 insertions(+), 67 deletions(-)