use QUOTA_REQ_RETURNED to replace -EAGAIN when a quota req is finished.
b=18307
i=johann
i=panda
buflen = m->lm_buflens[n];
if (unlikely(buflen < min_size)) {
- CERROR("msg %p buffer[%d] size %d too small (required %d)\n",
- m, n, buflen, min_size);
+ CERROR("msg %p buffer[%d] size %d too small "
+ "(required %d, opc=%d)\n",
+ m, n, buflen, min_size, lustre_msg_get_opc(m));
return NULL;
}
if (rc > 0) {
rc = qctxt_adjust_qunit(obd, qctxt, uid, gid, 1, 0, NULL);
- if (rc == -EDQUOT || rc == -EBUSY || rc == -EAGAIN) {
+ if (rc == -EDQUOT || rc == -EBUSY ||
+ rc == QUOTA_REQ_RETURNED || rc == -EAGAIN) {
CDEBUG(D_QUOTA, "rc: %d.\n", rc);
rc = 0;
}
compute_lqs_after_removing_qunit(qunit);
- /* wake up all waiters */
+ if (rc == 0)
+ rc = QUOTA_REQ_RETURNED;
QUNIT_SET_STATE_AND_RC(qunit, QUNIT_FINISHED, rc);
+ /* wake up all waiters */
wake_up_all(&qunit->lq_waitq);
/* this is for dqacq_in_flight() */
CERROR("adjust slave's qunit size failed!(rc:%d)\n", rc1);
RETURN(rc1);
}
- if (err || (rc && rc != -EBUSY && rc1 == 0) || is_master(qctxt))
+ if (err || (rc < 0 && rc != -EBUSY && rc1 == 0) || is_master(qctxt))
RETURN(err);
/* reschedule another dqacq/dqrel if needed */
QDATA_DEBUG(p, "qunit(%p) is waiting for dqacq.\n", qunit);
l_wait_event(qunit->lq_waitq, got_qunit(qunit), &lwi);
- /* rc = -EAGAIN, it means a quota req is finished;
+ /* rc = -EAGAIN, it means the quota master isn't ready yet
+ * rc = QUOTA_REQ_RETURNED, it means a quota req is finished;
* rc = -EDQUOT, it means out of quota
* rc = -EBUSY, it means recovery is happening
* other rc < 0, it means real errors, functions who call
* schedule_dqacq should take care of this */
spin_lock(&qunit->lq_lock);
- if (qunit->lq_rc == 0)
- rc = -EAGAIN;
- else
- rc = qunit->lq_rc;
+ rc = qunit->lq_rc;
spin_unlock(&qunit->lq_lock);
CDEBUG(D_QUOTA, "qunit(%p) finishes waiting. (rc:%d)\n",
qunit, rc);
qunit, qunit->lq_rc);
/* keep same as schedule_dqacq() b=17030 */
spin_lock(&qunit->lq_lock);
- if (qunit->lq_rc == 0)
- rc = -EAGAIN;
- else
- rc = qunit->lq_rc;
+ rc = qunit->lq_rc;
spin_unlock(&qunit->lq_lock);
/* this is for dqacq_in_flight() */
qunit_put(qunit);
/* please reference to dqacq_completion for the below */
/* a new request is finished, try again */
- if (rc == -EAGAIN) {
+ if (rc == QUOTA_REQ_RETURNED) {
CDEBUG(D_QUOTA, "finish a quota req, try again\n");
continue;
}
#define LQS_INO_DECREASE 4
#define LQS_INO_INCREASE 8
+/* the return status of quota operation */
+#define QUOTA_REQ_RETURNED 1
#endif
int client_quota_adjust_qunit(struct obd_export *exp,
}
if (rc2)
- CDEBUG(rc2 == -EAGAIN ? D_QUOTA: D_ERROR,
- "mds adjust qunit failed! (opc:%d rc:%d)\n", opc, rc2);
+ CDEBUG(rc2 == QUOTA_REQ_RETURNED ? D_QUOTA: D_ERROR,
+ "mds adjust qunit %ssuccessfully! (opc:%d rc:%d)\n",
+ rc2 == QUOTA_REQ_RETURNED ? "" : "un", opc, rc2);
RETURN(0);
}
if (rc || rc2) {
if (!rc)
rc = rc2;
- CDEBUG(rc == -EAGAIN ? D_QUOTA: D_ERROR,
- "filter adjust qunit failed! (opc:%d rc%d)\n",
- opc, rc);
+ CDEBUG(rc == QUOTA_REQ_RETURNED ? D_QUOTA: D_ERROR,
+ "filter adjust qunit %ssuccessfully! (opc:%d rc%d)\n",
+ QUOTA_REQ_RETURNED ? "" : "un", opc, rc);
}
RETURN(0);