mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Highlights include:
 
 Bugfixes:
  - Fix for an Oops in the NFSv4.2 listxattr handler
  - Correct an incorrect buffer size in listxattr
  - Fix for an Oops in the pNFS flexfiles layout
  - Fix a refcount leak in NFS O_DIRECT writes
  - Fix missing locking in NFS O_DIRECT
  - Avoid an infinite loop in pnfs_update_layout
  - Fix an overflow in the RPC waitqueue queue length counter
  - Ensure that pNFS I/O is also protected by TLS when xprtsec
    is specified by the mount options
  - Fix a leaked folio lock in the netfs read code
  - Fix a potential deadlock in fscache
  - Allow setting the fscache uniquifier in NFSv4
  - Fix an off by one in root_nfs_cat()
  - Fix another off by one in rpc_sockaddr2uaddr()
  - nfs4_do_open() can incorrectly trigger state recovery.
  - Various fixes for connection shutdown
 
 Features and cleanups:
  - Ensure that containers only see their own RPC and NFS stats
  - Enable nconnect for RDMA
  - Remove dead code from nfs_writepage_locked()
  - Various tracepoint additions to track EXCHANGE_ID, GETDEVICEINFO, and
    mount options.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEESQctxSBg8JpV8KqEZwvnipYKAPIFAmX14K0ACgkQZwvnipYK
 APLCeg/7Bdah7158TdNxSQAHPo3jzDqZmc933eZC0H8C9whNlu6XIa9fyT6ZrsQr
 qkQ/ztSwsB6yp6vLPSnVdDh5KsndwrInTB874H8y6+8x+KwwuhSQ7Uy8epg5wrO0
 kgiaRYSH7HB7EgUdNY14fHNXkA/DMLHz1F1aw2NVGCYmVCMg7kGV4wYCOH6bI2Ea
 Wu8amZce6D1AbktbdSZcEz2ricR3lGXjCUPMnzRCaSpUmdd2t7d/rsnjTeKU1gb4
 p9zLlOZs9Xe2vMT0ZQI8SEI+Scze82LBy7ykSKyhOjOt4AurVpzQFAvK+3dFZoIq
 lzIHJwabBGNui26CR1k90ZqERLkkk+24i3ccT28HwhTqe5eM/qDCKOVQmuP0F1F8
 QYsnIM+NnmPZveSGAMdOQwlGFQTyJbT5Na1blHTW2R2rjqBzgvfn8fR0vV4L5P7B
 0J8ShmZKVkvb7mtJJhaaI4LF41ciCF8+I5zwpnYQi0tsX370XPNNFbzS3BmPUVFL
 k0uEMVfNy69PkaH4DJWQT9GoE3qiAamkO+EdAlPad6b8QMdJJZxXOmaUzL8YsCHV
 sX5ugsih/Hf5/+QFBCbHEy7G3oeeHsT80yO8nvGT+yy94bv4F+WcM/tviyRbKrls
 t5audBDNRfrAeUlqAQkXfFmAyqP2CGNr29oL62cXL2muFG7d7ys=
 =5n+X
 -----END PGP SIGNATURE-----
Merge tag 'nfs-for-6.9-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust:
 "Highlights include:
  Bugfixes:
   - Fix for an Oops in the NFSv4.2 listxattr handler
   - Correct an incorrect buffer size in listxattr
   - Fix for an Oops in the pNFS flexfiles layout
   - Fix a refcount leak in NFS O_DIRECT writes
   - Fix missing locking in NFS O_DIRECT
   - Avoid an infinite loop in pnfs_update_layout
   - Fix an overflow in the RPC waitqueue queue length counter
   - Ensure that pNFS I/O is also protected by TLS when xprtsec is
     specified by the mount options
   - Fix a leaked folio lock in the netfs read code
   - Fix a potential deadlock in fscache
   - Allow setting the fscache uniquifier in NFSv4
   - Fix an off by one in root_nfs_cat()
   - Fix another off by one in rpc_sockaddr2uaddr()
   - nfs4_do_open() can incorrectly trigger state recovery
   - Various fixes for connection shutdown
  Features and cleanups:
   - Ensure that containers only see their own RPC and NFS stats
   - Enable nconnect for RDMA
   - Remove dead code from nfs_writepage_locked()
   - Various tracepoint additions to track EXCHANGE_ID, GETDEVICEINFO,
     and mount options"
