.OST Body [[struct-ost-body]] **** The 'ost_body' structure just holds a 'struct obdo', which is where all the actual information is conveyed. [source,c] ---- struct ost_body { struct obdo oa; }; ---- **** .Obdo [[struct-obdo]] **** The 'obdo' structure conveys metadata about a resource on an OST. [source,c] ---- struct obdo { __u64 o_valid; struct ost_id o_oi; /* OBD_MD_FLID */ __u64 o_parent_seq; /* OBD_MD_FLFID */ __u64 o_size; /* OBD_MD_FLSIZE */ __s64 o_mtime; /* OBD_MD_FLMTIME */ __s64 o_atime; /* OBD_MD_FLMTIME */ __s64 o_ctime; /* OBD_MD_FLCTIME */ __u64 o_blocks; /* OBD_MD_FLBLOCKS */ __u64 o_grant; /* OBD_MD_FLGRANT */ __u32 o_blksize; /* OBD_MD_FLBLKSZ */ __u32 o_mode; /* OBD_MD_FLMODE */ __u32 o_uid; /* OBD_MD_FLUID */ __u32 o_gid; /* OBD_MD_FLGID */ __u32 o_flags; /* OBD_MD_FLFLAGS */ __u32 o_nlink; /* OBD_MD_FLNLINK */ __u32 o_parent_oid; __u32 o_misc; __u64 o_ioepoch; /* OBD_MD_ */ __u32 o_stripe_idx; __u32 o_parent_ver; /* OBD_MD_FLFID */ struct lustre_handle o_handle; /* OBD_MD_FLHANDLE */ struct llog_cookie o_lcookie; /* OBD_MD_FLCOOKIE */ __u32 o_uid_h; __u32 o_gid_h; __u64 o_data_version; /* OBD_MD_FLDATAVERSION */ __u64 o_padding_4; __u64 o_padding_5; __u64 o_padding_6; }; ---- The 'o_valid' field identifies which other fields in the structure are to be interpreted. The flags are the same set (with additions) used for the 'mdt_body' field 'mbo_valid' (see <>). **** [source,c] ---- #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_FLBLKSZ (0x00000040ULL) #define OBD_MD_FLMODE (0x00000080ULL) #define OBD_MD_FLTYPE (0x00000100ULL) #define OBD_MD_FLUID (0x00000200ULL) #define OBD_MD_FLGID (0x00000400ULL) #define OBD_MD_FLFLAGS (0x00000800ULL) #define OBD_MD_FLNLINK (0x00002000ULL) #define OBD_MD_FLGENER (0x00004000ULL) /*#define OBD_MD_FLINLINE (0x00008000ULL) #define OBD_MD_FLRDEV (0x00010000ULL) #define OBD_MD_FLEASIZE (0x00020000ULL) #define OBD_MD_LINKNAME (0x00040000ULL) #define OBD_MD_FLHANDLE (0x00080000ULL) #define OBD_MD_FLCKSUM (0x00100000ULL) #define OBD_MD_FLQOS (0x00200000ULL) /*#define OBD_MD_FLOSCOPQ (0x00400000ULL) #define OBD_MD_FLCOOKIE (0x00800000ULL) #define OBD_MD_FLGROUP (0x01000000ULL) #define OBD_MD_FLFID (0x02000000ULL) #define OBD_MD_FLEPOCH (0x04000000ULL) #define OBD_MD_FLGRANT (0x08000000ULL) #define OBD_MD_FLDIREA (0x10000000ULL) #define OBD_MD_FLUSRQUOTA (0x20000000ULL) #define OBD_MD_FLGRPQUOTA (0x40000000ULL) #define OBD_MD_FLMODEASIZE (0x80000000ULL) #define OBD_MD_MDS (0x0000000100000000ULL) #define OBD_MD_REINT (0x0000000200000000ULL) #define OBD_MD_MEA (0x0000000400000000ULL) #define OBD_MD_TSTATE (0x0000000800000000ULL) #define OBD_MD_FLXATTR (0x0000001000000000ULL) #define OBD_MD_FLXATTRLS (0x0000002000000000ULL) #define OBD_MD_FLXATTRRM (0x0000004000000000ULL) #define OBD_MD_FLACL (0x0000008000000000ULL) #define OBD_MD_FLRMTPERM (0x0000010000000000ULL) #define OBD_MD_FLMDSCAPA (0x0000020000000000ULL) #define OBD_MD_FLOSSCAPA (0x0000040000000000ULL) #define OBD_MD_FLCKSPLIT (0x0000080000000000ULL) #define OBD_MD_FLCROSSREF (0x0000100000000000ULL) #define OBD_MD_FLGETATTRLOCK (0x0000200000000000ULL) #define OBD_MD_FLOBJCOUNT (0x0000400000000000ULL) #define OBD_MD_FLRMTLSETFACL (0x0001000000000000ULL) #define OBD_MD_FLRMTLGETFACL (0x0002000000000000ULL) #define OBD_MD_FLRMTRSETFACL (0x0004000000000000ULL) #define OBD_MD_FLRMTRGETFACL (0x0008000000000000ULL) #define OBD_MD_FLDATAVERSION (0x0010000000000000ULL) #define OBD_MD_FLRELEASED (0x0020000000000000ULL) #define OBD_MD_DEFAULT_MEA (0x0040000000000000ULL) ---- **** The two fields here that are specific to the 'ost_body' case are the 'o_oi' and the 'o_stripe_idx', which give the identity of the OST and the stripe index assigned to it. The 'o_handle' field is a 'lustre_handle' (See <>). In this context it represents a lock. In most cases it will be 0. In an OST_PUNCH RPC (See <>) it may refer to a lock on the resource being modified that was previously acquired, though a lock is not required for that operation. The effect is to extend the timeout for that lock. ****