Merge remote-tracking branch 'staging/staging-next'
[deliverable/linux.git] / drivers / staging / lustre / lustre / fld / fld_request.c
index e59d626a15481c14a4304badf0bf86830c2538c7..ed7962e4f0794100063a9026f02b8c33cca69f2b 100644 (file)
 #include "../include/lustre_mdc.h"
 #include "fld_internal.h"
 
-/* TODO: these 3 functions are copies of flow-control code from mdc_lib.c
- * It should be common thing. The same about mdc RPC lock
- */
-static int fld_req_avail(struct client_obd *cli, struct mdc_cache_waiter *mcw)
-{
-       int rc;
-
-       spin_lock(&cli->cl_loi_list_lock);
-       rc = list_empty(&mcw->mcw_entry);
-       spin_unlock(&cli->cl_loi_list_lock);
-       return rc;
-};
-
-static void fld_enter_request(struct client_obd *cli)
-{
-       struct mdc_cache_waiter mcw;
-       struct l_wait_info lwi = { 0 };
-
-       spin_lock(&cli->cl_loi_list_lock);
-       if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
-               list_add_tail(&mcw.mcw_entry, &cli->cl_cache_waiters);
-               init_waitqueue_head(&mcw.mcw_waitq);
-               spin_unlock(&cli->cl_loi_list_lock);
-               l_wait_event(mcw.mcw_waitq, fld_req_avail(cli, &mcw), &lwi);
-       } else {
-               cli->cl_r_in_flight++;
-               spin_unlock(&cli->cl_loi_list_lock);
-       }
-}
-
-static void fld_exit_request(struct client_obd *cli)
-{
-       struct list_head *l, *tmp;
-       struct mdc_cache_waiter *mcw;
-
-       spin_lock(&cli->cl_loi_list_lock);
-       cli->cl_r_in_flight--;
-       list_for_each_safe(l, tmp, &cli->cl_cache_waiters) {
-               if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
-                       /* No free request slots anymore */
-                       break;
-               }
-
-               mcw = list_entry(l, struct mdc_cache_waiter, mcw_entry);
-               list_del_init(&mcw->mcw_entry);
-               cli->cl_r_in_flight++;
-               wake_up(&mcw->mcw_waitq);
-       }
-       spin_unlock(&cli->cl_loi_list_lock);
-}
-
 static int fld_rrb_hash(struct lu_client_fld *fld, u64 seq)
 {
        LASSERT(fld->lcf_count > 0);
@@ -439,9 +388,9 @@ int fld_client_rpc(struct obd_export *exp,
        req->rq_reply_portal = MDC_REPLY_PORTAL;
        ptlrpc_at_set_req_timeout(req);
 
-       fld_enter_request(&exp->exp_obd->u.cli);
+       obd_get_request_slot(&exp->exp_obd->u.cli);
        rc = ptlrpc_queue_wait(req);
-       fld_exit_request(&exp->exp_obd->u.cli);
+       obd_put_request_slot(&exp->exp_obd->u.cli);
        if (rc)
                goto out_req;
 
This page took 0.033285 seconds and 5 git commands to generate.