X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosc%2Fosc_cache.c;h=fe8a56e77c2474b2ade8924c00b0b5dc4d72969d;hp=b8fa6daead8f839d747e31da36d0e9cb53a6ec4e;hb=f5fd5a363cc48e38cfd906edab3dec78d88a79e5;hpb=49769c1eea52e067d6c2d35b2976f44aada1ccee diff --git a/lustre/osc/osc_cache.c b/lustre/osc/osc_cache.c index b8fa6da..fe8a56e 100644 --- a/lustre/osc/osc_cache.c +++ b/lustre/osc/osc_cache.c @@ -2315,7 +2315,12 @@ int osc_queue_async_io(const struct lu_env *env, struct cl_io *io, } /* check if the file's owner/group is over quota */ - if (!io->ci_noquota) { + /* do not check for root without root squash, because in this case + * we should bypass quota + */ + if ((!oio->oi_cap_sys_resource || + cli->cl_root_squash) && + !io->ci_noquota) { struct cl_object *obj; struct cl_attr *attr; unsigned int qid[LL_MAXQUOTAS]; @@ -2330,20 +2335,8 @@ int osc_queue_async_io(const struct lu_env *env, struct cl_io *io, qid[USRQUOTA] = attr->cat_uid; qid[GRPQUOTA] = attr->cat_gid; qid[PRJQUOTA] = attr->cat_projid; - /* - * if EDQUOT returned for root, we double check - * if root squash enabled or not updated from server side. - * without root squash, we should bypass quota for root. - */ - if (rc == 0 && osc_quota_chkdq(cli, qid) == -EDQUOT) { - if (oio->oi_cap_sys_resource && - !cli->cl_root_squash) { - io->ci_noquota = 1; - rc = 0; - } else { - rc = -EDQUOT; - } - } + if (rc == 0 && osc_quota_chkdq(cli, qid) == -EDQUOT) + rc = -EDQUOT; if (rc) RETURN(rc); }