* tag 'nfs-for-6.9-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (29 commits)
  nfs: fix panic when nfs4_ff_layout_prepare_ds() fails
  NFS: trace the uniquifier of fscache
  NFS: Read unlock folio on nfs_page_create_from_folio() error
  NFS: remove unused variable nfs_rpcstat
  nfs: fix UAF in direct writes
  nfs: properly protect nfs_direct_req fields
  NFS: enable nconnect for RDMA
  NFSv4: nfs4_do_open() is incorrectly triggering state recovery
  NFS: avoid infinite loop in pnfs_update_layout.
  NFS: remove sync_mode test from nfs_writepage_locked()
  NFSv4.1/pnfs: fix NFS with TLS in pnfs
  NFS: Fix an off by one in root_nfs_cat()
  nfs: make the rpc_stat per net namespace
  nfs: expose /proc/net/sunrpc/nfs in net namespaces
  sunrpc: add a struct rpc_stats arg to rpc_create_args
  nfs: remove unused NFS_CALL macro
  NFSv4.1: add tracepoint to trunked nfs4_exchange_id calls
  NFS: Fix nfs_netfs_issue_read() xarray locking for writeback interrupt
  SUNRPC: increase size of rpc_wait_queue.qlen from unsigned short to unsigned int
  nfs: fix regression in handling of fsc= option in NFSv4
  ...
		
	
			
		
			
				
	
	
		
			422 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			422 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
