X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flod%2Flod_lov.c;h=4376eaafb0300f1a7c913f187f18f2b068df7be5;hp=e011f7a94fb334a1725f5b59cfa8281a5a38464c;hb=b2d73351e64677cb8ff650d92a8744634f73e0fd;hpb=ffa858b1657145c7e3d9988291fbb1ef72b3b980 diff --git a/lustre/lod/lod_lov.c b/lustre/lod/lod_lov.c index e011f7a..4376eaa 100644 --- a/lustre/lod/lod_lov.c +++ b/lustre/lod/lod_lov.c @@ -958,7 +958,7 @@ repeat: * \retval 0 if the index is present * \retval -EINVAL if not */ -static int validate_lod_and_idx(struct lod_device *md, __u32 idx) +int validate_lod_and_idx(struct lod_device *md, __u32 idx) { if (unlikely(idx >= md->lod_ost_descs.ltd_tgts_size || !test_bit(idx, md->lod_ost_bitmap))) { @@ -1186,7 +1186,26 @@ int lod_parse_striping(const struct lu_env *env, struct lod_object *lo, ext = &comp_v1->lcm_entries[i].lcme_extent; lod_comp->llc_extent.e_start = le64_to_cpu(ext->e_start); + if (lod_comp->llc_extent.e_start & + (LOV_MIN_STRIPE_SIZE - 1)) { + CDEBUG(D_LAYOUT, + "extent start %llu is not a multiple of min size %u\n", + lod_comp->llc_extent.e_start, + LOV_MIN_STRIPE_SIZE); + GOTO(out, rc = -EINVAL); + } + lod_comp->llc_extent.e_end = le64_to_cpu(ext->e_end); + if (lod_comp->llc_extent.e_end != LUSTRE_EOF && + lod_comp->llc_extent.e_end & + (LOV_MIN_STRIPE_SIZE - 1)) { + CDEBUG(D_LAYOUT, + "extent end %llu is not a multiple of min size %u\n", + lod_comp->llc_extent.e_end, + LOV_MIN_STRIPE_SIZE); + GOTO(out, rc = -EINVAL); + } + lod_comp->llc_flags = le32_to_cpu(comp_v1->lcm_entries[i].lcme_flags); if (lod_comp->llc_flags & LCME_FL_NOSYNC) @@ -1914,7 +1933,10 @@ recheck: for_each_comp_entry_v1(comp_v1, ent) { ext = &ent->lcme_extent; - if (le64_to_cpu(ext->e_start) > le64_to_cpu(ext->e_end)) { + if (le64_to_cpu(ext->e_start) > le64_to_cpu(ext->e_end) || + le64_to_cpu(ext->e_start) & (LOV_MIN_STRIPE_SIZE - 1) || + (le64_to_cpu(ext->e_end) != LUSTRE_EOF && + le64_to_cpu(ext->e_end) & (LOV_MIN_STRIPE_SIZE - 1))) { CDEBUG(D_LAYOUT, "invalid extent "DEXT"\n", le64_to_cpu(ext->e_start), le64_to_cpu(ext->e_end));