0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef _LINUX_NFS4_H
0014 #define _LINUX_NFS4_H
0015
0016 #include <linux/list.h>
0017 #include <linux/uidgid.h>
0018 #include <uapi/linux/nfs4.h>
0019 #include <linux/sunrpc/msg_prot.h>
0020
0021 enum nfs4_acl_whotype {
0022 NFS4_ACL_WHO_NAMED = 0,
0023 NFS4_ACL_WHO_OWNER,
0024 NFS4_ACL_WHO_GROUP,
0025 NFS4_ACL_WHO_EVERYONE,
0026 };
0027
0028 struct nfs4_ace {
0029 uint32_t type;
0030 uint32_t flag;
0031 uint32_t access_mask;
0032 int whotype;
0033 union {
0034 kuid_t who_uid;
0035 kgid_t who_gid;
0036 };
0037 };
0038
0039 struct nfs4_acl {
0040 uint32_t naces;
0041 struct nfs4_ace aces[];
0042 };
0043
0044 #define NFS4_MAXLABELLEN 2048
0045
0046 struct nfs4_label {
0047 uint32_t lfs;
0048 uint32_t pi;
0049 u32 len;
0050 char *label;
0051 };
0052
0053 typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier;
0054
0055 struct nfs4_stateid_struct {
0056 union {
0057 char data[NFS4_STATEID_SIZE];
0058 struct {
0059 __be32 seqid;
0060 char other[NFS4_STATEID_OTHER_SIZE];
0061 } __attribute__ ((packed));
0062 };
0063
0064 enum {
0065 NFS4_INVALID_STATEID_TYPE = 0,
0066 NFS4_SPECIAL_STATEID_TYPE,
0067 NFS4_OPEN_STATEID_TYPE,
0068 NFS4_LOCK_STATEID_TYPE,
0069 NFS4_DELEGATION_STATEID_TYPE,
0070 NFS4_LAYOUT_STATEID_TYPE,
0071 NFS4_PNFS_DS_STATEID_TYPE,
0072 NFS4_REVOKED_STATEID_TYPE,
0073 } type;
0074 };
0075
0076 typedef struct nfs4_stateid_struct nfs4_stateid;
0077
0078 enum nfs_opnum4 {
0079 OP_ACCESS = 3,
0080 OP_CLOSE = 4,
0081 OP_COMMIT = 5,
0082 OP_CREATE = 6,
0083 OP_DELEGPURGE = 7,
0084 OP_DELEGRETURN = 8,
0085 OP_GETATTR = 9,
0086 OP_GETFH = 10,
0087 OP_LINK = 11,
0088 OP_LOCK = 12,
0089 OP_LOCKT = 13,
0090 OP_LOCKU = 14,
0091 OP_LOOKUP = 15,
0092 OP_LOOKUPP = 16,
0093 OP_NVERIFY = 17,
0094 OP_OPEN = 18,
0095 OP_OPENATTR = 19,
0096 OP_OPEN_CONFIRM = 20,
0097 OP_OPEN_DOWNGRADE = 21,
0098 OP_PUTFH = 22,
0099 OP_PUTPUBFH = 23,
0100 OP_PUTROOTFH = 24,
0101 OP_READ = 25,
0102 OP_READDIR = 26,
0103 OP_READLINK = 27,
0104 OP_REMOVE = 28,
0105 OP_RENAME = 29,
0106 OP_RENEW = 30,
0107 OP_RESTOREFH = 31,
0108 OP_SAVEFH = 32,
0109 OP_SECINFO = 33,
0110 OP_SETATTR = 34,
0111 OP_SETCLIENTID = 35,
0112 OP_SETCLIENTID_CONFIRM = 36,
0113 OP_VERIFY = 37,
0114 OP_WRITE = 38,
0115 OP_RELEASE_LOCKOWNER = 39,
0116
0117
0118 OP_BACKCHANNEL_CTL = 40,
0119 OP_BIND_CONN_TO_SESSION = 41,
0120 OP_EXCHANGE_ID = 42,
0121 OP_CREATE_SESSION = 43,
0122 OP_DESTROY_SESSION = 44,
0123 OP_FREE_STATEID = 45,
0124 OP_GET_DIR_DELEGATION = 46,
0125 OP_GETDEVICEINFO = 47,
0126 OP_GETDEVICELIST = 48,
0127 OP_LAYOUTCOMMIT = 49,
0128 OP_LAYOUTGET = 50,
0129 OP_LAYOUTRETURN = 51,
0130 OP_SECINFO_NO_NAME = 52,
0131 OP_SEQUENCE = 53,
0132 OP_SET_SSV = 54,
0133 OP_TEST_STATEID = 55,
0134 OP_WANT_DELEGATION = 56,
0135 OP_DESTROY_CLIENTID = 57,
0136 OP_RECLAIM_COMPLETE = 58,
0137
0138
0139 OP_ALLOCATE = 59,
0140 OP_COPY = 60,
0141 OP_COPY_NOTIFY = 61,
0142 OP_DEALLOCATE = 62,
0143 OP_IO_ADVISE = 63,
0144 OP_LAYOUTERROR = 64,
0145 OP_LAYOUTSTATS = 65,
0146 OP_OFFLOAD_CANCEL = 66,
0147 OP_OFFLOAD_STATUS = 67,
0148 OP_READ_PLUS = 68,
0149 OP_SEEK = 69,
0150 OP_WRITE_SAME = 70,
0151 OP_CLONE = 71,
0152
0153
0154 OP_GETXATTR = 72,
0155 OP_SETXATTR = 73,
0156 OP_LISTXATTRS = 74,
0157 OP_REMOVEXATTR = 75,
0158
0159 OP_ILLEGAL = 10044,
0160 };
0161
0162
0163
0164
0165 #define FIRST_NFS4_OP OP_ACCESS
0166 #define LAST_NFS40_OP OP_RELEASE_LOCKOWNER
0167 #define LAST_NFS41_OP OP_RECLAIM_COMPLETE
0168 #define LAST_NFS42_OP OP_REMOVEXATTR
0169 #define LAST_NFS4_OP LAST_NFS42_OP
0170
0171 enum nfsstat4 {
0172 NFS4_OK = 0,
0173 NFS4ERR_PERM = 1,
0174 NFS4ERR_NOENT = 2,
0175 NFS4ERR_IO = 5,
0176 NFS4ERR_NXIO = 6,
0177 NFS4ERR_ACCESS = 13,
0178 NFS4ERR_EXIST = 17,
0179 NFS4ERR_XDEV = 18,
0180
0181 NFS4ERR_NOTDIR = 20,
0182 NFS4ERR_ISDIR = 21,
0183 NFS4ERR_INVAL = 22,
0184 NFS4ERR_FBIG = 27,
0185 NFS4ERR_NOSPC = 28,
0186 NFS4ERR_ROFS = 30,
0187 NFS4ERR_MLINK = 31,
0188 NFS4ERR_NAMETOOLONG = 63,
0189 NFS4ERR_NOTEMPTY = 66,
0190 NFS4ERR_DQUOT = 69,
0191 NFS4ERR_STALE = 70,
0192 NFS4ERR_BADHANDLE = 10001,
0193 NFS4ERR_BAD_COOKIE = 10003,
0194 NFS4ERR_NOTSUPP = 10004,
0195 NFS4ERR_TOOSMALL = 10005,
0196 NFS4ERR_SERVERFAULT = 10006,
0197 NFS4ERR_BADTYPE = 10007,
0198 NFS4ERR_DELAY = 10008,
0199 NFS4ERR_SAME = 10009,
0200 NFS4ERR_DENIED = 10010,
0201 NFS4ERR_EXPIRED = 10011,
0202 NFS4ERR_LOCKED = 10012,
0203 NFS4ERR_GRACE = 10013,
0204 NFS4ERR_FHEXPIRED = 10014,
0205 NFS4ERR_SHARE_DENIED = 10015,
0206 NFS4ERR_WRONGSEC = 10016,
0207 NFS4ERR_CLID_INUSE = 10017,
0208 NFS4ERR_RESOURCE = 10018,
0209 NFS4ERR_MOVED = 10019,
0210 NFS4ERR_NOFILEHANDLE = 10020,
0211 NFS4ERR_MINOR_VERS_MISMATCH = 10021,
0212 NFS4ERR_STALE_CLIENTID = 10022,
0213 NFS4ERR_STALE_STATEID = 10023,
0214 NFS4ERR_OLD_STATEID = 10024,
0215 NFS4ERR_BAD_STATEID = 10025,
0216 NFS4ERR_BAD_SEQID = 10026,
0217 NFS4ERR_NOT_SAME = 10027,
0218 NFS4ERR_LOCK_RANGE = 10028,
0219 NFS4ERR_SYMLINK = 10029,
0220 NFS4ERR_RESTOREFH = 10030,
0221 NFS4ERR_LEASE_MOVED = 10031,
0222 NFS4ERR_ATTRNOTSUPP = 10032,
0223 NFS4ERR_NO_GRACE = 10033,
0224 NFS4ERR_RECLAIM_BAD = 10034,
0225 NFS4ERR_RECLAIM_CONFLICT = 10035,
0226 NFS4ERR_BADXDR = 10036,
0227 NFS4ERR_LOCKS_HELD = 10037,
0228 NFS4ERR_OPENMODE = 10038,
0229 NFS4ERR_BADOWNER = 10039,
0230 NFS4ERR_BADCHAR = 10040,
0231 NFS4ERR_BADNAME = 10041,
0232 NFS4ERR_BAD_RANGE = 10042,
0233 NFS4ERR_LOCK_NOTSUPP = 10043,
0234 NFS4ERR_OP_ILLEGAL = 10044,
0235 NFS4ERR_DEADLOCK = 10045,
0236 NFS4ERR_FILE_OPEN = 10046,
0237 NFS4ERR_ADMIN_REVOKED = 10047,
0238 NFS4ERR_CB_PATH_DOWN = 10048,
0239
0240
0241 NFS4ERR_BADIOMODE = 10049,
0242 NFS4ERR_BADLAYOUT = 10050,
0243 NFS4ERR_BAD_SESSION_DIGEST = 10051,
0244 NFS4ERR_BADSESSION = 10052,
0245 NFS4ERR_BADSLOT = 10053,
0246 NFS4ERR_COMPLETE_ALREADY = 10054,
0247 NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055,
0248 NFS4ERR_DELEG_ALREADY_WANTED = 10056,
0249 NFS4ERR_BACK_CHAN_BUSY = 10057,
0250 NFS4ERR_LAYOUTTRYLATER = 10058,
0251 NFS4ERR_LAYOUTUNAVAILABLE = 10059,
0252 NFS4ERR_NOMATCHING_LAYOUT = 10060,
0253 NFS4ERR_RECALLCONFLICT = 10061,
0254 NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062,
0255 NFS4ERR_SEQ_MISORDERED = 10063,
0256 NFS4ERR_SEQUENCE_POS = 10064,
0257 NFS4ERR_REQ_TOO_BIG = 10065,
0258 NFS4ERR_REP_TOO_BIG = 10066,
0259 NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067,
0260 NFS4ERR_RETRY_UNCACHED_REP = 10068,
0261 NFS4ERR_UNSAFE_COMPOUND = 10069,
0262 NFS4ERR_TOO_MANY_OPS = 10070,
0263 NFS4ERR_OP_NOT_IN_SESSION = 10071,
0264 NFS4ERR_HASH_ALG_UNSUPP = 10072,
0265
0266 NFS4ERR_CLIENTID_BUSY = 10074,
0267 NFS4ERR_PNFS_IO_HOLE = 10075,
0268 NFS4ERR_SEQ_FALSE_RETRY = 10076,
0269 NFS4ERR_BAD_HIGH_SLOT = 10077,
0270 NFS4ERR_DEADSESSION = 10078,
0271 NFS4ERR_ENCR_ALG_UNSUPP = 10079,
0272 NFS4ERR_PNFS_NO_LAYOUT = 10080,
0273 NFS4ERR_NOT_ONLY_OP = 10081,
0274 NFS4ERR_WRONG_CRED = 10082,
0275 NFS4ERR_WRONG_TYPE = 10083,
0276 NFS4ERR_DIRDELEG_UNAVAIL = 10084,
0277 NFS4ERR_REJECT_DELEG = 10085,
0278 NFS4ERR_RETURNCONFLICT = 10086,
0279 NFS4ERR_DELEG_REVOKED = 10087,
0280
0281
0282 NFS4ERR_PARTNER_NOTSUPP = 10088,
0283 NFS4ERR_PARTNER_NO_AUTH = 10089,
0284 NFS4ERR_UNION_NOTSUPP = 10090,
0285 NFS4ERR_OFFLOAD_DENIED = 10091,
0286 NFS4ERR_WRONG_LFS = 10092,
0287 NFS4ERR_BADLABEL = 10093,
0288 NFS4ERR_OFFLOAD_NO_REQS = 10094,
0289
0290
0291 NFS4ERR_NOXATTR = 10095,
0292 NFS4ERR_XATTR2BIG = 10096,
0293 };
0294
0295
0296 #define NFS4ERR_RESET_TO_MDS 12001
0297 #define NFS4ERR_RESET_TO_PNFS 12002
0298
0299 static inline bool seqid_mutating_err(u32 err)
0300 {
0301
0302 switch (err) {
0303 case NFS4ERR_STALE_CLIENTID:
0304 case NFS4ERR_STALE_STATEID:
0305 case NFS4ERR_BAD_STATEID:
0306 case NFS4ERR_BAD_SEQID:
0307 case NFS4ERR_BADXDR:
0308 case NFS4ERR_RESOURCE:
0309 case NFS4ERR_NOFILEHANDLE:
0310 case NFS4ERR_MOVED:
0311 return false;
0312 }
0313 return true;
0314 }
0315
0316
0317
0318
0319
0320 enum nfs_ftype4 {
0321 NF4BAD = 0,
0322 NF4REG = 1,
0323 NF4DIR = 2,
0324 NF4BLK = 3,
0325 NF4CHR = 4,
0326 NF4LNK = 5,
0327 NF4SOCK = 6,
0328 NF4FIFO = 7,
0329 NF4ATTRDIR = 8,
0330 NF4NAMEDATTR = 9
0331 };
0332
0333 enum open_claim_type4 {
0334 NFS4_OPEN_CLAIM_NULL = 0,
0335 NFS4_OPEN_CLAIM_PREVIOUS = 1,
0336 NFS4_OPEN_CLAIM_DELEGATE_CUR = 2,
0337 NFS4_OPEN_CLAIM_DELEGATE_PREV = 3,
0338 NFS4_OPEN_CLAIM_FH = 4,
0339 NFS4_OPEN_CLAIM_DELEG_CUR_FH = 5,
0340 NFS4_OPEN_CLAIM_DELEG_PREV_FH = 6,
0341 };
0342
0343 enum opentype4 {
0344 NFS4_OPEN_NOCREATE = 0,
0345 NFS4_OPEN_CREATE = 1
0346 };
0347
0348 enum createmode4 {
0349 NFS4_CREATE_UNCHECKED = 0,
0350 NFS4_CREATE_GUARDED = 1,
0351 NFS4_CREATE_EXCLUSIVE = 2,
0352
0353
0354
0355
0356
0357 NFS4_CREATE_EXCLUSIVE4_1 = 3
0358 };
0359
0360 enum limit_by4 {
0361 NFS4_LIMIT_SIZE = 1,
0362 NFS4_LIMIT_BLOCKS = 2
0363 };
0364
0365 enum open_delegation_type4 {
0366 NFS4_OPEN_DELEGATE_NONE = 0,
0367 NFS4_OPEN_DELEGATE_READ = 1,
0368 NFS4_OPEN_DELEGATE_WRITE = 2,
0369 NFS4_OPEN_DELEGATE_NONE_EXT = 3,
0370 };
0371
0372 enum why_no_delegation4 {
0373 WND4_NOT_WANTED = 0,
0374 WND4_CONTENTION = 1,
0375 WND4_RESOURCE = 2,
0376 WND4_NOT_SUPP_FTYPE = 3,
0377 WND4_WRITE_DELEG_NOT_SUPP_FTYPE = 4,
0378 WND4_NOT_SUPP_UPGRADE = 5,
0379 WND4_NOT_SUPP_DOWNGRADE = 6,
0380 WND4_CANCELLED = 7,
0381 WND4_IS_DIR = 8,
0382 };
0383
0384 enum lock_type4 {
0385 NFS4_UNLOCK_LT = 0,
0386 NFS4_READ_LT = 1,
0387 NFS4_WRITE_LT = 2,
0388 NFS4_READW_LT = 3,
0389 NFS4_WRITEW_LT = 4
0390 };
0391
0392
0393
0394 #define FATTR4_WORD0_SUPPORTED_ATTRS (1UL << 0)
0395 #define FATTR4_WORD0_TYPE (1UL << 1)
0396 #define FATTR4_WORD0_FH_EXPIRE_TYPE (1UL << 2)
0397 #define FATTR4_WORD0_CHANGE (1UL << 3)
0398 #define FATTR4_WORD0_SIZE (1UL << 4)
0399 #define FATTR4_WORD0_LINK_SUPPORT (1UL << 5)
0400 #define FATTR4_WORD0_SYMLINK_SUPPORT (1UL << 6)
0401 #define FATTR4_WORD0_NAMED_ATTR (1UL << 7)
0402 #define FATTR4_WORD0_FSID (1UL << 8)
0403 #define FATTR4_WORD0_UNIQUE_HANDLES (1UL << 9)
0404 #define FATTR4_WORD0_LEASE_TIME (1UL << 10)
0405 #define FATTR4_WORD0_RDATTR_ERROR (1UL << 11)
0406
0407 #define FATTR4_WORD2_SUPPATTR_EXCLCREAT (1UL << 11)
0408
0409
0410 #define FATTR4_WORD0_ACL (1UL << 12)
0411 #define FATTR4_WORD0_ACLSUPPORT (1UL << 13)
0412 #define FATTR4_WORD0_ARCHIVE (1UL << 14)
0413 #define FATTR4_WORD0_CANSETTIME (1UL << 15)
0414 #define FATTR4_WORD0_CASE_INSENSITIVE (1UL << 16)
0415 #define FATTR4_WORD0_CASE_PRESERVING (1UL << 17)
0416 #define FATTR4_WORD0_CHOWN_RESTRICTED (1UL << 18)
0417 #define FATTR4_WORD0_FILEHANDLE (1UL << 19)
0418 #define FATTR4_WORD0_FILEID (1UL << 20)
0419 #define FATTR4_WORD0_FILES_AVAIL (1UL << 21)
0420 #define FATTR4_WORD0_FILES_FREE (1UL << 22)
0421 #define FATTR4_WORD0_FILES_TOTAL (1UL << 23)
0422 #define FATTR4_WORD0_FS_LOCATIONS (1UL << 24)
0423 #define FATTR4_WORD0_HIDDEN (1UL << 25)
0424 #define FATTR4_WORD0_HOMOGENEOUS (1UL << 26)
0425 #define FATTR4_WORD0_MAXFILESIZE (1UL << 27)
0426 #define FATTR4_WORD0_MAXLINK (1UL << 28)
0427 #define FATTR4_WORD0_MAXNAME (1UL << 29)
0428 #define FATTR4_WORD0_MAXREAD (1UL << 30)
0429 #define FATTR4_WORD0_MAXWRITE (1UL << 31)
0430 #define FATTR4_WORD1_MIMETYPE (1UL << 0)
0431 #define FATTR4_WORD1_MODE (1UL << 1)
0432 #define FATTR4_WORD1_NO_TRUNC (1UL << 2)
0433 #define FATTR4_WORD1_NUMLINKS (1UL << 3)
0434 #define FATTR4_WORD1_OWNER (1UL << 4)
0435 #define FATTR4_WORD1_OWNER_GROUP (1UL << 5)
0436 #define FATTR4_WORD1_QUOTA_HARD (1UL << 6)
0437 #define FATTR4_WORD1_QUOTA_SOFT (1UL << 7)
0438 #define FATTR4_WORD1_QUOTA_USED (1UL << 8)
0439 #define FATTR4_WORD1_RAWDEV (1UL << 9)
0440 #define FATTR4_WORD1_SPACE_AVAIL (1UL << 10)
0441 #define FATTR4_WORD1_SPACE_FREE (1UL << 11)
0442 #define FATTR4_WORD1_SPACE_TOTAL (1UL << 12)
0443 #define FATTR4_WORD1_SPACE_USED (1UL << 13)
0444 #define FATTR4_WORD1_SYSTEM (1UL << 14)
0445 #define FATTR4_WORD1_TIME_ACCESS (1UL << 15)
0446 #define FATTR4_WORD1_TIME_ACCESS_SET (1UL << 16)
0447 #define FATTR4_WORD1_TIME_BACKUP (1UL << 17)
0448 #define FATTR4_WORD1_TIME_CREATE (1UL << 18)
0449 #define FATTR4_WORD1_TIME_DELTA (1UL << 19)
0450 #define FATTR4_WORD1_TIME_METADATA (1UL << 20)
0451 #define FATTR4_WORD1_TIME_MODIFY (1UL << 21)
0452 #define FATTR4_WORD1_TIME_MODIFY_SET (1UL << 22)
0453 #define FATTR4_WORD1_MOUNTED_ON_FILEID (1UL << 23)
0454 #define FATTR4_WORD1_DACL (1UL << 26)
0455 #define FATTR4_WORD1_SACL (1UL << 27)
0456 #define FATTR4_WORD1_FS_LAYOUT_TYPES (1UL << 30)
0457 #define FATTR4_WORD2_LAYOUT_TYPES (1UL << 0)
0458 #define FATTR4_WORD2_LAYOUT_BLKSIZE (1UL << 1)
0459 #define FATTR4_WORD2_MDSTHRESHOLD (1UL << 4)
0460 #define FATTR4_WORD2_CLONE_BLKSIZE (1UL << 13)
0461 #define FATTR4_WORD2_CHANGE_ATTR_TYPE (1UL << 15)
0462 #define FATTR4_WORD2_SECURITY_LABEL (1UL << 16)
0463 #define FATTR4_WORD2_MODE_UMASK (1UL << 17)
0464 #define FATTR4_WORD2_XATTR_SUPPORT (1UL << 18)
0465
0466
0467 #define THRESHOLD_RD (1UL << 0)
0468 #define THRESHOLD_WR (1UL << 1)
0469 #define THRESHOLD_RD_IO (1UL << 2)
0470 #define THRESHOLD_WR_IO (1UL << 3)
0471
0472 #define NFSPROC4_NULL 0
0473 #define NFSPROC4_COMPOUND 1
0474 #define NFS4_VERSION 4
0475 #define NFS4_MINOR_VERSION 0
0476
0477 #define NFS4_DEBUG 1
0478
0479
0480
0481
0482
0483
0484
0485
0486 enum {
0487 NFSPROC4_CLNT_NULL = 0,
0488 NFSPROC4_CLNT_READ,
0489 NFSPROC4_CLNT_WRITE,
0490 NFSPROC4_CLNT_COMMIT,
0491 NFSPROC4_CLNT_OPEN,
0492 NFSPROC4_CLNT_OPEN_CONFIRM,
0493 NFSPROC4_CLNT_OPEN_NOATTR,
0494 NFSPROC4_CLNT_OPEN_DOWNGRADE,
0495 NFSPROC4_CLNT_CLOSE,
0496 NFSPROC4_CLNT_SETATTR,
0497 NFSPROC4_CLNT_FSINFO,
0498 NFSPROC4_CLNT_RENEW,
0499 NFSPROC4_CLNT_SETCLIENTID,
0500 NFSPROC4_CLNT_SETCLIENTID_CONFIRM,
0501 NFSPROC4_CLNT_LOCK,
0502 NFSPROC4_CLNT_LOCKT,
0503 NFSPROC4_CLNT_LOCKU,
0504 NFSPROC4_CLNT_ACCESS,
0505 NFSPROC4_CLNT_GETATTR,
0506 NFSPROC4_CLNT_LOOKUP,
0507 NFSPROC4_CLNT_LOOKUP_ROOT,
0508 NFSPROC4_CLNT_REMOVE,
0509 NFSPROC4_CLNT_RENAME,
0510 NFSPROC4_CLNT_LINK,
0511 NFSPROC4_CLNT_SYMLINK,
0512 NFSPROC4_CLNT_CREATE,
0513 NFSPROC4_CLNT_PATHCONF,
0514 NFSPROC4_CLNT_STATFS,
0515 NFSPROC4_CLNT_READLINK,
0516 NFSPROC4_CLNT_READDIR,
0517 NFSPROC4_CLNT_SERVER_CAPS,
0518 NFSPROC4_CLNT_DELEGRETURN,
0519 NFSPROC4_CLNT_GETACL,
0520 NFSPROC4_CLNT_SETACL,
0521 NFSPROC4_CLNT_FS_LOCATIONS,
0522 NFSPROC4_CLNT_RELEASE_LOCKOWNER,
0523 NFSPROC4_CLNT_SECINFO,
0524 NFSPROC4_CLNT_FSID_PRESENT,
0525
0526 NFSPROC4_CLNT_EXCHANGE_ID,
0527 NFSPROC4_CLNT_CREATE_SESSION,
0528 NFSPROC4_CLNT_DESTROY_SESSION,
0529 NFSPROC4_CLNT_SEQUENCE,
0530 NFSPROC4_CLNT_GET_LEASE_TIME,
0531 NFSPROC4_CLNT_RECLAIM_COMPLETE,
0532 NFSPROC4_CLNT_LAYOUTGET,
0533 NFSPROC4_CLNT_GETDEVICEINFO,
0534 NFSPROC4_CLNT_LAYOUTCOMMIT,
0535 NFSPROC4_CLNT_LAYOUTRETURN,
0536 NFSPROC4_CLNT_SECINFO_NO_NAME,
0537 NFSPROC4_CLNT_TEST_STATEID,
0538 NFSPROC4_CLNT_FREE_STATEID,
0539 NFSPROC4_CLNT_GETDEVICELIST,
0540 NFSPROC4_CLNT_BIND_CONN_TO_SESSION,
0541 NFSPROC4_CLNT_DESTROY_CLIENTID,
0542
0543 NFSPROC4_CLNT_SEEK,
0544 NFSPROC4_CLNT_ALLOCATE,
0545 NFSPROC4_CLNT_DEALLOCATE,
0546 NFSPROC4_CLNT_LAYOUTSTATS,
0547 NFSPROC4_CLNT_CLONE,
0548 NFSPROC4_CLNT_COPY,
0549 NFSPROC4_CLNT_OFFLOAD_CANCEL,
0550
0551 NFSPROC4_CLNT_LOOKUPP,
0552 NFSPROC4_CLNT_LAYOUTERROR,
0553 NFSPROC4_CLNT_COPY_NOTIFY,
0554
0555 NFSPROC4_CLNT_GETXATTR,
0556 NFSPROC4_CLNT_SETXATTR,
0557 NFSPROC4_CLNT_LISTXATTRS,
0558 NFSPROC4_CLNT_REMOVEXATTR,
0559 NFSPROC4_CLNT_READ_PLUS,
0560 };
0561
0562
0563 struct nfs4_sessionid {
0564 unsigned char data[NFS4_MAX_SESSIONID_LEN];
0565 };
0566
0567
0568 #define SESSION4_PERSIST 0x001
0569 #define SESSION4_BACK_CHAN 0x002
0570 #define SESSION4_RDMA 0x004
0571
0572 #define SESSION4_FLAG_MASK_A 0x007
0573
0574 enum state_protect_how4 {
0575 SP4_NONE = 0,
0576 SP4_MACH_CRED = 1,
0577 SP4_SSV = 2
0578 };
0579
0580 enum pnfs_layouttype {
0581 LAYOUT_NFSV4_1_FILES = 1,
0582 LAYOUT_OSD2_OBJECTS = 2,
0583 LAYOUT_BLOCK_VOLUME = 3,
0584 LAYOUT_FLEX_FILES = 4,
0585 LAYOUT_SCSI = 5,
0586 LAYOUT_TYPE_MAX
0587 };
0588
0589
0590 enum pnfs_layoutreturn_type {
0591 RETURN_FILE = 1,
0592 RETURN_FSID = 2,
0593 RETURN_ALL = 3
0594 };
0595
0596 enum pnfs_iomode {
0597 IOMODE_READ = 1,
0598 IOMODE_RW = 2,
0599 IOMODE_ANY = 3,
0600 };
0601
0602 enum pnfs_notify_deviceid_type4 {
0603 NOTIFY_DEVICEID4_CHANGE = 1 << 1,
0604 NOTIFY_DEVICEID4_DELETE = 1 << 2,
0605 };
0606
0607 enum pnfs_block_volume_type {
0608 PNFS_BLOCK_VOLUME_SIMPLE = 0,
0609 PNFS_BLOCK_VOLUME_SLICE = 1,
0610 PNFS_BLOCK_VOLUME_CONCAT = 2,
0611 PNFS_BLOCK_VOLUME_STRIPE = 3,
0612 PNFS_BLOCK_VOLUME_SCSI = 4,
0613 };
0614
0615 enum pnfs_block_extent_state {
0616 PNFS_BLOCK_READWRITE_DATA = 0,
0617 PNFS_BLOCK_READ_DATA = 1,
0618 PNFS_BLOCK_INVALID_DATA = 2,
0619 PNFS_BLOCK_NONE_DATA = 3,
0620 };
0621
0622
0623 #define PNFS_BLOCK_EXTENT_SIZE \
0624 (7 * sizeof(__be32) + NFS4_DEVICEID4_SIZE)
0625
0626
0627 #define PNFS_SCSI_RANGE_SIZE \
0628 (4 * sizeof(__be32))
0629
0630 enum scsi_code_set {
0631 PS_CODE_SET_BINARY = 1,
0632 PS_CODE_SET_ASCII = 2,
0633 PS_CODE_SET_UTF8 = 3
0634 };
0635
0636 enum scsi_designator_type {
0637 PS_DESIGNATOR_T10 = 1,
0638 PS_DESIGNATOR_EUI64 = 2,
0639 PS_DESIGNATOR_NAA = 3,
0640 PS_DESIGNATOR_NAME = 8
0641 };
0642
0643 #define NFL4_UFLG_MASK 0x0000003F
0644 #define NFL4_UFLG_DENSE 0x00000001
0645 #define NFL4_UFLG_COMMIT_THRU_MDS 0x00000002
0646 #define NFL4_UFLG_STRIPE_UNIT_SIZE_MASK 0xFFFFFFC0
0647
0648
0649 enum filelayout_hint_care4 {
0650 NFLH4_CARE_DENSE = NFL4_UFLG_DENSE,
0651 NFLH4_CARE_COMMIT_THRU_MDS = NFL4_UFLG_COMMIT_THRU_MDS,
0652 NFLH4_CARE_STRIPE_UNIT_SIZE = 0x00000040,
0653 NFLH4_CARE_STRIPE_COUNT = 0x00000080
0654 };
0655
0656 #define NFS4_DEVICEID4_SIZE 16
0657
0658 struct nfs4_deviceid {
0659 char data[NFS4_DEVICEID4_SIZE];
0660 };
0661
0662 enum data_content4 {
0663 NFS4_CONTENT_DATA = 0,
0664 NFS4_CONTENT_HOLE = 1,
0665 };
0666
0667 enum pnfs_update_layout_reason {
0668 PNFS_UPDATE_LAYOUT_UNKNOWN = 0,
0669 PNFS_UPDATE_LAYOUT_NO_PNFS,
0670 PNFS_UPDATE_LAYOUT_RD_ZEROLEN,
0671 PNFS_UPDATE_LAYOUT_MDSTHRESH,
0672 PNFS_UPDATE_LAYOUT_NOMEM,
0673 PNFS_UPDATE_LAYOUT_BULK_RECALL,
0674 PNFS_UPDATE_LAYOUT_IO_TEST_FAIL,
0675 PNFS_UPDATE_LAYOUT_FOUND_CACHED,
0676 PNFS_UPDATE_LAYOUT_RETURN,
0677 PNFS_UPDATE_LAYOUT_RETRY,
0678 PNFS_UPDATE_LAYOUT_BLOCKED,
0679 PNFS_UPDATE_LAYOUT_INVALID_OPEN,
0680 PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET,
0681 PNFS_UPDATE_LAYOUT_EXIT,
0682 };
0683
0684 #define NFS4_OP_MAP_NUM_LONGS \
0685 DIV_ROUND_UP(LAST_NFS4_OP, 8 * sizeof(unsigned long))
0686 #define NFS4_OP_MAP_NUM_WORDS \
0687 (NFS4_OP_MAP_NUM_LONGS * sizeof(unsigned long) / sizeof(u32))
0688 struct nfs4_op_map {
0689 union {
0690 unsigned long longs[NFS4_OP_MAP_NUM_LONGS];
0691 u32 words[NFS4_OP_MAP_NUM_WORDS];
0692 } u;
0693 };
0694
0695 struct nfs42_netaddr {
0696 char netid[RPCBIND_MAXNETIDLEN];
0697 char addr[RPCBIND_MAXUADDRLEN + 1];
0698 u32 netid_len;
0699 u32 addr_len;
0700 };
0701
0702 enum netloc_type4 {
0703 NL4_NAME = 1,
0704 NL4_URL = 2,
0705 NL4_NETADDR = 3,
0706 };
0707
0708 struct nl4_server {
0709 enum netloc_type4 nl4_type;
0710 union {
0711 struct {
0712 int nl4_str_sz;
0713 char nl4_str[NFS4_OPAQUE_LIMIT + 1];
0714 };
0715 struct nfs42_netaddr nl4_addr;
0716 } u;
0717 };
0718
0719 enum nfs4_change_attr_type {
0720 NFS4_CHANGE_TYPE_IS_MONOTONIC_INCR = 0,
0721 NFS4_CHANGE_TYPE_IS_VERSION_COUNTER = 1,
0722 NFS4_CHANGE_TYPE_IS_VERSION_COUNTER_NOPNFS = 2,
0723 NFS4_CHANGE_TYPE_IS_TIME_METADATA = 3,
0724 NFS4_CHANGE_TYPE_IS_UNDEFINED = 4,
0725 };
0726
0727
0728
0729
0730 enum nfs4_setxattr_options {
0731 SETXATTR4_EITHER = 0,
0732 SETXATTR4_CREATE = 1,
0733 SETXATTR4_REPLACE = 2,
0734 };
0735 #endif