Whamcloud - gitweb
LU-286 racer: general protection fault.
authoryangsheng <ys@whamcloud.com>
Fri, 6 May 2011 15:03:56 +0000 (23:03 +0800)
committerJohann Lombardi <johann@whamcloud.com>
Fri, 13 May 2011 17:09:54 +0000 (10:09 -0700)
Fixed previous patch hasn't cleanup appropriate may cause
invalid reference.

Change-Id: Ib9b6375c9a7bc57ee5ad17da514848ce8ca87acd
Signed-off-by: Yang Sheng <ys@whamcloud.com>
Reviewed-on: http://review.whamcloud.com/506
Tested-by: Hudson
Reviewed-by: Johann Lombardi <johann@whamcloud.com>
lustre/mdc/mdc_lib.c
lustre/mdc/mdc_locks.c

index ea93da1..798df45 100644 (file)
@@ -964,6 +964,13 @@ int mdc_enter_request(struct client_obd *cli)
                 spin_unlock(&cli->cl_loi_list_lock);
                 rc = l_wait_event(mcw.mcw_waitq, mdc_req_avail(cli, &mcw),
                                   &lwi);
+                if (rc) {
+                        spin_lock(&cli->cl_loi_list_lock);
+                        if (list_empty(&mcw.mcw_entry))
+                                cli->cl_r_in_flight--;
+                        list_del_init(&mcw.mcw_entry);
+                        spin_unlock(&cli->cl_loi_list_lock);
+                }
         } else {
                 cli->cl_r_in_flight++;
                 spin_unlock(&cli->cl_loi_list_lock);
index e29de48..cdc7fe9 100644 (file)
@@ -642,10 +642,11 @@ int mdc_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
                 rc = ldlm_cli_enqueue(exp, &req, einfo, res_id, &policy, &flags,
                                       NULL, 0, NULL, lockh, 0);
                 mdc_exit_request(&obddev->u.cli);
+                if (rc < 0)
+                        CERROR("ldlm_cli_enqueue error: %d\n", rc);
         }
         mdc_put_rpc_lock(obddev->u.cli.cl_rpc_lock, it);
         if (rc < 0) {
-                CERROR("ldlm_cli_enqueue: %d\n", rc);
                 mdc_clear_replay_flag(req, rc);
                 ptlrpc_req_finished(req);
                 RETURN(rc);