X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Fmd_attrs.c;h=fe8fca5b69d5d40297b2a6f65da27d0b09abf31a;hb=0ff4dca9ceb2ecef8c3a03fc633b82b76bb67377;hp=190524a6f8d0eed0555b3703398fc25a61799dfa;hpb=82fcdd9b16aad0b1cd840383c6f3b18c40be00bd;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/md_attrs.c b/lustre/obdclass/md_attrs.c index 190524a..fe8fca5 100644 --- a/lustre/obdclass/md_attrs.c +++ b/lustre/obdclass/md_attrs.c @@ -21,14 +21,11 @@ * GPL HEADER END */ /* - * Copyright (c) 2012, 2013, Intel Corporation. + * Copyright (c) 2012, 2017, Intel Corporation. * Use is subject to license terms. * * Author: Johann Lombardi */ - -#include - #include #include #include @@ -50,10 +47,10 @@ void lustre_lma_init(struct lustre_mdt_attrs *lma, const struct lu_fid *fid, /* If a field is added in struct lustre_mdt_attrs, zero it explicitly * and change the test below. */ - LASSERT(sizeof(*lma) == - (offsetof(struct lustre_mdt_attrs, lma_self_fid) + - sizeof(lma->lma_self_fid))); -}; + BUILD_BUG_ON(sizeof(*lma) != + (offsetof(struct lustre_mdt_attrs, lma_self_fid) + + sizeof(lma->lma_self_fid))); +} EXPORT_SYMBOL(lustre_lma_init); /** @@ -68,9 +65,68 @@ void lustre_lma_swab(struct lustre_mdt_attrs *lma) __swab32s(&lma->lma_incompat); lustre_swab_lu_fid(&lma->lma_self_fid); #endif -}; +} EXPORT_SYMBOL(lustre_lma_swab); +void lustre_loa_init(struct lustre_ost_attrs *loa, const struct lu_fid *fid, + __u32 compat, __u32 incompat) +{ + BUILD_BUG_ON(sizeof(*loa) != LMA_OLD_SIZE); + + memset(&loa->loa_parent_fid, 0, + sizeof(*loa) - offsetof(typeof(*loa), loa_parent_fid)); + lustre_lma_init(&loa->loa_lma, fid, compat, incompat); +} +EXPORT_SYMBOL(lustre_loa_init); + +/** + * Swab, if needed, LOA (for OST-object only) structure with LMA EA and PFID EA + * combined together are stored on-disk in little-endian order. + * + * \param[in] loa - the pointer to the LOA structure to be swabbed. + * \param[in] to_cpu - to indicate swab for CPU order or not. + */ +void lustre_loa_swab(struct lustre_ost_attrs *loa, bool to_cpu) +{ + struct lustre_mdt_attrs *lma = &loa->loa_lma; +#ifdef __BIG_ENDIAN + __u32 compat = lma->lma_compat; +#endif + + lustre_lma_swab(lma); +#ifdef __BIG_ENDIAN + if (to_cpu) + compat = lma->lma_compat; + + if (compat & LMAC_STRIPE_INFO) { + lustre_swab_lu_fid(&loa->loa_parent_fid); + __swab32s(&loa->loa_stripe_size); + } + if (compat & LMAC_COMP_INFO) { + __swab32s(&loa->loa_comp_id); + __swab64s(&loa->loa_comp_start); + __swab64s(&loa->loa_comp_end); + } +#endif +} +EXPORT_SYMBOL(lustre_loa_swab); + +/** + * Swab, if needed, SOM structure which is stored on-disk in little-endian + * order. + * + * \param attrs - is a pointer to the SOM structure to be swabbed. + */ +void lustre_som_swab(struct lustre_som_attrs *attrs) +{ +#ifdef __BIG_ENDIAN + __swab16s(&attrs->lsa_valid); + __swab64s(&attrs->lsa_size); + __swab64s(&attrs->lsa_blocks); +#endif +} +EXPORT_SYMBOL(lustre_som_swab); + /** * Swab, if needed, HSM structure which is stored on-disk in little-endian * order. @@ -85,7 +141,7 @@ void lustre_hsm_swab(struct hsm_attrs *attrs) __swab64s(&attrs->hsm_arch_id); __swab64s(&attrs->hsm_arch_ver); #endif -}; +} /* * Swab and extract HSM attributes from on-disk xattr.