/*
 | 
						|
 * Display helpers for NFS protocol elements
 | 
						|
 *
 | 
						|
 * Author: Chuck Lever <chuck.lever@oracle.com>
 | 
						|
 *
 | 
						|
 * Copyright (c) 2020, Oracle and/or its affiliates.
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/nfs.h>
 | 
						|
#include <linux/nfs4.h>
 | 
						|
#include <uapi/linux/nfs.h>
 | 
						|
 | 
						|
TRACE_DEFINE_ENUM(NFS_OK);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_PERM);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_NOENT);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_IO);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_NXIO);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_EAGAIN);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_ACCES);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_EXIST);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_XDEV);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_NODEV);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_NOTDIR);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_ISDIR);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_INVAL);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_FBIG);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_NOSPC);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_ROFS);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_MLINK);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_OPNOTSUPP);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_NAMETOOLONG);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_NOTEMPTY);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_DQUOT);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_STALE);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_REMOTE);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_WFLUSH);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_BADHANDLE);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_NOT_SYNC);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_BAD_COOKIE);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_NOTSUPP);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_TOOSMALL);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_SERVERFAULT);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_BADTYPE);
 | 
						|
TRACE_DEFINE_ENUM(NFSERR_JUKEBOX);
 | 
						|
 | 
						|
#define show_nfs_status(x) \
 | 
						|
	__print_symbolic(x, \
 | 
						|
		{ NFS_OK,			"OK" }, \
 | 
						|
		{ NFSERR_PERM,			"PERM" }, \
 | 
						|
		{ NFSERR_NOENT,			"NOENT" }, \
 | 
						|
		{ NFSERR_IO,			"IO" }, \
 | 
						|
		{ NFSERR_NXIO,			"NXIO" }, \
 | 
						|
		{ ECHILD,			"CHILD" }, \
 | 
						|
		{ NFSERR_EAGAIN,		"AGAIN" }, \
 | 
						|
		{ NFSERR_ACCES,			"ACCES" }, \
 | 
						|
		{ NFSERR_EXIST,			"EXIST" }, \
 | 
						|
		{ NFSERR_XDEV,			"XDEV" }, \
 | 
						|
		{ NFSERR_NODEV,			"NODEV" }, \
 | 
						|
		{ NFSERR_NOTDIR,		"NOTDIR" }, \
 | 
						|
		{ NFSERR_ISDIR,			"ISDIR" }, \
 | 
						|
		{ NFSERR_INVAL,			"INVAL" }, \
 | 
						|
		{ NFSERR_FBIG,			"FBIG" }, \
 | 
						|
		{ NFSERR_NOSPC,			"NOSPC" }, \
 | 
						|
		{ NFSERR_ROFS,			"ROFS" }, \
 | 
						|
		{ NFSERR_MLINK,			"MLINK" }, \
 | 
						|
		{ NFSERR_OPNOTSUPP,		"OPNOTSUPP" }, \
 | 
						|
		{ NFSERR_NAMETOOLONG,		"NAMETOOLONG" }, \
 | 
						|
		{ NFSERR_NOTEMPTY,		"NOTEMPTY" }, \
 | 
						|
		{ NFSERR_DQUOT,			"DQUOT" }, \
 | 
						|
		{ NFSERR_STALE,			"STALE" }, \
 | 
						|
		{ NFSERR_REMOTE,		"REMOTE" }, \
 | 
						|
		{ NFSERR_WFLUSH,		"WFLUSH" }, \
 | 
						|
		{ NFSERR_BADHANDLE,		"BADHANDLE" }, \
 | 
						|
		{ NFSERR_NOT_SYNC,		"NOTSYNC" }, \
 | 
						|
		{ NFSERR_BAD_COOKIE,		"BADCOOKIE" }, \
 | 
						|
		{ NFSERR_NOTSUPP,		"NOTSUPP" }, \
 | 
						|
		{ NFSERR_TOOSMALL,		"TOOSMALL" }, \
 | 
						|
		{ NFSERR_SERVERFAULT,		"REMOTEIO" }, \
 | 
						|
		{ NFSERR_BADTYPE,		"BADTYPE" }, \
 | 
						|
		{ NFSERR_JUKEBOX,		"JUKEBOX" })
 | 
						|
 | 
						|
TRACE_DEFINE_ENUM(NFS_UNSTABLE);
 | 
						|
TRACE_DEFINE_ENUM(NFS_DATA_SYNC);
 | 
						|
TRACE_DEFINE_ENUM(NFS_FILE_SYNC);
 | 
						|
 | 
						|
#define show_nfs_stable_how(x) \
 | 
						|
	__print_symbolic(x, \
 | 
						|
		{ NFS_UNSTABLE,			"UNSTABLE" }, \
 | 
						|
		{ NFS_DATA_SYNC,		"DATA_SYNC" }, \
 | 
						|
		{ NFS_FILE_SYNC,		"FILE_SYNC" })
 | 
						|
 | 
						|
TRACE_DEFINE_ENUM(NFS4_OK);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_ACCESS);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_ATTRNOTSUPP);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_ADMIN_REVOKED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BACK_CHAN_BUSY);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADCHAR);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADHANDLE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADIOMODE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADLAYOUT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADLABEL);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADNAME);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADOWNER);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADSESSION);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADSLOT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADTYPE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BADXDR);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BAD_COOKIE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BAD_HIGH_SLOT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BAD_RANGE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BAD_SEQID);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BAD_SESSION_DIGEST);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_BAD_STATEID);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_CB_PATH_DOWN);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_CLID_INUSE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_CLIENTID_BUSY);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_COMPLETE_ALREADY);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_CONN_NOT_BOUND_TO_SESSION);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_DEADLOCK);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_DEADSESSION);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_DELAY);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_DELEG_ALREADY_WANTED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_DELEG_REVOKED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_DENIED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_DIRDELEG_UNAVAIL);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_DQUOT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_ENCR_ALG_UNSUPP);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_EXIST);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_EXPIRED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_FBIG);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_FHEXPIRED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_FILE_OPEN);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_GRACE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_HASH_ALG_UNSUPP);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_INVAL);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_IO);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_ISDIR);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_LAYOUTTRYLATER);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_LAYOUTUNAVAILABLE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_LEASE_MOVED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_LOCKED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_LOCKS_HELD);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_LOCK_RANGE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_MINOR_VERS_MISMATCH);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_MLINK);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_MOVED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NAMETOOLONG);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NOENT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NOFILEHANDLE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NOMATCHING_LAYOUT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NOSPC);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NOTDIR);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NOTEMPTY);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NOTSUPP);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NOT_ONLY_OP);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NOT_SAME);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NO_GRACE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_NXIO);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_OLD_STATEID);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_OPENMODE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_OP_ILLEGAL);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_OP_NOT_IN_SESSION);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_PERM);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_PNFS_IO_HOLE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_PNFS_NO_LAYOUT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_RECALLCONFLICT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_RECLAIM_BAD);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_RECLAIM_CONFLICT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_REJECT_DELEG);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_REP_TOO_BIG);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_REP_TOO_BIG_TO_CACHE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_REQ_TOO_BIG);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_RESOURCE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_RESTOREFH);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_RETRY_UNCACHED_REP);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_RETURNCONFLICT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_ROFS);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_SAME);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_SHARE_DENIED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_SEQUENCE_POS);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_SEQ_FALSE_RETRY);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_SEQ_MISORDERED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_SERVERFAULT);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_STALE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_STALE_CLIENTID);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_STALE_STATEID);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_SYMLINK);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_TOOSMALL);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_TOO_MANY_OPS);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_UNKNOWN_LAYOUTTYPE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_UNSAFE_COMPOUND);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_WRONGSEC);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_WRONG_CRED);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_WRONG_TYPE);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_XDEV);
 | 
						|
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_RESET_TO_MDS);
 | 
						|
TRACE_DEFINE_ENUM(NFS4ERR_RESET_TO_PNFS);
 | 
						|
 | 
						|
#define show_nfs4_status(x) \
 | 
						|
	__print_symbolic(x, \
 | 
						|
		{ NFS4_OK,			"OK" }, \
 | 
						|
		{ EPERM,			"EPERM" }, \
 | 
						|
		{ ENOENT,			"ENOENT" }, \
 | 
						|
		{ EIO,				"EIO" }, \
 | 
						|
		{ ENXIO,			"ENXIO" }, \
 | 
						|
		{ EACCES,			"EACCES" }, \
 | 
						|
		{ EEXIST,			"EEXIST" }, \
 | 
						|
		{ EXDEV,			"EXDEV" }, \
 | 
						|
		{ ENOTDIR,			"ENOTDIR" }, \
 | 
						|
		{ EISDIR,			"EISDIR" }, \
 | 
						|
		{ EFBIG,			"EFBIG" }, \
 | 
						|
		{ ENOSPC,			"ENOSPC" }, \
 | 
						|
		{ EROFS,			"EROFS" }, \
 | 
						|
		{ EMLINK,			"EMLINK" }, \
 | 
						|
		{ ENAMETOOLONG,			"ENAMETOOLONG" }, \
 | 
						|
		{ ENOTEMPTY,			"ENOTEMPTY" }, \
 | 
						|
		{ EDQUOT,			"EDQUOT" }, \
 | 
						|
		{ ESTALE,			"ESTALE" }, \
 | 
						|
		{ EBADHANDLE,			"EBADHANDLE" }, \
 | 
						|
		{ EBADCOOKIE,			"EBADCOOKIE" }, \
 | 
						|
		{ ENOTSUPP,			"ENOTSUPP" }, \
 | 
						|
		{ ETOOSMALL,			"ETOOSMALL" }, \
 | 
						|
		{ EREMOTEIO,			"EREMOTEIO" }, \
 | 
						|
		{ EBADTYPE,			"EBADTYPE" }, \
 | 
						|
		{ EAGAIN,			"EAGAIN" }, \
 | 
						|
		{ ELOOP,			"ELOOP" }, \
 | 
						|
		{ EOPNOTSUPP,			"EOPNOTSUPP" }, \
 | 
						|
		{ EDEADLK,			"EDEADLK" }, \
 | 
						|
		{ ENOMEM,			"ENOMEM" }, \
 | 
						|
		{ EKEYEXPIRED,			"EKEYEXPIRED" }, \
 | 
						|
		{ ETIMEDOUT,			"ETIMEDOUT" }, \
 | 
						|
		{ ERESTARTSYS,			"ERESTARTSYS" }, \
 | 
						|
		{ ECONNREFUSED,			"ECONNREFUSED" }, \
 | 
						|
		{ ECONNRESET,			"ECONNRESET" }, \
 | 
						|
		{ ENETUNREACH,			"ENETUNREACH" }, \
 | 
						|
		{ EHOSTUNREACH,			"EHOSTUNREACH" }, \
 | 
						|
		{ EHOSTDOWN,			"EHOSTDOWN" }, \
 | 
						|
		{ EPIPE,			"EPIPE" }, \
 | 
						|
		{ EPFNOSUPPORT,			"EPFNOSUPPORT" }, \
 | 
						|
		{ EINVAL,			"EINVAL" }, \
 | 
						|
		{ EPROTONOSUPPORT,		"EPROTONOSUPPORT" }, \
 | 
						|
		{ NFS4ERR_ACCESS,		"ACCESS" }, \
 | 
						|
		{ NFS4ERR_ATTRNOTSUPP,		"ATTRNOTSUPP" }, \
 | 
						|
		{ NFS4ERR_ADMIN_REVOKED,	"ADMIN_REVOKED" }, \
 | 
						|
		{ NFS4ERR_BACK_CHAN_BUSY,	"BACK_CHAN_BUSY" }, \
 | 
						|
		{ NFS4ERR_BADCHAR,		"BADCHAR" }, \
 | 
						|
		{ NFS4ERR_BADHANDLE,		"BADHANDLE" }, \
 | 
						|
		{ NFS4ERR_BADIOMODE,		"BADIOMODE" }, \
 | 
						|
		{ NFS4ERR_BADLAYOUT,		"BADLAYOUT" }, \
 | 
						|
		{ NFS4ERR_BADLABEL,		"BADLABEL" }, \
 | 
						|
		{ NFS4ERR_BADNAME,		"BADNAME" }, \
 | 
						|
		{ NFS4ERR_BADOWNER,		"BADOWNER" }, \
 | 
						|
		{ NFS4ERR_BADSESSION,		"BADSESSION" }, \
 | 
						|
		{ NFS4ERR_BADSLOT,		"BADSLOT" }, \
 | 
						|
		{ NFS4ERR_BADTYPE,		"BADTYPE" }, \
 | 
						|
		{ NFS4ERR_BADXDR,		"BADXDR" }, \
 | 
						|
		{ NFS4ERR_BAD_COOKIE,		"BAD_COOKIE" }, \
 | 
						|
		{ NFS4ERR_BAD_HIGH_SLOT,	"BAD_HIGH_SLOT" }, \
 | 
						|
		{ NFS4ERR_BAD_RANGE,		"BAD_RANGE" }, \
 | 
						|
		{ NFS4ERR_BAD_SEQID,		"BAD_SEQID" }, \
 | 
						|
		{ NFS4ERR_BAD_SESSION_DIGEST,	"BAD_SESSION_DIGEST" }, \
 | 
						|
		{ NFS4ERR_BAD_STATEID,		"BAD_STATEID" }, \
 | 
						|
		{ NFS4ERR_CB_PATH_DOWN,		"CB_PATH_DOWN" }, \
 | 
						|
		{ NFS4ERR_CLID_INUSE,		"CLID_INUSE" }, \
 | 
						|
		{ NFS4ERR_CLIENTID_BUSY,	"CLIENTID_BUSY" }, \
 | 
						|
		{ NFS4ERR_COMPLETE_ALREADY,	"COMPLETE_ALREADY" }, \
 | 
						|
		{ NFS4ERR_CONN_NOT_BOUND_TO_SESSION, "CONN_NOT_BOUND_TO_SESSION" }, \
 | 
						|
		{ NFS4ERR_DEADLOCK,		"DEADLOCK" }, \
 | 
						|
		{ NFS4ERR_DEADSESSION,		"DEAD_SESSION" }, \
 | 
						|
		{ NFS4ERR_DELAY,		"DELAY" }, \
 | 
						|
		{ NFS4ERR_DELEG_ALREADY_WANTED,	"DELEG_ALREADY_WANTED" }, \
 | 
						|
		{ NFS4ERR_DELEG_REVOKED,	"DELEG_REVOKED" }, \
 | 
						|
		{ NFS4ERR_DENIED,		"DENIED" }, \
 | 
						|
		{ NFS4ERR_DIRDELEG_UNAVAIL,	"DIRDELEG_UNAVAIL" }, \
 | 
						|
		{ NFS4ERR_DQUOT,		"DQUOT" }, \
 | 
						|
		{ NFS4ERR_ENCR_ALG_UNSUPP,	"ENCR_ALG_UNSUPP" }, \
 | 
						|
		{ NFS4ERR_EXIST,		"EXIST" }, \
 | 
						|
		{ NFS4ERR_EXPIRED,		"EXPIRED" }, \
 | 
						|
		{ NFS4ERR_FBIG,			"FBIG" }, \
 | 
						|
		{ NFS4ERR_FHEXPIRED,		"FHEXPIRED" }, \
 | 
						|
		{ NFS4ERR_FILE_OPEN,		"FILE_OPEN" }, \
 | 
						|
		{ NFS4ERR_GRACE,		"GRACE" }, \
 | 
						|
		{ NFS4ERR_HASH_ALG_UNSUPP,	"HASH_ALG_UNSUPP" }, \
 | 
						|
		{ NFS4ERR_INVAL,		"INVAL" }, \
 | 
						|
		{ NFS4ERR_IO,			"IO" }, \
 | 
						|
		{ NFS4ERR_ISDIR,		"ISDIR" }, \
 | 
						|
		{ NFS4ERR_LAYOUTTRYLATER,	"LAYOUTTRYLATER" }, \
 | 
						|
		{ NFS4ERR_LAYOUTUNAVAILABLE,	"LAYOUTUNAVAILABLE" }, \
 | 
						|
		{ NFS4ERR_LEASE_MOVED,		"LEASE_MOVED" }, \
 | 
						|
		{ NFS4ERR_LOCKED,		"LOCKED" }, \
 | 
						|
		{ NFS4ERR_LOCKS_HELD,		"LOCKS_HELD" }, \
 | 
						|
		{ NFS4ERR_LOCK_RANGE,		"LOCK_RANGE" }, \
 | 
						|
		{ NFS4ERR_MINOR_VERS_MISMATCH,	"MINOR_VERS_MISMATCH" }, \
 | 
						|
		{ NFS4ERR_MLINK,		"MLINK" }, \
 | 
						|
		{ NFS4ERR_MOVED,		"MOVED" }, \
 | 
						|
		{ NFS4ERR_NAMETOOLONG,		"NAMETOOLONG" }, \
 | 
						|
		{ NFS4ERR_NOENT,		"NOENT" }, \
 | 
						|
		{ NFS4ERR_NOFILEHANDLE,		"NOFILEHANDLE" }, \
 | 
						|
		{ NFS4ERR_NOMATCHING_LAYOUT,	"NOMATCHING_LAYOUT" }, \
 | 
						|
		{ NFS4ERR_NOSPC,		"NOSPC" }, \
 | 
						|
		{ NFS4ERR_NOTDIR,		"NOTDIR" }, \
 | 
						|
		{ NFS4ERR_NOTEMPTY,		"NOTEMPTY" }, \
 | 
						|
		{ NFS4ERR_NOTSUPP,		"NOTSUPP" }, \
 | 
						|
		{ NFS4ERR_NOT_ONLY_OP,		"NOT_ONLY_OP" }, \
 | 
						|
		{ NFS4ERR_NOT_SAME,		"NOT_SAME" }, \
 | 
						|
		{ NFS4ERR_NO_GRACE,		"NO_GRACE" }, \
 | 
						|
		{ NFS4ERR_NXIO,			"NXIO" }, \
 | 
						|
		{ NFS4ERR_OLD_STATEID,		"OLD_STATEID" }, \
 | 
						|
		{ NFS4ERR_OPENMODE,		"OPENMODE" }, \
 | 
						|
		{ NFS4ERR_OP_ILLEGAL,		"OP_ILLEGAL" }, \
 | 
						|
		{ NFS4ERR_OP_NOT_IN_SESSION,	"OP_NOT_IN_SESSION" }, \
 | 
						|
		{ NFS4ERR_PERM,			"PERM" }, \
 | 
						|
		{ NFS4ERR_PNFS_IO_HOLE,		"PNFS_IO_HOLE" }, \
 | 
						|
		{ NFS4ERR_PNFS_NO_LAYOUT,	"PNFS_NO_LAYOUT" }, \
 | 
						|
		{ NFS4ERR_RECALLCONFLICT,	"RECALLCONFLICT" }, \
 | 
						|
		{ NFS4ERR_RECLAIM_BAD,		"RECLAIM_BAD" }, \
 | 
						|
		{ NFS4ERR_RECLAIM_CONFLICT,	"RECLAIM_CONFLICT" }, \
 | 
						|
		{ NFS4ERR_REJECT_DELEG,		"REJECT_DELEG" }, \
 | 
						|
		{ NFS4ERR_REP_TOO_BIG,		"REP_TOO_BIG" }, \
 | 
						|
		{ NFS4ERR_REP_TOO_BIG_TO_CACHE,	"REP_TOO_BIG_TO_CACHE" }, \
 | 
						|
		{ NFS4ERR_REQ_TOO_BIG,		"REQ_TOO_BIG" }, \
 | 
						|
		{ NFS4ERR_RESOURCE,		"RESOURCE" }, \
 | 
						|
		{ NFS4ERR_RESTOREFH,		"RESTOREFH" }, \
 | 
						|
		{ NFS4ERR_RETRY_UNCACHED_REP,	"RETRY_UNCACHED_REP" }, \
 | 
						|
		{ NFS4ERR_RETURNCONFLICT,	"RETURNCONFLICT" }, \
 | 
						|
		{ NFS4ERR_ROFS,			"ROFS" }, \
 | 
						|
		{ NFS4ERR_SAME,			"SAME" }, \
 | 
						|
		{ NFS4ERR_SHARE_DENIED,		"SHARE_DENIED" }, \
 | 
						|
		{ NFS4ERR_SEQUENCE_POS,		"SEQUENCE_POS" }, \
 | 
						|
		{ NFS4ERR_SEQ_FALSE_RETRY,	"SEQ_FALSE_RETRY" }, \
 | 
						|
		{ NFS4ERR_SEQ_MISORDERED,	"SEQ_MISORDERED" }, \
 | 
						|
		{ NFS4ERR_SERVERFAULT,		"SERVERFAULT" }, \
 | 
						|
		{ NFS4ERR_STALE,		"STALE" }, \
 | 
						|
		{ NFS4ERR_STALE_CLIENTID,	"STALE_CLIENTID" }, \
 | 
						|
		{ NFS4ERR_STALE_STATEID,	"STALE_STATEID" }, \
 | 
						|
		{ NFS4ERR_SYMLINK,		"SYMLINK" }, \
 | 
						|
		{ NFS4ERR_TOOSMALL,		"TOOSMALL" }, \
 | 
						|
		{ NFS4ERR_TOO_MANY_OPS,		"TOO_MANY_OPS" }, \
 | 
						|
		{ NFS4ERR_UNKNOWN_LAYOUTTYPE,	"UNKNOWN_LAYOUTTYPE" }, \
 | 
						|
		{ NFS4ERR_UNSAFE_COMPOUND,	"UNSAFE_COMPOUND" }, \
 | 
						|
		{ NFS4ERR_WRONGSEC,		"WRONGSEC" }, \
 | 
						|
		{ NFS4ERR_WRONG_CRED,		"WRONG_CRED" }, \
 | 
						|
		{ NFS4ERR_WRONG_TYPE,		"WRONG_TYPE" }, \
 | 
						|
		{ NFS4ERR_XDEV,			"XDEV" }, \
 | 
						|
		/* ***** Internal to Linux NFS client ***** */ \
 | 
						|
		{ NFS4ERR_RESET_TO_MDS,		"RESET_TO_MDS" }, \
 | 
						|
		{ NFS4ERR_RESET_TO_PNFS,	"RESET_TO_PNFS" })
 | 
						|
 | 
						|
