*/
int (*quota_adjust_qunit) (struct obd_export *exp,
struct quota_adjust_qunit *oqaq,
- struct lustre_quota_ctxt *qctxt);
+ struct lustre_quota_ctxt *qctxt,
+ struct ptlrpc_request_set *rqset);
} quota_interface_t;
struct obd_quotactl *);
int (*o_quota_adjust_qunit)(struct obd_export *exp,
struct quota_adjust_qunit *oqaq,
- struct lustre_quota_ctxt *qctxt);
+ struct lustre_quota_ctxt *qctxt,
+ struct ptlrpc_request_set *rqset);
int (*o_ping)(struct obd_export *exp);
static inline int obd_quota_adjust_qunit(struct obd_export *exp,
struct quota_adjust_qunit *oqaq,
- struct lustre_quota_ctxt *qctxt)
+ struct lustre_quota_ctxt *qctxt,
+ struct ptlrpc_request_set *set)
{
#if defined(LPROCFS) && defined(HAVE_QUOTA_SUPPORT)
struct timeval work_start;
EXP_CHECK_DT_OP(exp, quota_adjust_qunit);
EXP_COUNTER_INCREMENT(exp, quota_adjust_qunit);
- rc = OBP(exp->exp_obd, quota_adjust_qunit)(exp, oqaq, qctxt);
+ rc = OBP(exp->exp_obd, quota_adjust_qunit)(exp, oqaq, qctxt, set);
#if defined(LPROCFS) && defined(HAVE_QUOTA_SUPPORT)
if (qctxt) {
GOTO(out, rc);
repoqa = req_capsule_server_get(&req->rq_pill, &RMF_QUOTA_ADJUST_QUNIT);
- req->rq_status = obd_quota_adjust_qunit(req->rq_export, oqaq, qctxt);
+ req->rq_status = obd_quota_adjust_qunit(req->rq_export, oqaq, qctxt, NULL);
*repoqa = *oqaq;
out:
int filter_quota_adjust_qunit(struct obd_export *exp,
struct quota_adjust_qunit *oqaq,
- struct lustre_quota_ctxt *qctxt)
+ struct lustre_quota_ctxt *qctxt,
+ struct ptlrpc_request_set *rqset)
{
struct obd_device *obd = exp->exp_obd;
unsigned int id[MAXQUOTAS] = { 0, 0 };
int client_quota_adjust_qunit(struct obd_export *exp,
struct quota_adjust_qunit *oqaq,
- struct lustre_quota_ctxt *qctxt)
+ struct lustre_quota_ctxt *qctxt,
+ struct ptlrpc_request_set *rqset)
{
struct ptlrpc_request *req;
struct quota_adjust_qunit *oqa;
if (strcmp(exp->exp_obd->obd_type->typ_name, LUSTRE_OSC_NAME))
RETURN(-EINVAL);
+ LASSERT(rqset);
+
req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp),
&RQF_OST_QUOTA_ADJUST_QUNIT,
LUSTRE_OST_VERSION,
ptlrpc_request_set_replen(req);
- rc = ptlrpc_queue_wait(req);
- if (rc)
- CERROR("%s: %s failed: rc = %d\n", exp->exp_obd->obd_name,
- __FUNCTION__, rc);
- ptlrpc_req_finished(req);
+ ptlrpc_set_add_req(rqset, req);
RETURN (rc);
}
int lov_quota_adjust_qunit(struct obd_export *exp,
struct quota_adjust_qunit *oqaq,
- struct lustre_quota_ctxt *qctxt)
+ struct lustre_quota_ctxt *qctxt,
+ struct ptlrpc_request_set *rqset)
{
struct obd_device *obd = class_exp2obd(exp);
struct lov_obd *lov = &obd->u.lov;
- int i, rc = 0;
+ int i, err, rc = 0;
+ unsigned no_set = 0;
ENTRY;
if (!QAQ_IS_ADJBLK(oqaq)) {
RETURN(-EFAULT);
}
+
+ if (rqset == NULL) {
+ rqset = ptlrpc_prep_set();
+ if (!rqset)
+ RETURN(-ENOMEM);
+ no_set = 1;
+ }
+
obd_getref(obd);
for (i = 0; i < lov->desc.ld_tgt_count; i++) {
- int err;
if (!lov->lov_tgts[i] || !lov->lov_tgts[i]->ltd_active) {
CDEBUG(D_HA, "ost %d is inactive\n", i);
}
err = obd_quota_adjust_qunit(lov->lov_tgts[i]->ltd_exp, oqaq,
- NULL);
+ NULL, rqset);
if (err) {
if (lov->lov_tgts[i]->ltd_active && !rc)
rc = err;
continue;
}
}
+
+ err = ptlrpc_set_wait(rqset);
+ if (!rc)
+ rc = err;
+
+ /* Destroy the set if none was provided by the caller */
+ if (no_set)
+ ptlrpc_set_destroy(rqset);
+
obd_putref(obd);
RETURN(rc);
}
int is_req, int is_exp);
int filter_quota_adjust_qunit(struct obd_export *exp,
struct quota_adjust_qunit *oqaq,
- struct lustre_quota_ctxt *qctxt);
+ struct lustre_quota_ctxt *qctxt,
+ struct ptlrpc_request_set *rqset);
int lquota_proc_setup(struct obd_device *obd, int is_master);
int lquota_proc_cleanup(struct lustre_quota_ctxt *qctxt);
void build_lqs(struct obd_device *obd);
#endif
int client_quota_adjust_qunit(struct obd_export *exp,
struct quota_adjust_qunit *oqaq,
- struct lustre_quota_ctxt *qctxt);
+ struct lustre_quota_ctxt *qctxt,
+ struct ptlrpc_request_set *set);
+
int lov_quota_adjust_qunit(struct obd_export *exp,
struct quota_adjust_qunit *oqaq,
- struct lustre_quota_ctxt *qctxt);
+ struct lustre_quota_ctxt *qctxt,
+ struct ptlrpc_request_set *rqset);
int client_quota_ctl(struct obd_device *unused, struct obd_export *exp,
struct obd_quotactl *oqctl);
int lmv_quota_ctl(struct obd_device *unused, struct obd_export *exp,
/* only when block qunit is reduced, boardcast to osts */
if ((adjust_res & LQS_BLK_DECREASE) && QAQ_IS_ADJBLK(oqaq))
- rc = obd_quota_adjust_qunit(mds->mds_lov_exp, oqaq, qctxt);
+ rc = obd_quota_adjust_qunit(mds->mds_lov_exp, oqaq, qctxt, NULL);
out:
lustre_dqput(dquot);
/* adjust remote lqs */
if (QAQ_IS_ADJBLK(qaq)) {
- rc = obd_quota_adjust_qunit(obd->u.mds.mds_lov_exp, qaq, qctxt);
+ rc = obd_quota_adjust_qunit(obd->u.mds.mds_lov_exp, qaq, qctxt, NULL);
if (rc < 0)
CERROR("adjust slaves' qunit size failed!(rc=%d)\n", rc);