Whamcloud - gitweb
b=23216 a fix for a possible memory leak in lov_setup
authorAndrew Perepechko <andrew.perepechko@oracle.com>
Wed, 29 Sep 2010 08:59:53 +0000 (12:59 +0400)
committerVitaly Fertman <vitaly.fertman@sun.com>
Mon, 4 Oct 2010 19:57:03 +0000 (23:57 +0400)
i=Vitaly Fertman
i=Mikhail Pershin

lustre/lov/lov_obd.c

index 0ae54ea..b82202a 100644 (file)
@@ -815,12 +815,10 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
         lov->lov_pool_count = 0;
         rc = lov_ost_pool_init(&lov->lov_packed, 0);
         if (rc)
         lov->lov_pool_count = 0;
         rc = lov_ost_pool_init(&lov->lov_packed, 0);
         if (rc)
-                RETURN(rc);
+                GOTO(out_free_statfs, rc);
         rc = lov_ost_pool_init(&lov->lov_qos.lq_rr.lqr_pool, 0);
         rc = lov_ost_pool_init(&lov->lov_qos.lq_rr.lqr_pool, 0);
-        if (rc) {
-                lov_ost_pool_free(&lov->lov_packed);
-                RETURN(rc);
-        }
+        if (rc)
+                GOTO(out_free_lov_packed, rc);
 
         lprocfs_lov_init_vars(&lvars);
         lprocfs_obd_setup(obd, lvars.obd_vars);
 
         lprocfs_lov_init_vars(&lvars);
         lprocfs_obd_setup(obd, lvars.obd_vars);
@@ -839,6 +837,12 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
                                                     NULL, NULL);
 
         RETURN(0);
                                                     NULL, NULL);
 
         RETURN(0);
+
+out_free_lov_packed:
+        lov_ost_pool_free(&lov->lov_packed);
+out_free_statfs:
+        OBD_FREE_PTR(lov->lov_qos.lq_statfs_data);
+        return rc;
 }
 
 static int lov_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage)
 }
 
 static int lov_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage)