Whamcloud - gitweb
LU-1346 libcfs: cleanup waitq related primitives
[fs/lustre-release.git] / lustre / mdc / mdc_lib.c
index ca85704..e195e1d 100644 (file)
@@ -555,49 +555,49 @@ static int mdc_req_avail(struct client_obd *cli, struct mdc_cache_waiter *mcw)
  * in the future - the code may need to be revisited. */
 int mdc_enter_request(struct client_obd *cli)
 {
-        int rc = 0;
-        struct mdc_cache_waiter mcw;
-        struct l_wait_info lwi = LWI_INTR(LWI_ON_SIGNAL_NOOP, NULL);
-
-        client_obd_list_lock(&cli->cl_loi_list_lock);
-        if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
-                cfs_list_add_tail(&mcw.mcw_entry, &cli->cl_cache_waiters);
-                cfs_waitq_init(&mcw.mcw_waitq);
-                client_obd_list_unlock(&cli->cl_loi_list_lock);
-                rc = l_wait_event(mcw.mcw_waitq, mdc_req_avail(cli, &mcw), &lwi);
-                if (rc) {
-                        client_obd_list_lock(&cli->cl_loi_list_lock);
-                        if (cfs_list_empty(&mcw.mcw_entry))
-                                cli->cl_r_in_flight--;
-                        cfs_list_del_init(&mcw.mcw_entry);
-                        client_obd_list_unlock(&cli->cl_loi_list_lock);
-                }
-        } else {
-                cli->cl_r_in_flight++;
-                client_obd_list_unlock(&cli->cl_loi_list_lock);
-        }
-        return rc;
+       int rc = 0;
+       struct mdc_cache_waiter mcw;
+       struct l_wait_info lwi = LWI_INTR(LWI_ON_SIGNAL_NOOP, NULL);
+
+       client_obd_list_lock(&cli->cl_loi_list_lock);
+       if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
+               cfs_list_add_tail(&mcw.mcw_entry, &cli->cl_cache_waiters);
+               init_waitqueue_head(&mcw.mcw_waitq);
+               client_obd_list_unlock(&cli->cl_loi_list_lock);
+               rc = l_wait_event(mcw.mcw_waitq, mdc_req_avail(cli, &mcw), &lwi);
+               if (rc) {
+                       client_obd_list_lock(&cli->cl_loi_list_lock);
+                       if (cfs_list_empty(&mcw.mcw_entry))
+                               cli->cl_r_in_flight--;
+                       cfs_list_del_init(&mcw.mcw_entry);
+                       client_obd_list_unlock(&cli->cl_loi_list_lock);
+               }
+       } else {
+               cli->cl_r_in_flight++;
+               client_obd_list_unlock(&cli->cl_loi_list_lock);
+       }
+       return rc;
 }
 
 void mdc_exit_request(struct client_obd *cli)
 {
-        cfs_list_t *l, *tmp;
-        struct mdc_cache_waiter *mcw;
+       cfs_list_t *l, *tmp;
+       struct mdc_cache_waiter *mcw;
+
+       client_obd_list_lock(&cli->cl_loi_list_lock);
+       cli->cl_r_in_flight--;
+       cfs_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;
+               }
 
-        client_obd_list_lock(&cli->cl_loi_list_lock);
-        cli->cl_r_in_flight--;
-        cfs_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 = cfs_list_entry(l, struct mdc_cache_waiter, mcw_entry);
-                cfs_list_del_init(&mcw->mcw_entry);
-                cli->cl_r_in_flight++;
-                cfs_waitq_signal(&mcw->mcw_waitq);
-        }
-        /* Empty waiting list? Decrease reqs in-flight number */
+               mcw = cfs_list_entry(l, struct mdc_cache_waiter, mcw_entry);
+               cfs_list_del_init(&mcw->mcw_entry);
+               cli->cl_r_in_flight++;
+               wake_up(&mcw->mcw_waitq);
+       }
+       /* Empty waiting list? Decrease reqs in-flight number */
 
-        client_obd_list_unlock(&cli->cl_loi_list_lock);
+       client_obd_list_unlock(&cli->cl_loi_list_lock);
 }