@@ -406,7 +406,8 @@ void mdc_setattr_pack(struct ptlrpc_request *req, struct md_op_data *op_data,
lum->lmm_magic = cpu_to_le32(LOV_USER_MAGIC_V1);
lum->lmm_stripe_size = 0;
lum->lmm_stripe_count = 0;
- lum->lmm_stripe_offset = (typeof(lum->lmm_stripe_offset))(-1);
+ lum->lmm_stripe_offset =
+ (typeof(lum->lmm_stripe_offset))LOV_OFFSET_DEFAULT;
} else {
memcpy(lum, ea, ealen);
}
@@ -220,8 +220,8 @@ static int mdc_save_lovea(struct ptlrpc_request *req,
void *data, u32 size)
{
struct req_capsule *pill = &req->rq_pill;
+ struct lov_user_md *lmm;
int rc = 0;
- void *lmm;
if (req_capsule_get_size(pill, field, RCL_CLIENT) < size) {
rc = sptlrpc_cli_enlarge_reqbuf(req, field, size);
@@ -237,8 +237,12 @@ static int mdc_save_lovea(struct ptlrpc_request *req,
req_capsule_set_size(pill, field, RCL_CLIENT, size);
lmm = req_capsule_client_get(pill, field);
- if (lmm)
+ if (lmm) {
memcpy(lmm, data, size);
+ /* overwrite layout generation returned from the MDS */
+ lmm->lmm_stripe_offset =
+ (typeof(lmm->lmm_stripe_offset))LOV_OFFSET_DEFAULT;
+ }
return rc;
}
@@ -404,6 +404,7 @@ struct ll_ioc_lease_id {
#define LOV_MAXPOOLNAME 15
#define LOV_POOLNAMEF "%.15s"
+#define LOV_OFFSET_DEFAULT ((__u16)-1)
#define LOV_MIN_STRIPE_BITS 16 /* maximum PAGE_SIZE (ia64), power of 2 */
#define LOV_MIN_STRIPE_SIZE (1 << LOV_MIN_STRIPE_BITS)