From d97a613cdadb8432b6df67515adfb5e01746e30f Mon Sep 17 00:00:00 2001 From: Li Wei Date: Fri, 30 Sep 2011 16:30:09 +0800 Subject: [PATCH] LU-759 mdc: Clear rq_replay on error in mdc_enqueue() When mdc_enter_request() fails (e.g., due to signals) in mdc_enqueue(), the request is freed without any care about its rq_replay field. For rq_replay requests, this results in assertion failures in __ptlrpc_free_req(). This patch adds a call to mdc_clear_replay_flag() to make sure __ptlrpc_free_req()'s assumption is respected. Change-Id: I2185066a9f47b3d9563d9e1a8989754ef2e2dcb4 Signed-off-by: Li Wei Reviewed-on: http://review.whamcloud.com/1518 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Mikhail Pershin Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- lustre/mdc/mdc_locks.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lustre/mdc/mdc_locks.c b/lustre/mdc/mdc_locks.c index d75508b..4fc9f6b 100644 --- a/lustre/mdc/mdc_locks.c +++ b/lustre/mdc/mdc_locks.c @@ -694,6 +694,7 @@ int mdc_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo, rc = mdc_enter_request(&obddev->u.cli); if (rc != 0) { mdc_put_rpc_lock(obddev->u.cli.cl_rpc_lock, it); + mdc_clear_replay_flag(req, 0); ptlrpc_req_finished(req); RETURN(rc); } -- 1.8.3.1