#define show_nfs4_verifier(x) \
 | 
						|
	__print_hex_str(x, NFS4_VERIFIER_SIZE)
 | 
						|
 | 
						|
TRACE_DEFINE_ENUM(IOMODE_READ);
 | 
						|
TRACE_DEFINE_ENUM(IOMODE_RW);
 | 
						|
TRACE_DEFINE_ENUM(IOMODE_ANY);
 | 
						|
 | 
						|
#define show_pnfs_layout_iomode(x) \
 | 
						|
	__print_symbolic(x, \
 | 
						|
		{ IOMODE_READ,			"READ" }, \
 | 
						|
		{ IOMODE_RW,			"RW" }, \
 | 
						|
		{ IOMODE_ANY,			"ANY" })
 | 
						|
 | 
						|
#define show_rca_mask(x) \
 | 
						|
	__print_flags(x, "|", \
 | 
						|
		{ BIT(RCA4_TYPE_MASK_RDATA_DLG),	"RDATA_DLG" }, \
 | 
						|
		{ BIT(RCA4_TYPE_MASK_WDATA_DLG),	"WDATA_DLG" }, \
 | 
						|
		{ BIT(RCA4_TYPE_MASK_DIR_DLG),		"DIR_DLG" }, \
 | 
						|
		{ BIT(RCA4_TYPE_MASK_FILE_LAYOUT),	"FILE_LAYOUT" }, \
 | 
						|
		{ BIT(RCA4_TYPE_MASK_BLK_LAYOUT),	"BLK_LAYOUT" }, \
 | 
						|
		{ BIT(RCA4_TYPE_MASK_OBJ_LAYOUT_MIN),	"OBJ_LAYOUT_MIN" }, \
 | 
						|
		{ BIT(RCA4_TYPE_MASK_OBJ_LAYOUT_MAX),	"OBJ_LAYOUT_MAX" }, \
 | 
						|
		{ BIT(RCA4_TYPE_MASK_OTHER_LAYOUT_MIN),	"OTHER_LAYOUT_MIN" }, \
 | 
						|
		{ BIT(RCA4_TYPE_MASK_OTHER_LAYOUT_MAX),	"OTHER_LAYOUT_MAX" })
 | 
						|
 | 
						|
