From 24e202a76d477c39b7e714f043f5c1f53457e400 Mon Sep 17 00:00:00 2001 From: Niu Yawei Date: Thu, 20 Dec 2012 23:07:18 -0500 Subject: [PATCH] LU-2515 quota: handle OBD_QC_CALLBACK for interoperability Add back the OBD_QC_CALLBACK handler, to make 2.4 client interop with old servers. Signed-off-by: Niu Yawei Change-Id: Idf5614d1755c87146e2f99cc07dd70f1395733e6 Reviewed-on: http://review.whamcloud.com/4878 Tested-by: Hudson Reviewed-by: Johann Lombardi Tested-by: Maloo Reviewed-by: Fan Yong --- lustre/ldlm/ldlm_lockd.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c index e3d78e2..46949f4 100644 --- a/lustre/ldlm/ldlm_lockd.c +++ b/lustre/ldlm/ldlm_lockd.c @@ -2062,6 +2062,21 @@ static inline void ldlm_callback_errmsg(struct ptlrpc_request *req, CWARN("Send reply failed, maybe cause bug 21636.\n"); } +static int ldlm_handle_qc_callback(struct ptlrpc_request *req) +{ + struct obd_quotactl *oqctl; + struct client_obd *cli = &req->rq_export->exp_obd->u.cli; + + oqctl = req_capsule_client_get(&req->rq_pill, &RMF_OBD_QUOTACTL); + if (oqctl == NULL) { + CERROR("Can't unpack obd_quotactl\n"); + RETURN(-EPROTO); + } + + cli->cl_qchk_stat = oqctl->qc_stat; + return 0; +} + /* TODO: handle requests in a similar way as MDT: see mdt_handle_common() */ static int ldlm_callback_handler(struct ptlrpc_request *req) { @@ -2148,6 +2163,13 @@ static int ldlm_callback_handler(struct ptlrpc_request *req) rc = llog_origin_handle_close(req); ldlm_callback_reply(req, rc); RETURN(0); + case OBD_QC_CALLBACK: + req_capsule_set(&req->rq_pill, &RQF_QC_CALLBACK); + if (OBD_FAIL_CHECK(OBD_FAIL_OBD_QC_CALLBACK_NET)) + RETURN(0); + rc = ldlm_handle_qc_callback(req); + ldlm_callback_reply(req, rc); + RETURN(0); default: CERROR("unknown opcode %u\n", lustre_msg_get_opc(req->rq_reqmsg)); -- 1.8.3.1