Whamcloud - gitweb
LU-10467 ptlrpc: convert waiters on set->set_waitq
[fs/lustre-release.git] / lustre / ptlrpc / ptlrpcd.c
index 36744c9..914f326 100644 (file)
@@ -274,12 +274,13 @@ void ptlrpcd_add_req(struct ptlrpc_request *req)
 
        spin_lock(&req->rq_lock);
        if (req->rq_invalid_rqset) {
-               struct l_wait_info lwi = LWI_TIMEOUT(cfs_time_seconds(5),
-                                                    back_to_sleep, NULL);
-
                req->rq_invalid_rqset = 0;
                spin_unlock(&req->rq_lock);
-               l_wait_event(req->rq_set_waitq, (req->rq_set == NULL), &lwi);
+               if (wait_event_idle_timeout(req->rq_set_waitq,
+                                           req->rq_set == NULL,
+                                           cfs_time_seconds(5)) == 0)
+                       l_wait_event_abortable(req->rq_set_waitq,
+                                              req->rq_set == NULL);
        } else if (req->rq_set) {
                /*
                 * If we have a vaid "rq_set", just reuse it to avoid double
@@ -299,7 +300,7 @@ void ptlrpcd_add_req(struct ptlrpc_request *req)
 
        pc = ptlrpcd_select_pc(req);
 
-       DEBUG_REQ(D_INFO, req, "add req [%p] to pc [%s:%d]",
+       DEBUG_REQ(D_INFO, req, "add req [%p] to pc [%s+%d]",
                  req, pc->pc_name, pc->pc_index);
 
        ptlrpc_set_add_new_req(pc, req);
@@ -485,16 +486,20 @@ static int ptlrpcd(void *arg)
         * new_req_list and ptlrpcd_check() moves them into the set.
         */
        do {
-               struct l_wait_info lwi;
                time64_t timeout;
 
                timeout = ptlrpc_set_next_timeout(set);
-               lwi = LWI_TIMEOUT(cfs_time_seconds(timeout),
-                               ptlrpc_expired_set, set);
 
                lu_context_enter(&env.le_ctx);
                lu_context_enter(env.le_ses);
-               l_wait_event(set->set_waitq, ptlrpcd_check(&env, pc), &lwi);
+               if (timeout == 0)
+                       wait_event_idle(set->set_waitq,
+                                       ptlrpcd_check(&env, pc));
+               else if (wait_event_idle_timeout(set->set_waitq,
+                                                ptlrpcd_check(&env, pc),
+                                                cfs_time_seconds(timeout))
+                        == 0)
+                       ptlrpc_expired_set(set);
                lu_context_exit(&env.le_ctx);
                lu_context_exit(env.le_ses);