#define show_nfs4_seq4_status(x) \
 | 
						|
	__print_flags(x, "|", \
 | 
						|
		{ SEQ4_STATUS_CB_PATH_DOWN,		"CB_PATH_DOWN" }, \
 | 
						|
		{ SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING,	"CB_GSS_CONTEXTS_EXPIRING" }, \
 | 
						|
		{ SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED,	"CB_GSS_CONTEXTS_EXPIRED" }, \
 | 
						|
		{ SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED, "EXPIRED_ALL_STATE_REVOKED" }, \
 | 
						|
		{ SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED, "EXPIRED_SOME_STATE_REVOKED" }, \
 | 
						|
		{ SEQ4_STATUS_ADMIN_STATE_REVOKED,	"ADMIN_STATE_REVOKED" }, \
 | 
						|
		{ SEQ4_STATUS_RECALLABLE_STATE_REVOKED,	"RECALLABLE_STATE_REVOKED" }, \
 | 
						|
		{ SEQ4_STATUS_LEASE_MOVED,		"LEASE_MOVED" }, \
 | 
						|
		{ SEQ4_STATUS_RESTART_RECLAIM_NEEDED,	"RESTART_RECLAIM_NEEDED" }, \
 | 
						|
		{ SEQ4_STATUS_CB_PATH_DOWN_SESSION,	"CB_PATH_DOWN_SESSION" }, \
 | 
						|
		{ SEQ4_STATUS_BACKCHANNEL_FAULT,	"BACKCHANNEL_FAULT" })
 | 
						|
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_GETATTR);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_RECALL);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_LAYOUTRECALL);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_NOTIFY);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_PUSH_DELEG);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_RECALL_ANY);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_RECALLABLE_OBJ_AVAIL);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_RECALL_SLOT);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_SEQUENCE);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_WANTS_CANCELLED);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_NOTIFY_LOCK);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_NOTIFY_DEVICEID);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_OFFLOAD);
 | 
						|
