Whamcloud - gitweb
LU-1866 misc: fix some issues found during LFSCK
[fs/lustre-release.git] / lustre / include / lustre / lustre_idl.h
index 9b3a848..060c252 100644 (file)
@@ -1869,6 +1869,15 @@ typedef enum {
 
 #define MDS_FIRST_OPC    MDS_GETATTR
 
+
+/* opcodes for object update */
+typedef enum {
+       UPDATE_OBJ      = 1000,
+       UPDATE_LAST_OPC
+} update_cmd_t;
+
+#define UPDATE_FIRST_OPC    UPDATE_OBJ
+
 /*
  * Do not exceed 63
  */
@@ -1998,7 +2007,7 @@ struct mdt_body {
        obd_time        ctime;
         __u64          blocks; /* XID, in the case of MDS_READPAGE */
         __u64          ioepoch;
-        __u64          ino;
+       __u64          unused1; /* was "ino" until 2.4.0 */
         __u32          fsuid;
         __u32          fsgid;
         __u32          capability;
@@ -2008,7 +2017,7 @@ struct mdt_body {
         __u32          flags; /* from vfs for pin/unpin, LUSTRE_BFLAG close */
         __u32          rdev;
         __u32          nlink; /* #bytes to read in the case of MDS_READPAGE */
-        __u32          generation;
+       __u32          unused2; /* was "generation" until 2.4.0 */
         __u32          suppgid;
         __u32          eadatasize;
         __u32          aclsize;
@@ -2183,6 +2192,7 @@ enum {
        MDS_RECOV_OPEN          = 1 << 8,
        MDS_DATA_MODIFIED       = 1 << 9,
        MDS_CREATE_VOLATILE     = 1 << 10,
+       MDS_OWNEROVERRIDE       = 1 << 11,
 };
 
 /* instance of mdt_reint_rec */
@@ -2997,7 +3007,8 @@ struct obdo {
         obd_flag                o_flags;
         obd_count               o_nlink;        /* brw: checksum */
         obd_count               o_parent_oid;
-        obd_count               o_misc;         /* brw: o_dropped */
+       obd_count               o_misc;         /* brw: o_dropped */
+
         __u64                   o_ioepoch;      /* epoch in ost writes */
         __u32                   o_stripe_idx;   /* holds stripe idx */
         __u32                   o_parent_ver;
@@ -3005,16 +3016,16 @@ struct obdo {
                                                  * locks */
         struct llog_cookie      o_lcookie;      /* destroy: unlink cookie from
                                                  * MDS */
-        __u32                   o_uid_h;
-        __u32                   o_gid_h;
+       __u32                   o_uid_h;
+       __u32                   o_gid_h;
 
-        __u64                   o_data_version; /* getattr: sum of iversion for
-                                                 * each stripe.
-                                                 * brw: grant space consumed on
-                                                 * the client for the write */
-        __u64                   o_padding_4;
-        __u64                   o_padding_5;
-        __u64                   o_padding_6;
+       __u64                   o_data_version; /* getattr: sum of iversion for
+                                                * each stripe.
+                                                * brw: grant space consumed on
+                                                * the client for the write */
+       __u64                   o_padding_4;
+       __u64                   o_padding_5;
+       __u64                   o_padding_6;
 };
 
 #define o_id     o_oi.oi_id
@@ -3339,5 +3350,92 @@ extern void lustre_swab_hsm_progress_kernel(struct hsm_progress_kernel *hpk);
 extern void lustre_swab_hsm_user_state(struct hsm_user_state *hus);
 extern void lustre_swab_hsm_user_item(struct hsm_user_item *hui);
 extern void lustre_swab_hsm_request(struct hsm_request *hr);
+
+/**
+ * These are object update opcode under UPDATE_OBJ, which is currently
+ * being used by cross-ref operations between MDT.
+ *
+ * During the cross-ref operation, the Master MDT, which the client send the
+ * request to, will disassembly the operation into object updates, then OSP
+ * will send these updates to the remote MDT to be executed.
+ *
+ *   Update request format
+ *   magic:  UPDATE_BUFFER_MAGIC_V1
+ *   Count:  How many updates in the req.
+ *   bufs[0] : following are packets of object.
+ *   update[0]:
+ *             type: object_update_op, the op code of update
+ *             fid: The object fid of the update.
+ *             lens/bufs: other parameters of the update.
+ *   update[1]:
+ *             type: object_update_op, the op code of update
+ *             fid: The object fid of the update.
+ *             lens/bufs: other parameters of the update.
+ *   ..........
+ *   update[7]:        type: object_update_op, the op code of update
+ *             fid: The object fid of the update.
+ *             lens/bufs: other parameters of the update.
+ *   Current 8 maxim updates per object update request.
+ *
+ *******************************************************************
+ *   update reply format:
+ *
+ *   ur_version: UPDATE_REPLY_V1
+ *   ur_count:   The count of the reply, which is usually equal
+ *              to the number of updates in the request.
+ *   ur_lens:    The reply lengths of each object update.
+ *
+ *   replies:    1st update reply  [4bytes_ret: other body]
+ *              2nd update reply  [4bytes_ret: other body]
+ *              .....
+ *              nth update reply  [4bytes_ret: other body]
+ *
+ *   For each reply of the update, the format would be
+ *      result(4 bytes):Other stuff
+ */
+
+#define UPDATE_MAX_OPS         10
+#define UPDATE_BUFFER_MAGIC_V1 0xBDDE0001
+#define UPDATE_BUFFER_MAGIC    UPDATE_BUFFER_MAGIC_V1
+#define UPDATE_BUF_COUNT       8
+enum object_update_op {
+       OBJ_CREATE              = 1,
+       OBJ_DESTROY             = 2,
+       OBJ_REF_ADD             = 3,
+       OBJ_REF_DEL             = 4,
+       OBJ_ATTR_SET            = 5,
+       OBJ_ATTR_GET            = 6,
+       OBJ_XATTR_SET           = 7,
+       OBJ_XATTR_GET           = 8,
+       OBJ_INDEX_LOOKUP        = 9,
+       OBJ_INDEX_INSERT        = 10,
+       OBJ_INDEX_DELETE        = 11,
+       OBJ_LAST
+};
+
+struct update {
+       __u32           u_type;
+       __u32           u_padding;
+       struct lu_fid   u_fid;
+       __u32           u_lens[UPDATE_BUF_COUNT];
+       __u32           u_bufs[0];
+};
+
+struct update_buf {
+       __u32   ub_magic;
+       __u32   ub_count;
+       __u32   ub_bufs[0];
+};
+
+#define UPDATE_REPLY_V1                0x00BD0001
+struct update_reply {
+       __u32   ur_version;
+       __u32   ur_count;
+       __u32   ur_lens[0];
+};
+
+void lustre_swab_update_buf(struct update_buf *ub);
+void lustre_swab_update_reply_buf(struct update_reply *ur);
+
 #endif
 /** @} lustreidl */