From ca6e63d45e4f3d25d4edb870c1d2c65b697fe4e6 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 4 Jul 2005 05:59:51 +0000 Subject: [PATCH] - make mdc_close() to use regular recovery mechanism --- lustre/mdc/mdc_request.c | 58 +++--------------------------------------------- 1 file changed, 3 insertions(+), 55 deletions(-) diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index 4144ef7..bda8476 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -531,44 +531,6 @@ static void mdc_commit_close(struct ptlrpc_request *req) spin_unlock(&open_req->rq_lock); } -static int mdc_close_interpret(struct ptlrpc_request *req, - void *data, int rc) -{ - union ptlrpc_async_args *aa = data; - struct mdc_rpc_lock *close_lock; - struct obd_device *obd = aa->pointer_arg[1]; - unsigned long flags; - - spin_lock_irqsave(&req->rq_lock, flags); - close_lock = aa->pointer_arg[0]; - aa->pointer_arg[0] = NULL; - spin_unlock_irqrestore (&req->rq_lock, flags); - - if (close_lock == NULL) { - CERROR("called with NULL close_lock\n"); - } else { - mdc_put_rpc_lock(close_lock, NULL); - LASSERTF(close_lock == obd->u.cli.cl_close_lock, "%p != %p\n", - close_lock, obd->u.cli.cl_close_lock); - } - wake_up(&req->rq_reply_waitq); - RETURN(rc); -} - -/* We can't use ptlrpc_check_reply, because we don't want to wake up for - * anything but a reply or an error. */ -static int mdc_close_check_reply(struct ptlrpc_request *req) -{ - int rc = 0; - unsigned long flags; - - spin_lock_irqsave(&req->rq_lock, flags); - if (req->rq_async_args.pointer_arg[0] == NULL) - rc = 1; - spin_unlock_irqrestore (&req->rq_lock, flags); - return rc; -} - int mdc_close(struct obd_export *exp, struct obdo *oa, struct obd_client_handle *och, struct ptlrpc_request **request) @@ -582,7 +544,6 @@ int mdc_close(struct obd_export *exp, struct obdo *oa, obd->u.cli.cl_max_mds_cookiesize}; struct ptlrpc_request *req; struct mdc_open_data *mod; - struct l_wait_info lwi; ENTRY; if (imp->imp_connection == NULL) { @@ -618,18 +579,10 @@ int mdc_close(struct obd_export *exp, struct obdo *oa, LASSERT(req->rq_cb_data == NULL); req->rq_cb_data = mod; - /* We hand a ref to the rpcd here, so we need another one of our own. */ - ptlrpc_request_addref(req); - mdc_get_rpc_lock(obd->u.cli.cl_close_lock, NULL); - req->rq_interpret_reply = mdc_close_interpret; - req->rq_async_args.pointer_arg[0] = obd->u.cli.cl_close_lock; - req->rq_async_args.pointer_arg[1] = obd; - ptlrpcd_add_req(req); - - lwi = LWI_TIMEOUT_INTR(MAX(req->rq_timeout * HZ, 1), NULL, NULL, NULL); - rc = l_wait_event(req->rq_reply_waitq, mdc_close_check_reply(req), - &lwi); + rc = ptlrpc_queue_wait(req); + mdc_put_rpc_lock(obd->u.cli.cl_close_lock, NULL); + if (req->rq_repmsg == NULL) { CDEBUG(D_HA, "request failed to send: %p, %d\n", req, req->rq_status); @@ -654,11 +607,6 @@ int mdc_close(struct obd_export *exp, struct obdo *oa, } } } - if (req->rq_async_args.pointer_arg[0] != NULL) { - CERROR("returned without dropping close lock: rc %d, " - "dropping it now\n", rc); - mdc_close_interpret(req, &req->rq_async_args, rc); - } EXIT; out: -- 1.8.3.1