- if (!rc && oqctl->qc_cmd == Q_QUOTAON)
- obt->obt_qctxt.lqc_flags |= UGQUOTA2LQC(oqctl->qc_type);
- if (!rc && oqctl->qc_cmd == Q_QUOTAOFF)
- obt->obt_qctxt.lqc_flags &= ~UGQUOTA2LQC(oqctl->qc_type);
- atomic_inc(&obt->obt_quotachecking);
+ 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 (!rc)
+ obt->obt_qctxt.lqc_flags &=
+ ~UGQUOTA2LQC(oqctl->qc_type);
+ else if (quota_is_off(qctxt, oqctl))
+ rc = -EALREADY;
+ }
+ up(&obt->obt_quotachecking);