Whamcloud - gitweb
LUDOC-297 protocol: Update protocol document
[doc/protocol.git] / struct_mdt_rec_reint.txt
1 Generic MDS_REINT
2 ^^^^^^^^^^^^^^^^^
3 [[struct-mdt-rec-reint]]
4
5 An 'mdt_rec_reint' structure specifies the generic form for MDS_REINT
6 requests. Each sub-operation, as defned by the 'rr_opcode' field, has
7 its own variant of this structure. Each variant has the same size as
8 the generic 'mdt_rec_reint', but interprets its fields slightly
9 differently.  Note that in order for swabbing to take place correctly
10 the sequence of field sizes must the same in every variant as it is in
11 the generic version (not just the overal size of the sturcture).
12
13 [source,c]
14 ----
15 struct mdt_rec_reint {
16         __u32           rr_opcode;
17         __u32           rr_cap;
18         __u32           rr_fsuid;
19         __u32           rr_fsuid_h;
20         __u32           rr_fsgid;
21         __u32           rr_fsgid_h;
22         __u32           rr_suppgid1;
23         __u32           rr_suppgid1_h;
24         __u32           rr_suppgid2;
25         __u32           rr_suppgid2_h;
26         struct lu_fid   rr_fid1;
27         struct lu_fid   rr_fid2;
28         __u64           rr_mtime;
29         __u64           rr_atime;
30         __u64           rr_ctime;
31         __u64           rr_size;
32         __u64           rr_blocks;
33         __u32           rr_bias;
34         __u32           rr_mode;
35         __u32           rr_flags;
36         __u32           rr_flags_h;
37         __u32           rr_umask;
38         __u32           rr_padding_4; /* also fix lustre_swab_mdt_rec_reint */
39 };
40 ----
41
42 The 'rr_opcode' field defines one among the several sub-commands for
43 MDS REINT RPCs. Those opcodes are:
44
45 .MDS Reint Type
46 ****
47 [source,c]
48 ----
49 typedef enum {
50   REINT_SETATTR  = 1,
51   REINT_CREATE   = 2,
52   REINT_LINK     = 3,
53   REINT_UNLINK   = 4,
54   REINT_RENAME   = 5,
55   REINT_OPEN     = 6,
56   REINT_SETXATTR = 7,
57 } mds_reint_t;
58 ----
59 ****
60
61 Based on that opcode one of the variants of the structure will
62 actually be used. See <<mds-reint-setattr-rpc>> for one example.
63
64 The 'rr_cap' field is not used (and has been dropped in more recent
65 code updates).
66
67 The 'rr_fsuid' field gives the UID of the file system mount point.
68
69 The 'rr_fsuid_h' field gives the high bytes of a the file system mount
70 point UID in an environment where UIDs are 64-bit. The same holds for
71 the other '_h' fields.
72
73 The 'rr_fsgid' field gives the GID of the file system mount point.
74 For each opcode there is a variant of the 'mdt_rec_reint' that has
75 identical byte fields, but slightly modified semantics. The following
76 is for the REINT_SETATTR sub-operation.
77
78 The 'rr_suppgid1' and 'rr_suppgid2' fields are supplementary GID
79 information for kernels that have it.
80
81 The 'rr_fid1' and 'rr_fid2' fields specify the FIDs (See
82 <<struct-lu-fid>>) for the resources being operated upon. If only one
83 resource is being acted upon then 'rr_fid2' is not used.
84
85 The 'rr_mtime' 'rr_atime' and 'rr_ctime' fields give the object
86 timestamps in seconds for the last modification time, the last
87 access time, and the last metadata change time, respectively.
88
89 The 'rr_size' field gives the value of the size attribute.
90
91 The 'rr_blocks' field gives the value of the number-of-blocks
92 attribute.
93
94 The 'rr_bias' field adds additional optional information to the
95 REINT. The possible values are:
96
97 .MDS Operation Bias
98 ****
99 [source,c]
100 ----
101 enum mds_op_bias {
102         MDS_CHECK_SPLIT         = 1 << 0,
103         MDS_CROSS_REF           = 1 << 1,
104         MDS_VTX_BYPASS          = 1 << 2,
105         MDS_PERM_BYPASS         = 1 << 3,
106         MDS_SOM                 = 1 << 4,
107         MDS_QUOTA_IGNORE        = 1 << 5,
108         MDS_KEEP_ORPHAN         = 1 << 7,
109         MDS_RECOV_OPEN          = 1 << 8,
110         MDS_DATA_MODIFIED       = 1 << 9,
111         MDS_CREATE_VOLATILE     = 1 << 10,
112         MDS_OWNEROVERRIDE       = 1 << 11,
113         MDS_HSM_RELEASE         = 1 << 12,
114 };
115 ----
116 ****
117
118 For example, MDS_DATA_MODIFIED signals to the HSM system that the MDT
119 should set the corresponding HSM extended attribute. We'll return to
120 this topic with more details about the individual flags at a later
121 date.
122
123 The 'rr_mode' field gives the value of the mode attribute.
124
125 The 'rr_flags' and 'rr_flags_h' fields give the value (and the high
126 order bytes of the value, respectively, if there are high order bytes)
127 of the flags attribute.
128
129 The 'rr_umask' gives the value of the 'umask' to apply in, for
130 example, a REINT_CREATE.