+ else if (lum.lmm_magic != LOV_USER_MAGIC)
+ rc = -EINVAL;
+ else {
+ rc = lov_packmd(exp, &lmmk, lsm);
+ if (rc < 0)
+ RETURN(rc);
+ lmm_size = rc;
+ rc = 0;
+
+ /* FIXME: Bug 1185 - copy fields properly when structs change */
+ CLASSERT(sizeof lum == sizeof *lmmk);
+ CLASSERT(sizeof lum.lmm_objects[0] ==
+ sizeof lmmk->lmm_objects[0]);
+
+ /* User wasn't expecting this many OST entries */
+ if (lum.lmm_stripe_count == 0) {
+ if (copy_to_user(lump, lmmk, sizeof lum))
+ rc = -EFAULT;
+ } else if (lum.lmm_stripe_count < lmmk->lmm_stripe_count) {
+ rc = -EOVERFLOW;
+ } else if (copy_to_user(lump, lmmk, sizeof lum))
+ rc = -EFAULT;