Whamcloud - gitweb
LUDOC-276 protocol: Document RPCs for setattr
[doc/protocol.git] / mdt_rec_reint.txt
diff --git a/mdt_rec_reint.txt b/mdt_rec_reint.txt
new file mode 100644 (file)
index 0000000..16dab6b
--- /dev/null
@@ -0,0 +1,119 @@
+Generic MDS_REINT
+^^^^^^^^^^^^^^^^^
+
+An 'mdt_rec_reint' structure specifies the generic form for MDS_REINT
+requests. Each sub-operation, as defned by the 'rr_opcode' field, has
+its own variant of this structure. Each variant has the same size as
+the generic 'mdt_rec_reint', but interprets its fields slightly
+differently.  Note that in order for swabbing to take place correctly
+the sequence of field sizes must the same in every variant as it is in
+the generic version (not just the overal size of the sturcture).
+
+----
+struct mdt_rec_reint {
+       __u32           rr_opcode;
+       __u32           rr_cap;
+       __u32           rr_fsuid;
+       __u32           rr_fsuid_h;
+       __u32           rr_fsgid;
+       __u32           rr_fsgid_h;
+       __u32           rr_suppgid1;
+       __u32           rr_suppgid1_h;
+       __u32           rr_suppgid2;
+       __u32           rr_suppgid2_h;
+       struct lu_fid   rr_fid1;
+       struct lu_fid   rr_fid2;
+       obd_time        rr_mtime;
+       obd_time        rr_atime;
+       obd_time        rr_ctime;
+       __u64           rr_size;
+       __u64           rr_blocks;
+       __u32           rr_bias;
+       __u32           rr_mode;
+       __u32           rr_flags;
+       __u32           rr_flags_h;
+       __u32           rr_umask;
+       __u32           rr_padding_4; /* also fix lustre_swab_mdt_rec_reint */
+};
+----
+
+The 'rr_opcode' field defines one among the several sub-commands for
+MDS REINT RPCs. Those opcodes are:
+
+----
+typedef enum {
+  REINT_SETATTR  = 1,
+  REINT_CREATE   = 2,
+  REINT_LINK     = 3,
+  REINT_UNLINK   = 4,
+  REINT_RENAME   = 5,
+  REINT_OPEN     = 6,
+  REINT_SETXATTR = 7,
+} mds_reint_t;
+----
+
+Based on that opcode one of the variants of the structure will
+actually be used. See <<mds-reint-setattr-rpc>> for one example.
+
+The 'rr_cap' field is not used (and has been dropped in more recent
+code updates).
+
+The 'rr_fsuid' field gives the UID of the file system mount point.
+
+The 'rr_fsuid_h' field gives the high bytes of a the file system mount
+point UID in an environment where UIDs are 64-bit. The same holds for
+the other '_h' fields.
+
+The 'rr_fsgid' field gives the GID of the file system mount point.
+For each opcode there is a variant of the 'mdt_rec_reint' that has
+identical byte fields, but slightly modified semantics. The following
+is for the REINT_SETATTR sub-operation.
+
+The 'rr_suppgid1' and 'rr_suppgid2' fields are supplementary GID
+information for kernels that have it.
+
+The 'rr_fid1' and 'rr_fid2' fields specify the file IDs for the
+resources being operated upon. If only one resource is being acted
+upon then 'rr_fid2' is not used.
+
+The 'rr_mtime' 'rr_atime' and 'rr_ctime' fields give the values of the
+time attributes. The 'obd_time' type is also a '__u64'.
+
+The 'rr_size' field gives the value of the size attribute.
+
+The 'rr_blocks' field gives the value of the number-of-blocks
+attribute.
+
+The 'rr_bias' field adds additional optional information to the
+REINT. The possible values are:
+
+----
+enum mds_op_bias {
+       MDS_CHECK_SPLIT         = 1 << 0,
+       MDS_CROSS_REF           = 1 << 1,
+       MDS_VTX_BYPASS          = 1 << 2,
+       MDS_PERM_BYPASS         = 1 << 3,
+       MDS_SOM                 = 1 << 4,
+       MDS_QUOTA_IGNORE        = 1 << 5,
+       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,
+};
+----
+
+For example, MDS_DATA_MODIFIED signals to the HSM system that the MDT
+should set the corresponding HSM extended attribute. We'll return to
+this topic with more details about the individual flags at a later
+date.
+
+The 'rr_mode' field gives the value of the mode attribute.
+
+The 'rr_flags' and 'rr_flags_h' fields give the value (and the high
+order bytes of the value, respectively, if there are high order bytes)
+of the flags attribute.
+
+The 'rr_umask' gives the value of the 'umask' to apply in, for
+example, a REINT_CREATE.