REINT_SETXATTR ^^^^^^^^^^^^^^ [[mdt-rec-setxattr]] The variant of the 'mdt_rec_reint' for the 'setxattr' operation is: ---- struct mdt_rec_setxattr { __u32 sx_opcode; __u32 sx_cap; __u32 sx_fsuid; __u32 sx_fsuid_h; __u32 sx_fsgid; __u32 sx_fsgid_h; __u32 sx_suppgid1; __u32 sx_suppgid1_h; __u32 sx_suppgid2; __u32 sx_suppgid2_h; struct lu_fid sx_fid; __u64 sx_padding_1; __u32 sx_padding_2; __u32 sx_padding_3; __u64 sx_valid; __s64 sx_time; __u64 sx_padding_5; __u64 sx_padding_6; __u64 sx_padding_7; __u32 sx_size; __u32 sx_flags; __u32 sx_padding_8; __u32 sx_padding_9; __u32 sx_padding_10; __u32 sx_padding_11; }; ---- The 'setxattr' variant modifies the semantics of the generic REINT fields as follows: There is only one FID to be operated upon, and the 'sx_valid', and the second 'struct lu_fid' is just "padding". The 'sx_valid' field identifies which of the other fields in the structure are to be honored. If the corresponding flag bit is not set then the value of the corresponding field is to be ignored. The flag values draw from the same set of definitions as <>. .Flags for 'sx_valid' field of 'struct mdt_rec_setxattr' [options="header"] |==== | Flag | Meaning | OBD_MD_FLCTIME | ctime attribute |==== The 'sx_time' field is set to the 'ctime' value for the update and the OBD_MD_FLCTIME value is used in the 'sx_valid' field to indicate the value is to be honored. Fixme: The other flag values for 'sx_valid' are not clear in the code, so I need to dig into them more deeply. Similarly, the use and possible values for the 'sx_flags' field are not obvious.