Whamcloud - gitweb
- correct error handling
authortappro <tappro>
Mon, 9 Oct 2006 20:39:23 +0000 (20:39 +0000)
committertappro <tappro>
Mon, 9 Oct 2006 20:39:23 +0000 (20:39 +0000)
lustre/lmv/lmv_intent.c
lustre/lmv/lmv_obd.c

index 408716d..c3b8f9c 100644 (file)
@@ -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);
index 55eaa02..3ea4b49 100644 (file)
@@ -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;
 }