- dquot = lustre_dqget(obd, info, qdata->qd_id, QDATA_IS_GRP(qdata));
- if (IS_ERR(dquot))
- RETURN(PTR_ERR(dquot));
+ if (!ll_sb_has_quota_active(qctxt->lqc_sb,
+ QDATA_IS_GRP(qdata) ? GRPQUOTA : USRQUOTA))
+ RETURN(-EIO);
+
+ lqs = quota_search_lqs(LQS_KEY(QDATA_IS_GRP(qdata), qdata->qd_id),
+ qctxt, 0);
+ if (lqs == NULL)
+ rc = -ENOENT;
+ if (IS_ERR(lqs))
+ rc = PTR_ERR(lqs);
+ if (rc)
+ RETURN(rc);
+
+ cfs_spin_lock(&lqs->lqs_lock);
+ if (LQS_IS_RECOVERY(lqs)) {
+ cfs_spin_unlock(&lqs->lqs_lock);
+ LQS_DEBUG(lqs, "this lqs is under recovery\n");
+ GOTO(skip, rc = -EBUSY);
+ }
+ cfs_spin_unlock(&lqs->lqs_lock);
+
+ cfs_down_write(&mds->mds_qonoff_sem);
+ dquot = lustre_dqget(obd, info, qdata->qd_id, QDATA_IS_GRP(qdata), 0);
+ if (IS_ERR(dquot)) {
+ cfs_up_write(&mds->mds_qonoff_sem);
+ GOTO(skip, rc = PTR_ERR(dquot));
+ }