root/include/trace/misc/nfs.h
/* 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_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_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" }, \
                { ETIMEDOUT,                    "TIMEDOUT" }, \
                { 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_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" })