struct lu_orphan_rec_v2 loe_rec;
};
+struct lu_orphan_rec_v3 {
+ struct lu_orphan_rec lor_rec;
+ struct ost_layout lor_layout;
+ /* The OST-object declared layout version in PFID EA.*/
+ __u32 lor_layout_version;
+ /* The OST-object declared layout range (of version) in PFID EA.*/
+ __u32 lor_range;
+ __u32 lor_padding_1;
+ __u64 lor_padding_2;
+};
+
+struct lu_orphan_ent_v3 {
+ /* The orphan OST-object's FID */
+ struct lu_fid loe_key;
+ struct lu_orphan_rec_v3 loe_rec;
+};
+
/** @} lu_fid */
/** \defgroup lu_dir lu_dir
tgt->cookie = src->cookie;
}
-struct lustre_handle_array {
- unsigned int count;
- struct lustre_handle handles[0];
-};
-
/* lustre_msg struct magic. DON'T use swabbed values of MAGIC as magic! */
enum lustre_msg_magic {
LUSTRE_MSG_MAGIC_V2 = 0x0BD00BD3,
__u64 pb_padding64_0;
__u64 pb_padding64_1;
__u64 pb_padding64_2;
- char pb_jobid[LUSTRE_JOBID_SIZE]; /* req: ASCII MPI jobid from env */
+ char pb_jobid[LUSTRE_JOBID_SIZE]; /* req: ASCII jobid from env + NUL */
};
#define ptlrpc_body ptlrpc_body_v3
#define OBD_CONNECT_OBDOPACK 0x4000000000000000ULL /* compact OUT obdo */
#define OBD_CONNECT_FLAGS2 0x8000000000000000ULL /* second flags word */
/* ocd_connect_flags2 flags */
-#define OBD_CONNECT2_FILE_SECCTX 0x1ULL /* set file security context at create */
-#define OBD_CONNECT2_LOCKAHEAD 0x2ULL /* ladvise lockahead v2 */
-#define OBD_CONNECT2_FLR 0x20ULL /* FLR support */
+#define OBD_CONNECT2_FILE_SECCTX 0x1ULL /* set file security context at create */
+#define OBD_CONNECT2_LOCKAHEAD 0x2ULL /* ladvise lockahead v2 */
+#define OBD_CONNECT2_DIR_MIGRATE 0x4ULL /* migrate striped dir */
+#define OBD_CONNECT2_FLR 0x20ULL /* FLR support */
+#define OBD_CONNECT2_WBC_INTENTS 0x40ULL /* create/unlink/... intents for wbc, also operations under client-held parent locks */
+#define OBD_CONNECT2_LOCK_CONVERT 0x80ULL /* IBITS lock convert support */
+#define OBD_CONNECT2_ARCHIVE_ID_ARRAY 0x100ULL /* store HSM archive_id in array */
/* XXX README XXX:
* Please DO NOT add flag values here before first ensuring that this same
OBD_CONNECT_GRANT_PARAM | \
OBD_CONNECT_SHORTIO | OBD_CONNECT_FLAGS2)
-#define MDT_CONNECT_SUPPORTED2 (OBD_CONNECT2_FILE_SECCTX | OBD_CONNECT2_FLR)
+#define MDT_CONNECT_SUPPORTED2 (OBD_CONNECT2_FILE_SECCTX | OBD_CONNECT2_FLR | \
++ OBD_CONNECT2_LOCK_CONVERT)
#define OST_CONNECT_SUPPORTED (OBD_CONNECT_SRVLOCK | OBD_CONNECT_GRANT | \
OBD_CONNECT_REQPORTAL | OBD_CONNECT_VERSION | \
#define OST_CONNECT_SUPPORTED2 OBD_CONNECT2_LOCKAHEAD
-#define ECHO_CONNECT_SUPPORTED 0
+#define ECHO_CONNECT_SUPPORTED (OBD_CONNECT_FID)
#define ECHO_CONNECT_SUPPORTED2 0
#define MGS_CONNECT_SUPPORTED (OBD_CONNECT_VERSION | OBD_CONNECT_AT | \
/*
* Supported checksum algorithms. Up to 32 checksum types are supported.
* (32-bit mask stored in obd_connect_data::ocd_cksum_types)
- * Please update DECLARE_CKSUM_NAME/OBD_CKSUM_ALL in obd.h when adding a new
- * algorithm and also the OBD_FL_CKSUM* flags.
+ * Please update DECLARE_CKSUM_NAME in obd_cksum.h when adding a new
+ * algorithm and also the OBD_FL_CKSUM* flags, OBD_CKSUM_ALL flag,
+ * OBD_FL_CKSUM_ALL flag and potentially OBD_CKSUM_T10_ALL flag.
*/
-typedef enum cksum_types {
- OBD_CKSUM_CRC32 = 0x00000001,
- OBD_CKSUM_ADLER = 0x00000002,
- OBD_CKSUM_CRC32C= 0x00000004,
-} cksum_type_t;
+enum cksum_types {
+ OBD_CKSUM_CRC32 = 0x00000001,
+ OBD_CKSUM_ADLER = 0x00000002,
+ OBD_CKSUM_CRC32C = 0x00000004,
+ OBD_CKSUM_RESERVED = 0x00000008,
+ OBD_CKSUM_T10IP512 = 0x00000010,
+ OBD_CKSUM_T10IP4K = 0x00000020,
+ OBD_CKSUM_T10CRC512 = 0x00000040,
+ OBD_CKSUM_T10CRC4K = 0x00000080,
+};
+
+#define OBD_CKSUM_T10_ALL (OBD_CKSUM_T10IP512 | OBD_CKSUM_T10IP4K | \
+ OBD_CKSUM_T10CRC512 | OBD_CKSUM_T10CRC4K)
+
+#define OBD_CKSUM_ALL (OBD_CKSUM_CRC32 | OBD_CKSUM_ADLER | OBD_CKSUM_CRC32C | \
+ OBD_CKSUM_T10_ALL)
+
+/*
+ * The default checksum algorithm used on top of T10PI GRD tags for RPC.
+ * Considering that the checksum-of-checksums is only computing CRC32 on a
+ * 4KB chunk of GRD tags for a 1MB RPC for 512B sectors, or 16KB of GRD
+ * tags for 16MB of 4KB sectors, this is only 1/256 or 1/1024 of the
+ * total data being checksummed, so the checksum type used here should not
+ * affect overall system performance noticeably.
+ */
+#define OBD_CKSUM_T10_TOP OBD_CKSUM_ADLER
/*
* OST requests: OBDO & OBD request records
*/
/* opcodes */
-typedef enum {
+enum ost_cmd {
OST_REPLY = 0, /* reply ? */
OST_GETATTR = 1,
OST_SETATTR = 2,
OST_QUOTA_ADJUST_QUNIT = 20, /* not used since 2.4 */
OST_LADVISE = 21,
OST_LAST_OPC /* must be < 33 to avoid MDS_GETATTR */
-} ost_cmd_t;
+};
#define OST_FIRST_OPC OST_REPLY
enum obdo_flags {
OBD_FL_NO_GRPQUOTA = 0x00000200, /* the object's group is over quota */
OBD_FL_CREATE_CROW = 0x00000400, /* object should be create on write */
OBD_FL_SRVLOCK = 0x00000800, /* delegate DLM locking to server */
- OBD_FL_CKSUM_CRC32 = 0x00001000, /* CRC32 checksum type */
- OBD_FL_CKSUM_ADLER = 0x00002000, /* ADLER checksum type */
- OBD_FL_CKSUM_CRC32C = 0x00004000, /* CRC32C checksum type */
- OBD_FL_CKSUM_RSVD2 = 0x00008000, /* for future cksum types */
- OBD_FL_CKSUM_RSVD3 = 0x00010000, /* for future cksum types */
- OBD_FL_SHRINK_GRANT = 0x00020000, /* object shrink the grant */
- OBD_FL_MMAP = 0x00040000, /* object is mmapped on the client.
+ OBD_FL_CKSUM_CRC32 = 0x00001000, /* CRC32 checksum type */
+ OBD_FL_CKSUM_ADLER = 0x00002000, /* ADLER checksum type */
+ OBD_FL_CKSUM_CRC32C = 0x00004000, /* CRC32C checksum type */
+ OBD_FL_CKSUM_T10IP512 = 0x00005000, /* T10PI IP cksum, 512B sector */
+ OBD_FL_CKSUM_T10IP4K = 0x00006000, /* T10PI IP cksum, 4KB sector */
+ OBD_FL_CKSUM_T10CRC512 = 0x00007000, /* T10PI CRC cksum, 512B sector */
+ OBD_FL_CKSUM_T10CRC4K = 0x00008000, /* T10PI CRC cksum, 4KB sector */
+ OBD_FL_CKSUM_RSVD3 = 0x00010000, /* for future cksum types */
+ OBD_FL_SHRINK_GRANT = 0x00020000, /* object shrink the grant */
+ OBD_FL_MMAP = 0x00040000, /* object is mmapped on the client.
* XXX: obsoleted - reserved for old
* clients prior than 2.2 */
OBD_FL_RECOV_RESEND = 0x00080000, /* recoverable resent */
OBD_FL_SHORT_IO = 0x00400000, /* short io request */
/* OBD_FL_LOCAL_MASK = 0xF0000000, was local-only flags until 2.10 */
- /* Note that while these checksum values are currently separate bits,
- * in 2.x we can actually allow all values from 1-31 if we wanted. */
+ /*
+ * Note that while the original checksum values were separate bits,
+ * in 2.x we can actually allow all values from 1-31. T10-PI checksum
+ * types already use values which are not separate bits.
+ */
OBD_FL_CKSUM_ALL = OBD_FL_CKSUM_CRC32 | OBD_FL_CKSUM_ADLER |
- OBD_FL_CKSUM_CRC32C,
+ OBD_FL_CKSUM_CRC32C | OBD_FL_CKSUM_T10IP512 |
+ OBD_FL_CKSUM_T10IP4K | OBD_FL_CKSUM_T10CRC512 |
+ OBD_FL_CKSUM_T10CRC4K,
};
/*
/* OBD_MD_FLRMTPERM (0x0000010000000000ULL) remote perm, obsolete */
#define OBD_MD_FLMDSCAPA (0x0000020000000000ULL) /* MDS capability */
#define OBD_MD_FLOSSCAPA (0x0000040000000000ULL) /* OSS capability */
-#define OBD_MD_FLCKSPLIT (0x0000080000000000ULL) /* Check split on server */
+/* OBD_MD_FLCKSPLIT (0x0000080000000000ULL) obsolete 2.3.58*/
#define OBD_MD_FLCROSSREF (0x0000100000000000ULL) /* Cross-ref case */
#define OBD_MD_FLGETATTRLOCK (0x0000200000000000ULL) /* Get IOEpoch attributes
* under lock; for xattr
#define OBD_BRW_LOCALS (OBD_BRW_LOCAL1)
+#define OBD_MAX_GRANT 0x7fffffffUL /* Max grant allowed to one client: 2 GiB */
+
#define OBD_OBJECT_EOF LUSTRE_EOF
#define OST_MIN_PRECREATE 32
#define lvb_glb_ver lvb_id_may_rel /* current version of the global index */
/* op codes */
-typedef enum {
+enum quota_cmd {
QUOTA_DQACQ = 601,
QUOTA_DQREL = 602,
QUOTA_LAST_OPC
-} quota_cmd_t;
+};
#define QUOTA_FIRST_OPC QUOTA_DQACQ
/*
*/
/* opcodes */
-typedef enum {
+enum mds_cmd {
MDS_GETATTR = 33,
MDS_GETATTR_NAME = 34,
MDS_CLOSE = 35,
MDS_HSM_CT_UNREGISTER = 60,
MDS_SWAP_LAYOUTS = 61,
MDS_LAST_OPC
-} mds_cmd_t;
+};
#define MDS_FIRST_OPC MDS_GETATTR
/* opcodes for object update */
-typedef enum {
+enum update_cmd {
OUT_UPDATE = 1000,
OUT_UPDATE_LAST_OPC
-} update_cmd_t;
+};
#define OUT_UPDATE_FIRST_OPC OUT_UPDATE
__s64 mbo_atime;
__s64 mbo_ctime;
__u64 mbo_blocks; /* XID, in the case of MDS_READPAGE */
- __u64 mbo_ioepoch;
+ __u64 mbo_version; /* was mbo_ioepoch before 2.11 */
__u64 mbo_t_state; /* transient file state defined in
* enum md_transient_state
* was "ino" until 2.4.0 */
__u32 mbo_flags; /* LUSTRE_*_FL file attributes */
__u32 mbo_rdev;
__u32 mbo_nlink; /* #bytes to read in the case of MDS_READPAGE */
- __u32 mbo_unused2; /* was "generation" until 2.4.0 */
+ __u32 mbo_layout_gen; /* was "generation" until 2.4.0 */
__u32 mbo_suppgid;
__u32 mbo_eadatasize;
__u32 mbo_aclsize;
#define MDS_ATTR_FROM_OPEN 0x4000ULL /* = 16384, called from open path, ie O_TRUNC */
#define MDS_ATTR_BLOCKS 0x8000ULL /* = 32768 */
#define MDS_ATTR_PROJID 0x10000ULL /* = 65536 */
+#define MDS_ATTR_LSIZE 0x20000ULL /* = 131072 */
+#define MDS_ATTR_LBLOCKS 0x40000ULL /* = 262144 */
enum mds_op_bias {
- MDS_CHECK_SPLIT = 1 << 0,
+/* MDS_CHECK_SPLIT = 1 << 0, obsolete before 2.3.58 */
MDS_CROSS_REF = 1 << 1,
- MDS_VTX_BYPASS = 1 << 2,
+/* MDS_VTX_BYPASS = 1 << 2, obsolete since 2.3.54 */
MDS_PERM_BYPASS = 1 << 3,
/* MDS_SOM = 1 << 4, obsolete since 2.8.0 */
MDS_QUOTA_IGNORE = 1 << 5,
- /* Was MDS_CLOSE_CLEANUP (1 << 6), No more used */
+/* MDS_CLOSE_CLEANUP = 1 << 6, obsolete since 2.3.51 */
MDS_KEEP_ORPHAN = 1 << 7,
MDS_RECOV_OPEN = 1 << 8,
MDS_DATA_MODIFIED = 1 << 9,
MDS_CREATE_VOLATILE = 1 << 10,
MDS_OWNEROVERRIDE = 1 << 11,
MDS_HSM_RELEASE = 1 << 12,
- MDS_RENAME_MIGRATE = 1 << 13,
+ MDS_CLOSE_MIGRATE = 1 << 13,
MDS_CLOSE_LAYOUT_SWAP = 1 << 14,
MDS_CLOSE_LAYOUT_MERGE = 1 << 15,
MDS_CLOSE_RESYNC_DONE = 1 << 16,
};
/* LFSCK opcodes */
-typedef enum {
+enum lfsck_cmd {
LFSCK_NOTIFY = 1101,
LFSCK_QUERY = 1102,
LFSCK_LAST_OPC,
- LFSCK_FIRST_OPC = LFSCK_NOTIFY
-} lfsck_cmd_t;
+ LFSCK_FIRST_OPC = LFSCK_NOTIFY
+};
/*
* LOV data structures
* LDLM requests:
*/
/* opcodes -- MUST be distinct from OST/MDS opcodes */
-typedef enum {
+enum ldlm_cmd {
LDLM_ENQUEUE = 101,
LDLM_CONVERT = 102,
LDLM_CANCEL = 103,
LDLM_GL_CALLBACK = 106,
LDLM_SET_INFO = 107,
LDLM_LAST_OPC
-} ldlm_cmd_t;
+};
#define LDLM_FIRST_OPC LDLM_ENQUEUE
#define RES_NAME_SIZE 4
(unsigned long long)(res)->lr_name.name[3]
/* lock types */
-typedef enum ldlm_mode {
+enum ldlm_mode {
LCK_MINMODE = 0,
LCK_EX = 1,
LCK_PW = 2,
LCK_GROUP = 64,
LCK_COS = 128,
LCK_MAXMODE
-} ldlm_mode_t;
+};
#define LCK_MODE_NUM 8
-typedef enum ldlm_type {
+enum ldlm_type {
LDLM_PLAIN = 10,
LDLM_EXTENT = 11,
LDLM_FLOCK = 12,
LDLM_IBITS = 13,
LDLM_MAX_TYPE
-} ldlm_type_t;
+};
#define LDLM_MIN_TYPE LDLM_PLAIN
}
struct ldlm_inodebits {
- __u64 bits;
- __u64 try_bits; /* optional bits to try */
+ __u64 bits;
+ union {
+ __u64 try_bits; /* optional bits to try */
+ __u64 cancel_bits; /* for lock convert */
+ };
};
struct ldlm_flock_wire {
* this ever changes we will need to swab the union differently based
* on the resource type. */
-typedef union ldlm_wire_policy_data {
+union ldlm_wire_policy_data {
struct ldlm_extent l_extent;
struct ldlm_flock_wire l_flock;
struct ldlm_inodebits l_inodebits;
-} ldlm_wire_policy_data_t;
+};
struct barrier_lvb {
__u32 lvb_status;
enum ldlm_intent_flags {
IT_OPEN = 0x00000001,
IT_CREAT = 0x00000002,
- IT_OPEN_CREAT = 0x00000003,
- IT_READDIR = 0x00000004,
+ IT_OPEN_CREAT = IT_OPEN | IT_CREAT, /* To allow case label. */
+ IT_READDIR = 0x00000004, /* Used by mdc, not put on the wire. */
IT_GETATTR = 0x00000008,
IT_LOOKUP = 0x00000010,
- IT_UNLINK = 0x00000020,
- IT_TRUNC = 0x00000040,
+/* IT_UNLINK = 0x00000020, Obsolete. */
+/* IT_TRUNC = 0x00000040, Obsolete. */
IT_GETXATTR = 0x00000080,
- IT_EXEC = 0x00000100,
- IT_PIN = 0x00000200,
+/* IT_EXEC = 0x00000100, Obsolete. */
+/* IT_PIN = 0x00000200, Obsolete. */
IT_LAYOUT = 0x00000400,
IT_QUOTA_DQACQ = 0x00000800,
IT_QUOTA_CONN = 0x00001000,
- IT_SETXATTR = 0x00002000,
+/* IT_SETXATTR = 0x00002000, Obsolete. */
IT_GLIMPSE = 0x00004000,
IT_BRW = 0x00008000,
};
/*
* Opcodes for mountconf (mgs and mgc)
*/
-typedef enum {
- MGS_CONNECT = 250,
- MGS_DISCONNECT,
- MGS_EXCEPTION, /* node died, etc. */
- MGS_TARGET_REG, /* whenever target starts up */
- MGS_TARGET_DEL,
- MGS_SET_INFO,
- MGS_CONFIG_READ,
- MGS_LAST_OPC
-} mgs_cmd_t;
-#define MGS_FIRST_OPC MGS_CONNECT
+enum mgs_cmd {
+ MGS_CONNECT = 250,
+ MGS_DISCONNECT = 251,
+ MGS_EXCEPTION = 252, /* node died, etc. */
+ MGS_TARGET_REG = 253, /* whenever target starts up */
+ MGS_TARGET_DEL = 254,
+ MGS_SET_INFO = 255,
+ MGS_CONFIG_READ = 256,
+ MGS_LAST_OPC,
+ MGS_FIRST_OPC = MGS_CONNECT
+};
#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 13, 53, 0)
#define MGS_PARAM_MAXLEN 1024
/*
* Opcodes for multiple servers.
*/
-
-typedef enum {
- OBD_PING = 400,
- OBD_LOG_CANCEL,
- OBD_QC_CALLBACK, /* not used since 2.4 */
- OBD_IDX_READ,
- OBD_LAST_OPC
-} obd_cmd_t;
-#define OBD_FIRST_OPC OBD_PING
+enum obd_cmd {
+ OBD_PING = 400,
+/* OBD_LOG_CANCEL = 401, obsolete since 1.5 */
+/* OBD_QC_CALLBACK = 402, obsolete since 2.4 */
+ OBD_IDX_READ = 403,
+ OBD_LAST_OPC,
+ OBD_FIRST_OPC = OBD_PING
+};
/**
* llog contexts indices.
#define LLOG_OP_MAGIC 0x10600000
#define LLOG_OP_MASK 0xfff00000
-typedef enum {
+enum llog_op_type {
LLOG_PAD_MAGIC = LLOG_OP_MAGIC | 0x00000,
OST_SZ_REC = LLOG_OP_MAGIC | 0x00f00,
/* OST_RAID1_REC = LLOG_OP_MAGIC | 0x01000, never used */
UPDATE_REC = LLOG_OP_MAGIC | 0xa0000,
LLOG_HDR_MAGIC = LLOG_OP_MAGIC | 0x45539,
LLOG_LOGID_MAGIC = LLOG_OP_MAGIC | 0x4553b,
-} llog_op_type;
+};
#define LLOG_REC_HDR_NEEDS_SWABBING(r) \
(((r)->lrh_type & __swab32(LLOG_OP_MASK)) == __swab32(LLOG_OP_MAGIC))
/** default \a changelog_rec_type mask. Allow all of them, except
* CL_ATIME since it can really be time consuming, and not necessary
* under normal use.
- * Remove also CL_OPEN and CL_GETXATTR from default list as it can be costly and
- * only necessary for audit purpose.
+ * Remove also CL_OPEN, CL_GETXATTR and CL_DN_OPEN from default list as it can
+ * be costly and only necessary for audit purpose.
*/
#define CHANGELOG_DEFMASK (CHANGELOG_ALLMASK & \
- ~(1 << CL_ATIME | 1 << CL_OPEN | 1 << CL_GETXATTR))
+ ~(1 << CL_ATIME | 1 << CL_OPEN | 1 << CL_GETXATTR | \
+ 1 << CL_DN_OPEN))
/* changelog llog name, needed by client replicators */
#define CHANGELOG_CATALOG "changelog_catalog"
* agent_req_status */
__u32 arr_archive_id; /**< backend archive number */
__u64 arr_flags; /**< req flags */
- __u64 arr_compound_id; /**< compound cookie */
+ __u64 arr_compound_id; /**< compound cookie, ignored */
__u64 arr_req_create; /**< req. creation time */
__u64 arr_req_change; /**< req. status change time */
struct hsm_action_item arr_hai; /**< req. to the agent */
/** llog protocol */
enum llogd_rpc_ops {
- LLOG_ORIGIN_HANDLE_CREATE = 501,
- LLOG_ORIGIN_HANDLE_NEXT_BLOCK = 502,
- LLOG_ORIGIN_HANDLE_READ_HEADER = 503,
- LLOG_ORIGIN_HANDLE_WRITE_REC = 504,
- LLOG_ORIGIN_HANDLE_CLOSE = 505,
- LLOG_ORIGIN_CONNECT = 506,
- LLOG_CATINFO = 507, /* deprecated */
- LLOG_ORIGIN_HANDLE_PREV_BLOCK = 508,
- LLOG_ORIGIN_HANDLE_DESTROY = 509, /* for destroy llog object*/
- LLOG_LAST_OPC,
- LLOG_FIRST_OPC = LLOG_ORIGIN_HANDLE_CREATE
+ LLOG_ORIGIN_HANDLE_CREATE = 501,
+ LLOG_ORIGIN_HANDLE_NEXT_BLOCK = 502,
+ LLOG_ORIGIN_HANDLE_READ_HEADER = 503,
+/* LLOG_ORIGIN_HANDLE_WRITE_REC = 504, Obsolete by 2.1. */
+/* LLOG_ORIGIN_HANDLE_CLOSE = 505, Obsolete by 1.8. */
+/* LLOG_ORIGIN_CONNECT = 506, Obsolete by 2.4. */
+/* LLOG_CATINFO = 507, Obsolete by 2.3. */
+ LLOG_ORIGIN_HANDLE_PREV_BLOCK = 508,
+ LLOG_ORIGIN_HANDLE_DESTROY = 509, /* Obsolete by 2.11. */
+ LLOG_LAST_OPC,
+ LLOG_FIRST_OPC = LLOG_ORIGIN_HANDLE_CREATE
};
struct llogd_body {
};
/* security opcodes */
-typedef enum {
+enum sec_cmd {
SEC_CTX_INIT = 801,
SEC_CTX_INIT_CONT = 802,
SEC_CTX_FINI = 803,
SEC_LAST_OPC,
SEC_FIRST_OPC = SEC_CTX_INIT
-} sec_cmd_t;
+};
/*
* capa related definitions
OUT_PUNCH = 14,
OUT_READ = 15,
OUT_NOOP = 16,
+ OUT_XATTR_LIST = 17,
OUT_LAST
};