Whamcloud - gitweb
Don't leak lov_lock at lov_add_target
authorshadow <shadow>
Fri, 15 May 2009 09:18:56 +0000 (09:18 +0000)
committershadow <shadow>
Fri, 15 May 2009 09:18:56 +0000 (09:18 +0000)
Branch HEAD
b=18868
i=tappro
i=johann

lustre/lov/lov_obd.c

index d7ce626..b3f873c 100644 (file)
@@ -580,6 +580,13 @@ int lov_add_target(struct obd_device *obd, struct obd_uuid *uuidp,
                 RETURN(-ENOMEM);
         }
 
+        rc = lov_ost_pool_add(&lov->lov_packed, index, lov->lov_tgt_size);
+        if (rc) {
+                mutex_up(&lov->lov_lock);
+                OBD_FREE_PTR(tgt);
+                RETURN(rc);
+        }
+
         memset(tgt, 0, sizeof(*tgt));
         tgt->ltd_uuid = *uuidp;
         tgt->ltd_obd = tgt_obd;
@@ -591,10 +598,6 @@ int lov_add_target(struct obd_device *obd, struct obd_uuid *uuidp,
         if (index >= lov->desc.ld_tgt_count)
                 lov->desc.ld_tgt_count = index + 1;
 
-        rc = lov_ost_pool_add(&lov->lov_packed, index, lov->lov_tgt_size);
-        if (rc)
-                RETURN(rc);
-
         mutex_up(&lov->lov_lock);
 
         CDEBUG(D_CONFIG, "idx=%d ltd_gen=%d ld_tgt_count=%d\n",