diff --git a/lustre/osd/osd_handler.c b/lustre/osd/osd_handler.c index 2652d7ea913289fef5ace38beafedfa13062de62..bd5bb5b8a7bc191229bacd2af7872a93dbffc364 100644 --- a/lustre/osd/osd_handler.c +++ b/lustre/osd/osd_handler.c @@ -2757,7 +2757,9 @@ static int osd_index_ea_insert(const struct lu_env *env, struct dt_object *dt, const struct lu_fid_pack *pack = (const struct lu_fid_pack *)rec; const char *name = (const char *)key; struct osd_object *child; - +#ifdef HAVE_QUOTA_SUPPORT + cfs_cap_t save = current->cap_effective; +#endif int rc; ENTRY; @@ -2774,7 +2776,17 @@ static int osd_index_ea_insert(const struct lu_env *env, struct dt_object *dt, RETURN(rc); child = osd_object_find(env, dt, fid); if (!IS_ERR(child)) { +#ifdef HAVE_QUOTA_SUPPORT + if (ignore_quota) + current->cap_effective |= CFS_CAP_SYS_RESOURCE_MASK; + else + current->cap_effective &= ~CFS_CAP_SYS_RESOURCE_MASK; +#endif rc = osd_ea_add_rec(env, obj, child, name, th); + +#ifdef HAVE_QUOTA_SUPPORT + current->cap_effective = save; +#endif osd_object_put(env, child); } else { rc = PTR_ERR(child);