From: Viresh Kumar <viresh.kumar@linaro.org>
Date: Thu, 13 Nov 2014 12:44:37 +0000 (+0530)
Subject: greybus: module: free resources properly on failures
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=0a68a16b914472aa3c9dbac81df501b9c8dffb86;p=linux.git

greybus: module: free resources properly on failures

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
---

diff --git a/drivers/staging/greybus/module.c b/drivers/staging/greybus/module.c
index f5d7dc84c1d18..8cbe65b0c01af 100644
--- a/drivers/staging/greybus/module.c
+++ b/drivers/staging/greybus/module.c
@@ -85,10 +85,6 @@ struct gb_module *gb_module_create(struct greybus_host_device *hd, u8 module_id)
 	gmod->module_id = module_id;
 	INIT_LIST_HEAD(&gmod->interfaces);
 
-	spin_lock_irq(&gb_modules_lock);
-	list_add_tail(&gmod->links, &hd->modules);
-	spin_unlock_irq(&gb_modules_lock);
-
 	gmod->dev.parent = hd->parent;
 	gmod->dev.bus = &greybus_bus_type;
 	gmod->dev.type = &greybus_module_type;
@@ -102,9 +98,14 @@ struct gb_module *gb_module_create(struct greybus_host_device *hd, u8 module_id)
 		pr_err("failed to add module device for id 0x%02hhx\n",
 			module_id);
 		put_device(&gmod->dev);
+		kfree(gmod);
 		return NULL;
 	}
 
+	spin_lock_irq(&gb_modules_lock);
+	list_add_tail(&gmod->links, &hd->modules);
+	spin_unlock_irq(&gb_modules_lock);
+
 	return gmod;
 }