RPC 36: MDS_REINT ~~~~~~~~~~~~~~~~~ [[mds-reint-rpc]] An MDS_REINT RPC ('pb_opc' = 36) is one that implements an operation that will change the state of an object on an MDT. There are a variety of operations all gathered under the MDS_REINT 'opcode'. The possible values for the 'mdt_rec_reint' struct's 'rr_opcode' field give types of operations that are encoded as MDS_REINT RPCs: .MDS Reint Opcodes ('rr_opcode') **** [source,c] ---- typedef enum { REINT_SETATTR = 1, REINT_CREATE = 2, REINT_LINK = 3, REINT_UNLINK = 4, REINT_RENAME = 5, REINT_OPEN = 6, REINT_SETXATTR = 7, REINT_RMENTRY = 8, REINT_MIGRATE = 9 }; ---- **** include::struct_mdt_rec_reint.txt[] REINT_SETATTR RPC ^^^^^^^^^^^^^^^^^ [[mds-reint-setattr-rpc]] The REINT_SETATTR is an RPC that implements the 'setattr' sub-command of the MDS_REINT. .MDS_REINT:REINT_SETATTR Request Packet Structure image::mds-reint-setattr-request.png["MDS_REINT:REINT_SETATTR Request Packet Structure",height=75] ////////////////////////////////////////////////////////////////////// The mds-reint-setattr-request.png diagram resembles this text art: MDS_REINT: --REINT_SETATTR-request------------------------------------- | ptlrpc_body | mdt_rec_setattr | lustre_capa | mdt_ioepoc | ------------------------------------------------------------ | eadata | llog_cookie | ldlm_request | --------------------------------------- ////////////////////////////////////////////////////////////////////// 'ptlrpc_body':: RPC descriptor. See <>. include::struct_mdt_rec_setattr.txt[] After the 'mdt_rec_setattr' there are several more buffers defined for the RPC, but those before the 'ldlm_request' are often unused and appear as zero-length buffers in the header. 'lustre_capa':: A "capabilities" structure. See <>. 'mdt_ioepoch':: Identifying "epoch" information. This buffer is optional and will appear as zero length in some packets. 'eadata':: Information about extended attributes. This buffer is optional and will appear as zero length in some packets. 'llog_cookie':: A log handle. This buffer is optional and will appear as zero length in some packets. 'ldlm_request':: A structure specifying a lock that can be the subject of early lock cancellation. See <>. .MDS_REINT:REINT_SETATTR Reply Packet Structure image::mds-reint-setattr-reply.png["MDS_REINT:REINT_SETATTR Reply Packet Structure",height=50] ////////////////////////////////////////////////////////////////////// The mds-reint-setattr-reply.png diagram resembles this text art: MDS_REINT: --REINT_SETATTR-reply-------------------------------- | ptlrpc_body | mdt_body | mdt_md | acl | fid1_capa | ----------------------------------------------------- | fid2_capa | ------------- ////////////////////////////////////////////////////////////////////// 'ptlrpc_body':: RPC descriptor. See <>. 'mdt_body':: Metadata about the resource. 'mdt_md':: Layout data for the resource. This buffer is optional and will appear as zero length in some packets. This needs to be further explained. 'acl':: Access control list data. This buffer is optional and will appear as zero length in some packets. 'fid1_capa':: The capabilities structure for the first FID in the 'mdt_body'. See <>. 'fid2_capa':: The capabilities structure for the second FID in the 'mdt_body'. See <>. REINT_SETXATTR RPC ^^^^^^^^^^^^^^^^^^ [[mds-reint-setxattr-rpc]] An RPC that implements the 'setxattr' sub-command of the MDS_REINT. .MDS_REINT:REINT_SETXATTR Request Packet Structure image::mds-reint-setxattr-request.png["MDS_REINT:REINT_SETXATTR Request Packet Structure",height=75] ////////////////////////////////////////////////////////////////////// The mds-reint-setxattr-request.png diagram resembles this text art: MDS_REINT: --REINT_SETXATTR-request------------------------------------- | ptlrpc_body | mdt_rec_setxattr | lustre_capa | mdt_ioepoc | ------------------------------------------------------------- | eadata | llog_cookie | ldlm_request | --------------------------------------- ////////////////////////////////////////////////////////////////////// 'ptlrpc_body':: RPC descriptor. See <>. include::struct_mdt_rec_setxattr.txt[] Returning to the remaining buffers in the REINT_SETXATTR RPC we again have several optional buffers followed by the 'ldlm_request'. 'lustre_capa':: A "capabilities" structure. See <>. This buffer is optional and will appear as zero length in some packets. 'mdt_ioepoch':: Identifying "epoch" information. This buffer is optional and will appear as zero length in some packets. 'eadata':: Information about extended attributes. This buffer is optional and will appear as zero length in some packets. 'llog_cookie':: A log handle. This buffer is optional and will appear as zero length in some packets. 'ldlm_request':: A structure specifying a lock that can be the subject of early lock cancellation. See <>. .MDS_REINT:REINT_SETXATTR Reply Packet Structure image::mds-reint-setxattr-reply.png["MDS_REINT:REINT_SETXATTR Reply Packet Structure",height=50] ////////////////////////////////////////////////////////////////////// The mds-reint-setxattr-reply.png diagram resembles this text art: MDS_REINT: --REINT_SETXATTR-reply--------------------------------- | ptlrpc_body | mdt_body | mdt_md | acl | fid1_capa | ------------------------------------------------------- | fid2_capa | ------------- ////////////////////////////////////////////////////////////////////// 'ptlrpc_body':: RPC descriptor. See <>. 'mdt_body':: Metadata about the resource. 'mdt_md':: Layout data for the resource. This buffer is optional and will appear as zero length in some packets. 'acl':: Access control list data. This buffer is optional and will appear as zero length in some packets. 'fid1_capa':: The capabilities structure for the first FID in the 'mdt_body'. See <>. 'fid2_capa':: The capabilities structure for the second FID in the 'mdt_body'. See <>.