@@ -810,7 +810,9 @@ int mdc_enqueue_base(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
generation = obddev->u.cli.cl_import->imp_generation;
if (!it || (it->it_op & (IT_OPEN | IT_CREAT)))
- acl_bufsize = imp->imp_connect_data.ocd_max_easize;
+ acl_bufsize = min_t(u32,
+ imp->imp_connect_data.ocd_max_easize,
+ XATTR_SIZE_MAX);
else
acl_bufsize = LUSTRE_POSIX_ACL_MAX_SIZE_OLD;
@@ -936,10 +938,11 @@ int mdc_enqueue_base(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
if ((int)lockrep->lock_policy_res2 == -ERANGE &&
it->it_op & (IT_OPEN | IT_GETATTR | IT_LOOKUP) &&
- acl_bufsize != imp->imp_connect_data.ocd_max_easize) {
+ acl_bufsize == LUSTRE_POSIX_ACL_MAX_SIZE_OLD) {
mdc_clear_replay_flag(req, -ERANGE);
ptlrpc_req_finished(req);
- acl_bufsize = imp->imp_connect_data.ocd_max_easize;
+ acl_bufsize = min_t(u32, imp->imp_connect_data.ocd_max_easize,
+ XATTR_SIZE_MAX);
goto resend;
}
@@ -135,7 +135,9 @@ int mdc_setattr(struct obd_export *exp, struct md_op_data *op_data,
mdc_setattr_pack(req, op_data, ea, ealen);
req_capsule_set_size(&req->rq_pill, &RMF_ACL, RCL_SERVER,
- req->rq_import->imp_connect_data.ocd_max_easize);
+ min_t(u32,
+ req->rq_import->imp_connect_data.ocd_max_easize,
+ XATTR_SIZE_MAX));
ptlrpc_request_set_replen(req);
rc = mdc_reint(req, LUSTRE_IMP_FULL);
@@ -234,9 +234,10 @@ static int mdc_getattr(struct obd_export *exp, struct md_op_data *op_data,
rc = mdc_getattr_common(exp, req);
if (rc) {
- if (rc == -ERANGE &&
- acl_bufsize != imp->imp_connect_data.ocd_max_easize) {
- acl_bufsize = imp->imp_connect_data.ocd_max_easize;
+ if (rc == -ERANGE) {
+ acl_bufsize = min_t(u32,
+ imp->imp_connect_data.ocd_max_easize,
+ XATTR_SIZE_MAX);
mdc_reset_acl_req(req);
goto again;
}
@@ -289,9 +290,10 @@ static int mdc_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
rc = mdc_getattr_common(exp, req);
if (rc) {
- if (rc == -ERANGE &&
- acl_bufsize != imp->imp_connect_data.ocd_max_easize) {
- acl_bufsize = imp->imp_connect_data.ocd_max_easize;
+ if (rc == -ERANGE) {
+ acl_bufsize = min_t(u32,
+ imp->imp_connect_data.ocd_max_easize,
+ XATTR_SIZE_MAX);
mdc_reset_acl_req(req);
goto again;
}