From 02c043bb0249188a0e6a93e0e4ddbcbfecd40cd7 Mon Sep 17 00:00:00 2001 From: tappro Date: Mon, 9 Oct 2006 20:39:23 +0000 Subject: [PATCH] - correct error handling --- lustre/lmv/lmv_intent.c | 8 ++++---- lustre/lmv/lmv_obd.c | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/lustre/lmv/lmv_intent.c b/lustre/lmv/lmv_intent.c index 408716d..c3b8f9c 100644 --- a/lustre/lmv/lmv_intent.c +++ b/lustre/lmv/lmv_intent.c @@ -77,10 +77,6 @@ int lmv_intent_remote(struct obd_export *exp, void *lmm, if (!(body->valid & OBD_MD_MDS)) RETURN(0); - tgt_exp = lmv_get_export(lmv, &body->fid1); - if (IS_ERR(tgt_exp)) - RETURN(PTR_ERR(tgt_exp)); - /* * oh, MDS reports that this is remote inode case i.e. we have to ask * for real attrs on another MDS. @@ -105,6 +101,10 @@ int lmv_intent_remote(struct obd_export *exp, void *lmm, it->d.lustre.it_disposition &= ~DISP_ENQ_COMPLETE; + tgt_exp = lmv_get_export(lmv, &body->fid1); + if (IS_ERR(tgt_exp)) + GOTO(out, PTR_ERR(tgt_exp)); + OBD_ALLOC_PTR(op_data); if (op_data == NULL) GOTO(out, rc = -ENOMEM); diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c index 55eaa02..3ea4b49 100644 --- a/lustre/lmv/lmv_obd.c +++ b/lustre/lmv/lmv_obd.c @@ -1466,10 +1466,6 @@ lmv_enqueue_remote(struct obd_export *exp, int lock_type, CDEBUG(D_OTHER, "ENQUEUE '%s' on "DFID" -> "DFID"\n", LL_IT2STR(it), PFID(&op_data->fid1), PFID(&body->fid1)); - tgt_exp = lmv_get_export(lmv, &body->fid1); - if (IS_ERR(tgt_exp)) - RETURN(PTR_ERR(tgt_exp)); - /* We got LOOKUP lock, but we really need attrs */ pmode = it->d.lustre.it_lock_mode; LASSERT(pmode != 0); @@ -1477,24 +1473,28 @@ lmv_enqueue_remote(struct obd_export *exp, int lock_type, it->d.lustre.it_lock_mode = 0; it->d.lustre.it_data = NULL; + it->d.lustre.it_disposition &= ~DISP_ENQ_COMPLETE; + ptlrpc_req_finished(req); + + tgt_exp = lmv_get_export(lmv, &body->fid1); + if (IS_ERR(tgt_exp)) + GOTO(out, PTR_ERR(tgt_exp)); + OBD_ALLOC_PTR(rdata); if (rdata == NULL) - RETURN(-ENOMEM); + GOTO(out, -ENOMEM); + rdata->fid1 = body->fid1; rdata->name = NULL; rdata->namelen = 0; - it->d.lustre.it_disposition &= ~DISP_ENQ_COMPLETE; - ptlrpc_req_finished(req); - rc = md_enqueue(tgt_exp, lock_type, it, lock_mode, rdata, lockh, lmm, lmmsize, cb_compl, cb_blocking, cb_data, extra_lock_flags); - ldlm_lock_decref(&plock, pmode); - - EXIT; -out_free_rdata: OBD_FREE_PTR(rdata); + EXIT; +out: + ldlm_lock_decref(&plock, pmode); return rc; } -- 1.8.3.1