static int lsm_lmm_verify_v3(struct lov_mds_md *lmmv1, int lmm_bytes, __u16 *stripe_count) { struct lov_mds_md_v3 *lmm; lmm = (struct lov_mds_md_v3 *)lmmv1; if (lmm_bytes < sizeof(*lmm)) { CERROR("lov_mds_md_v3 too small: %d, need at least %d\n", lmm_bytes, (int)sizeof(*lmm)); return -EINVAL; } *stripe_count = le16_to_cpu(lmm->lmm_stripe_count); if (lmm_bytes < lov_mds_md_size(*stripe_count, LOV_MAGIC_V3)) { CERROR("LOV EA V3 too small: %d, need %d\n", lmm_bytes, lov_mds_md_size(*stripe_count, LOV_MAGIC_V3)); lov_dump_lmm_common(D_WARNING, lmm); return -EINVAL; } return lsm_lmm_verify_common((struct lov_mds_md_v1 *)lmm, lmm_bytes, *stripe_count); }
static int lsm_lmm_verify_v1(struct lov_mds_md_v1 *lmm, int lmm_bytes, __u16 *stripe_count) { if (lmm_bytes < sizeof(*lmm)) { CERROR("lov_mds_md_v1 too small: %d, need at least %d\n", lmm_bytes, (int)sizeof(*lmm)); return -EINVAL; } *stripe_count = le16_to_cpu(lmm->lmm_stripe_count); if (le32_to_cpu(lmm->lmm_pattern) & LOV_PATTERN_F_RELEASED) *stripe_count = 0; if (lmm_bytes < lov_mds_md_size(*stripe_count, LOV_MAGIC_V1)) { CERROR("LOV EA V1 too small: %d, need %d\n", lmm_bytes, lov_mds_md_size(*stripe_count, LOV_MAGIC_V1)); lov_dump_lmm_common(D_WARNING, lmm); return -EINVAL; } return lsm_lmm_verify_common(lmm, lmm_bytes, *stripe_count); }