From 6067e249e2b661fff7151a3222fb2c8b90c5225c Mon Sep 17 00:00:00 2001 From: tianzy Date: Tue, 3 Feb 2009 06:44:35 +0000 Subject: [PATCH] Branch b_release_1_8_0 use QUOTA_REQ_RETURNED to replace -EAGAIN when a quota req is finished. b=18307 i=johann i=panda --- lustre/ptlrpc/pack_generic.c | 5 +++-- lustre/quota/quota_adjust_qunit.c | 3 ++- lustre/quota/quota_context.c | 20 +++++++++----------- lustre/quota/quota_interface.c | 2 +- lustre/quota/quota_internal.h | 2 ++ lustre/quota/quota_master.c | 11 ++++++----- 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/lustre/ptlrpc/pack_generic.c b/lustre/ptlrpc/pack_generic.c index cee8fd7..b6f4862 100644 --- a/lustre/ptlrpc/pack_generic.c +++ b/lustre/ptlrpc/pack_generic.c @@ -577,8 +577,9 @@ void *lustre_msg_buf_v2(struct lustre_msg_v2 *m, int n, int min_size) buflen = m->lm_buflens[n]; if (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; } diff --git a/lustre/quota/quota_adjust_qunit.c b/lustre/quota/quota_adjust_qunit.c index 952eee5..8f61bdf 100644 --- a/lustre/quota/quota_adjust_qunit.c +++ b/lustre/quota/quota_adjust_qunit.c @@ -334,7 +334,8 @@ int filter_quota_adjust_qunit(struct obd_export *exp, 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; } diff --git a/lustre/quota/quota_context.c b/lustre/quota/quota_context.c index 2091b87..433450d 100644 --- a/lustre/quota/quota_context.c +++ b/lustre/quota/quota_context.c @@ -627,8 +627,11 @@ out: 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(&qunit->lq_waitq); /* this is for dqacq_in_flight() */ @@ -655,7 +658,7 @@ out: CERROR("adjust slave's qunit size failed!(rc:%d)\n", rc1); RETURN(rc1); } - if (err || (rc && rc != -EBUSY && rc1 == 0) || + if (err || (rc < 0 && rc != -EBUSY && rc1 == 0) || is_master(obd, qctxt, qdata->qd_id, QDATA_IS_GRP(qdata))) RETURN(err); @@ -941,16 +944,14 @@ wait_completion: 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); @@ -1046,10 +1047,7 @@ qctxt_wait_pending_dqacq(struct lustre_quota_ctxt *qctxt, unsigned int id, 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); diff --git a/lustre/quota/quota_interface.c b/lustre/quota/quota_interface.c index 7aa638c..86ec09b 100644 --- a/lustre/quota/quota_interface.c +++ b/lustre/quota/quota_interface.c @@ -388,7 +388,7 @@ static int quota_chk_acq_common(struct obd_device *obd, unsigned int uid, /* 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; } diff --git a/lustre/quota/quota_internal.h b/lustre/quota/quota_internal.h index c1c4baa..19544aa 100644 --- a/lustre/quota/quota_internal.h +++ b/lustre/quota/quota_internal.h @@ -184,6 +184,8 @@ extern cfs_proc_dir_entry_t *lquota_type_proc_dir; #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, diff --git a/lustre/quota/quota_master.c b/lustre/quota/quota_master.c index 71f0144..08d0a58 100644 --- a/lustre/quota/quota_master.c +++ b/lustre/quota/quota_master.c @@ -510,8 +510,9 @@ int mds_quota_adjust(struct obd_device *obd, unsigned int qcids[], } 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); } @@ -548,9 +549,9 @@ int filter_quota_adjust(struct obd_device *obd, unsigned int qcids[], 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); -- 1.8.3.1