MDT Body ^^^^^^^^ [[struct-mdt-body]] An 'mdt_body' structure conveys information about the metadata for a resource. ---- struct mdt_body { struct lu_fid mbo_fid1; /* OBD_MD_FLID */ struct lu_fid mbo_fid2; /* OBD_MD_FLID */ struct lustre_handle mbo_handle; __u64 mbo_valid; __u64 mbo_size; /* OBD_MD_FLSIZE */ __s64 mbo_mtime; /* OBD_MD_FLATIME */ __s64 mbo_atime; /* OBD_MD_FLMTIME */ __s64 mbo_ctime; /* OBD_MD_FLCTIME */ __u64 mbo_blocks; /* OBD_MD_FLBLOCKS */ __u64 mbo_ioepoch; __u64 mbo_t_state; /* OBD_MD_TSTATE */ __u32 mbo_fsuid; __u32 mbo_fsgid; __u32 mbo_capability; __u32 mbo_mode; /* OBD_MD_FLMODE */ __u32 mbo_uid; /* OBD_MD_FLUID */ __u32 mbo_gid; /* OBD_MD_FLGID */ __u32 mbo_flags; /* OBD_MD_FLFLAGS */ __u32 mbo_rdev; /* OBD_MD_FLRDEV */ __u32 mbo_nlink; /* OBD_MD_FLNLINK */ __u32 mbo_unused2; __u32 mbo_suppgid; __u32 mbo_eadatasize; /* OBD_MD_FLEASIZE */ __u32 mbo_aclsize; /* OBD_MD_FLACL */ __u32 mbo_max_mdsize; /* OBD_MD_FLMODEASIZE */ __u32 mbo_max_cookiesize; /* OBD_MD_FLMODEASIZE */ __u32 mbo_uid_h; __u32 mbo_gid_h; __u32 mbo_padding_5; __u64 mbo_padding_6; __u64 mbo_padding_7; __u64 mbo_padding_8; __u64 mbo_padding_9; __u64 mbo_padding_10; }; /* 216 */ ---- For an operation that involves two resources both the 'mbo_fid1' and 'mbo_fid2' fields will be filled in. If the 'mdt_body' is part of an RPC affecting or involving only a single resource then 'mbo_fid1' will designate that resource and 'mbo_fid2' will be cleared (see <>). The 'mbo_handle' field indicates the identity of an open file related to the operation, if any. If there is no lock then it is just 0. The 'mbo_valid' field identifies which of the remaining fields are actually in force. The flags in 'mbo_valid' are: ---- #define OBD_MD_FLID (0x00000001ULL) #define OBD_MD_FLATIME (0x00000002ULL) #define OBD_MD_FLMTIME (0x00000004ULL) #define OBD_MD_FLCTIME (0x00000008ULL) #define OBD_MD_FLSIZE (0x00000010ULL) #define OBD_MD_FLBLOCKS (0x00000020ULL) #define OBD_MD_FLMODE (0x00000080ULL) #define OBD_MD_FLUID (0x00000200ULL) #define OBD_MD_FLGID (0x00000400ULL) #define OBD_MD_FLFLAGS (0x00000800ULL) #define OBD_MD_FLNLINK (0x00002000ULL) #define OBD_MD_FLRDEV (0x00010000ULL) #define OBD_MD_FLEASIZE (0x00020000ULL) #define OBD_MD_FLMODEASIZE (0x80000000ULL) #define OBD_MD_TSTATE (0x0000000800000000ULL) #define OBD_MD_FLACL (0x0000008000000000ULL) ---- Which flag is associated with which field is indicated in the comments beside the fields in the struct definition above. The fields without corresponding flags in the 'mbo_valid' field should be considered valid, though I'm not sure how much they actually get used. Many of the fields have names and meanings that correspond directly to those in 'struct mdt_rec_setattr' (ex. 'atime', 'size', 'mode', etc). Mainly these are the conventional metadata attributes, and should be self-explanatory. The ones that are a little less obvious are discussed here. The 'mbo_ioepoch' field is no longer in use. The 'mbo_t_state' field indicates if there is a "transient state", as when an HSM "restore" is in operation. The 'mbo_rdev' field holds the special device number for a block or character device associated with the resource, if there is one. It will be 0 for a regular file. The 'mbo_nlink' field gives the number of hard links to the resource. The 'mbo_eadatasize' field gives the size of the extended attributes, which hold such information as the resource's layout. The 'mbo_aclsize' field supports POSIX access control lists (ACLs). The 'mbo_max_mdsize' field The 'mbo_max_cookiesize' field is unused.