Whamcloud - gitweb
LU-2515 quota: handle OBD_QC_CALLBACK for interoperability
authorNiu Yawei <niu@whamcloud.com>
Fri, 21 Dec 2012 04:07:18 +0000 (23:07 -0500)
committerOleg Drokin <green@whamcloud.com>
Tue, 8 Jan 2013 04:54:36 +0000 (23:54 -0500)
Add back the OBD_QC_CALLBACK handler, to make 2.4 client interop
with old servers.

Signed-off-by: Niu Yawei <niu@whamcloud.com>
Change-Id: Idf5614d1755c87146e2f99cc07dd70f1395733e6
Reviewed-on: http://review.whamcloud.com/4878
Tested-by: Hudson
Reviewed-by: Johann Lombardi <johann.lombardi@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Fan Yong <fan.yong@intel.com>
lustre/ldlm/ldlm_lockd.c

index e3d78e2..46949f4 100644 (file)
@@ -2062,6 +2062,21 @@ static inline void ldlm_callback_errmsg(struct ptlrpc_request *req,
                 CWARN("Send reply failed, maybe cause bug 21636.\n");
 }
 
                 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)
 {
 /* 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);
                 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));
         default:
                 CERROR("unknown opcode %u\n",
                        lustre_msg_get_opc(req->rq_reqmsg));