X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fquota%2Fquota_ctl.c;h=7c9a66a50e767932e311608ec5228aebe2efcd1d;hp=8891c9d2d30b05fdde71ed4a0e0b6251542183fe;hb=2f347eb0da65973bfc4acbd49ad48698bf71441f;hpb=e7f3c2955a426bbe3e39b32208056b9ab8667190 diff --git a/lustre/quota/quota_ctl.c b/lustre/quota/quota_ctl.c index 8891c9d..7c9a66a 100644 --- a/lustre/quota/quota_ctl.c +++ b/lustre/quota/quota_ctl.c @@ -76,7 +76,7 @@ int mds_quota_ctl(struct obd_device *obd, struct obd_export *unused, int rc = 0; ENTRY; - do_gettimeofday(&work_start); + cfs_gettimeofday(&work_start); switch (oqctl->qc_cmd) { case Q_QUOTAON: oqctl->qc_id = obt->obt_qfmt; /* override qfmt version */ @@ -119,7 +119,7 @@ int mds_quota_ctl(struct obd_device *obd, struct obd_export *unused, CDEBUG(D_INFO, "mds_quotactl admin quota command %d, id %u, " "type %d, failed: rc = %d\n", oqctl->qc_cmd, oqctl->qc_id, oqctl->qc_type, rc); - do_gettimeofday(&work_end); + cfs_gettimeofday(&work_end); timediff = cfs_timeval_sub(&work_end, &work_start, NULL); lprocfs_counter_add(qctxt->lqc_stats, LQUOTA_QUOTA_CTL, timediff); @@ -141,16 +141,19 @@ int filter_quota_ctl(struct obd_device *unused, struct obd_export *exp, int rc = 0; ENTRY; - do_gettimeofday(&work_start); + cfs_gettimeofday(&work_start); switch (oqctl->qc_cmd) { - case Q_FINVALIDATE: case Q_QUOTAON: + oqctl->qc_id = obt->obt_qfmt; + rc = generic_quota_on(obd, oqctl, 0); + break; + case Q_FINVALIDATE: case Q_QUOTAOFF: - down(&obt->obt_quotachecking); + cfs_down(&obt->obt_quotachecking); if (oqctl->qc_cmd == Q_FINVALIDATE && (obt->obt_qctxt.lqc_flags & UGQUOTA2LQC(oqctl->qc_type))) { CWARN("quota[%u] is on yet\n", oqctl->qc_type); - up(&obt->obt_quotachecking); + cfs_up(&obt->obt_quotachecking); rc = -EBUSY; break; } @@ -172,27 +175,16 @@ int filter_quota_ctl(struct obd_device *unused, struct obd_export *exp, if (oqctl->qc_stat == QUOTA_RECOVERING) quota_unbarrier(handle); - if (oqctl->qc_cmd == Q_QUOTAON || oqctl->qc_cmd == Q_QUOTAOFF || + if (oqctl->qc_cmd == Q_QUOTAOFF || oqctl->qc_cmd == Q_FINVALIDATE) { - if (oqctl->qc_cmd == Q_QUOTAON) { - if (!rc) { - obt->obt_qctxt.lqc_flags |= - UGQUOTA2LQC(oqctl->qc_type); - /* when quotaon, create lqs for every - * quota uid/gid b=18574 */ - build_lqs(obd); - } else if (rc == -EBUSY && - quota_is_on(qctxt, oqctl)) { - rc = -EALREADY; - } - } else if (oqctl->qc_cmd == Q_QUOTAOFF) { + if (oqctl->qc_cmd == Q_QUOTAOFF) { if (!rc) obt->obt_qctxt.lqc_flags &= ~UGQUOTA2LQC(oqctl->qc_type); else if (quota_is_off(qctxt, oqctl)) rc = -EALREADY; } - up(&obt->obt_quotachecking); + cfs_up(&obt->obt_quotachecking); } break; @@ -214,7 +206,9 @@ int filter_quota_ctl(struct obd_device *unused, struct obd_export *exp, lqs = quota_search_lqs(LQS_KEY(oqctl->qc_type, oqctl->qc_id), qctxt, 0); if (lqs == NULL || IS_ERR(lqs)){ - CDEBUG(D_ERROR, "fail to create lqs when setquota\n"); + CERROR("fail to create lqs during setquota operation " + "for %sid %u\n", oqctl->qc_type ? "g" : "u", + oqctl->qc_id); } else { lqs->lqs_flags &= ~QB_SET; lqs_putref(lqs); @@ -256,7 +250,9 @@ adjust: lqs = quota_search_lqs(LQS_KEY(oqctl->qc_type, oqctl->qc_id), qctxt, 1); if (lqs == NULL || IS_ERR(lqs)){ - CDEBUG(D_ERROR, "fail to create lqs when setquota\n"); + CERROR("fail to create lqs during setquota operation " + "for %sid %u\n", oqctl->qc_type ? "g" : "u", + oqctl->qc_id); break; } else { lqs->lqs_flags |= QB_SET; @@ -283,7 +279,7 @@ adjust: obd->obd_name, oqctl->qc_cmd); RETURN(-EFAULT); } - do_gettimeofday(&work_end); + cfs_gettimeofday(&work_end); timediff = cfs_timeval_sub(&work_end, &work_start, NULL); lprocfs_counter_add(qctxt->lqc_stats, LQUOTA_QUOTA_CTL, timediff); @@ -298,7 +294,7 @@ int client_quota_ctl(struct obd_device *unused, struct obd_export *exp, struct ptlrpc_request *req; struct obd_quotactl *oqc; const struct req_format *rf; - int ver, opc, rc, resends = 0; + int ver, opc, rc; ENTRY; if (!strcmp(exp->exp_obd->obd_type->typ_name, LUSTRE_MDC_NAME)) { @@ -313,8 +309,6 @@ int client_quota_ctl(struct obd_device *unused, struct obd_export *exp, RETURN(-EINVAL); } -restart_request: - req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp), rf, ver, opc); if (req == NULL) RETURN(-ENOMEM); @@ -346,16 +340,6 @@ restart_request: out: ptlrpc_req_finished(req); - if (client_quota_recoverable_error(rc)) { - resends++; - if (!client_quota_should_resend(resends, &exp->exp_obd->u.cli)) { - CERROR("too many resend retries, returning error\n"); - RETURN(-EIO); - } - - goto restart_request; - } - return rc; }