TRACE_DEFINE_ENUM(OP_CB_ILLEGAL);
 | 
						|
 | 
						|
#define show_nfs4_cb_op(x) \
 | 
						|
	__print_symbolic(x, \
 | 
						|
		{ 0,				"CB_NULL" }, \
 | 
						|
		{ 1,				"CB_COMPOUND" }, \
 | 
						|
		{ OP_CB_GETATTR,		"CB_GETATTR" }, \
 | 
						|
		{ OP_CB_RECALL,			"CB_RECALL" }, \
 | 
						|
		{ OP_CB_LAYOUTRECALL,		"CB_LAYOUTRECALL" }, \
 | 
						|
		{ OP_CB_NOTIFY,			"CB_NOTIFY" }, \
 | 
						|
		{ OP_CB_PUSH_DELEG,		"CB_PUSH_DELEG" }, \
 | 
						|
		{ OP_CB_RECALL_ANY,		"CB_RECALL_ANY" }, \
 | 
						|
		{ OP_CB_RECALLABLE_OBJ_AVAIL,	"CB_RECALLABLE_OBJ_AVAIL" }, \
 | 
						|
		{ OP_CB_RECALL_SLOT,		"CB_RECALL_SLOT" }, \
 | 
						|
		{ OP_CB_SEQUENCE,		"CB_SEQUENCE" }, \
 | 
						|
		{ OP_CB_WANTS_CANCELLED,	"CB_WANTS_CANCELLED" }, \
 | 
						|
		{ OP_CB_NOTIFY_LOCK,		"CB_NOTIFY_LOCK" }, \
 | 
						|
		{ OP_CB_NOTIFY_DEVICEID,	"CB_NOTIFY_DEVICEID" }, \
 | 
						|
		{ OP_CB_OFFLOAD,		"CB_OFFLOAD" }, \
 | 
						|
		{ OP_CB_ILLEGAL,		"CB_ILLEGAL" })
 |