#ifndef _LUSTRE_IDL_H_
#define _LUSTRE_IDL_H_
+#include <libcfs/libcfs.h> /* for LASSERT, LPUX64, etc */
+
/* Defn's shared with user-space. */
#include <lustre/lustre_user.h>
#define OBD_CONNECT_SKIP_ORPHAN 0x400000000ULL /* don't reuse orphan objids */
#define OBD_CONNECT_MAX_EASIZE 0x800000000ULL /* preserved for large EA */
#define OBD_CONNECT_FULL20 0x1000000000ULL /* it is 2.0 client */
+#define OBD_CONNECT_LAYOUTLOCK 0x2000000000ULL /* client supports layout lock */
/* also update obd_connect_names[] for lprocfs_rd_connect_flags()
* and lustre/utils/wirecheck.c */
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_ALL = OBD_FL_CKSUM_CRC32 | OBD_FL_CKSUM_ADLER,
/* mask for local-only flag, which won't be sent over network */
OBD_FL_LOCAL_MASK = 0xF0000000,
- /* temporary OBDO used by osc_brw_async (see bug 18364) */
- OBD_FL_TEMPORARY = 0x10000000,
};
#define LOV_MAGIC_V1 0x0BD10BD0
#define OBD_BRW_NOCACHE 0x80 /* this page is a part of non-cached IO */
#define OBD_BRW_NOQUOTA 0x100
#define OBD_BRW_SRVLOCK 0x200 /* Client holds no lock over this page */
+#define OBD_BRW_ASYNC 0x400 /* Server may delay commit to disk */
#define OBD_BRW_MEMALLOC 0x800 /* Client runs in the "kswapd" context */
#define OBD_OBJECT_EOF 0xffffffffffffffffULL
MDS_CLOSE_CLEANUP = 1 << 6
};
+/* instance of mdt_reint_rec */
struct mdt_rec_create {
__u32 cr_opcode;
__u32 cr_cap;
__u64 cr_time;
__u64 cr_rdev;
__u64 cr_ioepoch;
- __u64 cr_padding_1; /* pad for 64 bits*/
+ __u64 cr_padding_1; /* rr_blocks */
__u32 cr_mode;
__u32 cr_bias;
- __u32 cr_flags; /* for use with open */
- __u32 cr_padding_2;
- __u32 cr_padding_3;
- __u32 cr_padding_4;
+ __u32 cr_flags; /* for use with open */
+ __u32 cr_padding_2; /* rr_padding_2 */
+ __u32 cr_padding_3; /* rr_padding_3 */
+ __u32 cr_padding_4; /* rr_padding_4 */
};
+/* instance of mdt_reint_rec */
struct mdt_rec_link {
__u32 lk_opcode;
__u32 lk_cap;
struct lu_fid lk_fid1;
struct lu_fid lk_fid2;
__u64 lk_time;
- __u64 lk_padding_1;
- __u64 lk_padding_2;
- __u64 lk_padding_3;
- __u64 lk_padding_4;
+ __u64 lk_padding_1; /* rr_atime */
+ __u64 lk_padding_2; /* rr_ctime */
+ __u64 lk_padding_3; /* rr_size */
+ __u64 lk_padding_4; /* rr_blocks */
__u32 lk_bias;
- __u32 lk_padding_5;
- __u32 lk_padding_6;
- __u32 lk_padding_7;
- __u32 lk_padding_8;
- __u32 lk_padding_9;
+ __u32 lk_padding_5; /* rr_mode */
+ __u32 lk_padding_6; /* rr_flags */
+ __u32 lk_padding_7; /* rr_padding_2 */
+ __u32 lk_padding_8; /* rr_padding_3 */
+ __u32 lk_padding_9; /* rr_padding_4 */
};
+/* instance of mdt_reint_rec */
struct mdt_rec_unlink {
__u32 ul_opcode;
__u32 ul_cap;
struct lu_fid ul_fid1;
struct lu_fid ul_fid2;
__u64 ul_time;
- __u64 ul_padding_2;
- __u64 ul_padding_3;
- __u64 ul_padding_4;
- __u64 ul_padding_5;
+ __u64 ul_padding_2; /* rr_atime */
+ __u64 ul_padding_3; /* rr_ctime */
+ __u64 ul_padding_4; /* rr_size */
+ __u64 ul_padding_5; /* rr_blocks */
__u32 ul_bias;
__u32 ul_mode;
- __u32 ul_padding_6;
- __u32 ul_padding_7;
- __u32 ul_padding_8;
- __u32 ul_padding_9;
+ __u32 ul_padding_6; /* rr_flags */
+ __u32 ul_padding_7; /* rr_padding_2 */
+ __u32 ul_padding_8; /* rr_padding_3 */
+ __u32 ul_padding_9; /* rr_padding_4 */
};
+/* instance of mdt_reint_rec */
struct mdt_rec_rename {
__u32 rn_opcode;
__u32 rn_cap;
struct lu_fid rn_fid1;
struct lu_fid rn_fid2;
__u64 rn_time;
- __u64 rn_padding_1;
- __u64 rn_padding_2;
- __u64 rn_padding_3;
- __u64 rn_padding_4;
- __u32 rn_bias; /* some operation flags */
- __u32 rn_mode; /* cross-ref rename has mode */
- __u32 rn_padding_5;
- __u32 rn_padding_6;
- __u32 rn_padding_7;
- __u32 rn_padding_8;
-};
-
+ __u64 rn_padding_1; /* rr_atime */
+ __u64 rn_padding_2; /* rr_ctime */
+ __u64 rn_padding_3; /* rr_size */
+ __u64 rn_padding_4; /* rr_blocks */
+ __u32 rn_bias; /* some operation flags */
+ __u32 rn_mode; /* cross-ref rename has mode */
+ __u32 rn_padding_5; /* rr_flags */
+ __u32 rn_padding_6; /* rr_padding_2 */
+ __u32 rn_padding_7; /* rr_padding_3 */
+ __u32 rn_padding_8; /* rr_padding_4 */
+};
+
+/* instance of mdt_reint_rec */
struct mdt_rec_setxattr {
__u32 sx_opcode;
__u32 sx_cap;
__u32 sx_suppgid2;
__u32 sx_suppgid2_h;
struct lu_fid sx_fid;
- __u64 sx_padding_1; /* These three members are lu_fid size */
+ __u64 sx_padding_1; /* These three are rr_fid2 */
__u32 sx_padding_2;
__u32 sx_padding_3;
__u64 sx_valid;
__u64 sx_time;
- __u64 sx_padding_5;
- __u64 sx_padding_6;
- __u64 sx_padding_7;
+ __u64 sx_padding_5; /* rr_ctime */
+ __u64 sx_padding_6; /* rr_size */
+ __u64 sx_padding_7; /* rr_blocks */
__u32 sx_size;
__u32 sx_flags;
- __u32 sx_padding_8;
- __u32 sx_padding_9;
- __u32 sx_padding_10;
- __u32 sx_padding_11;
+ __u32 sx_padding_8; /* rr_flags */
+ __u32 sx_padding_9; /* rr_padding_2 */
+ __u32 sx_padding_10; /* rr_padding_3 */
+ __u32 sx_padding_11; /* rr_padding_4 */
};
+/*
+ * mdt_rec_reint is the template for all mdt_reint_xxx structures.
+ * Do NOT change the size of various members, otherwise the value
+ * will be broken in lustre_swab_mdt_rec_reint().
+ *
+ * If you add new members in other mdt_reint_xxx structres and need to use the
+ * rr_padding_x fields, then update lustre_swab_mdt_rec_reint() also.
+ */
struct mdt_rec_reint {
__u32 rr_opcode;
__u32 rr_cap;
__u64 rr_blocks;
__u32 rr_bias;
__u32 rr_mode;
- __u32 rr_padding_1; /* also fix lustre_swab_mdt_rec_reint */
+ __u32 rr_flags;
__u32 rr_padding_2; /* also fix lustre_swab_mdt_rec_reint */
__u32 rr_padding_3; /* also fix lustre_swab_mdt_rec_reint */
__u32 rr_padding_4; /* also fix lustre_swab_mdt_rec_reint */
/** bits covering all \a changelog_rec_type's */
#define CHANGELOG_ALLMASK 0XFFFFFFFF
/** default \a changelog_rec_type mask */
-#define CHANGELOG_DEFMASK CHANGELOG_ALLMASK
+#define CHANGELOG_DEFMASK CHANGELOG_ALLMASK & ~(1 << CL_ATIME)
/* changelog llog name, needed by client replicators */
#define CHANGELOG_CATALOG "changelog_catalog"