On Sun, 2017-07-16 at 08:59 +0200, Christophe JAILLET wrote:Hi,
Reorder code in the error handling path in order to match the wayI agree we should release ida and free tz, like you did in this patch.
resources
have been allocated.
With this new order, we can avoid a call to 'device_unregister()' if
'thermal_zone_create_device_groups'()' fails. At this point,
'device_register()' has not been called yet.
Signed-off-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx>
---
drivers/thermal/thermal_core.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/thermal/thermal_core.c
b/drivers/thermal/thermal_core.c
index 9743f3e65eb0..c58714800660 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1232,7 +1232,7 @@ thermal_zone_device_register(const char *type,
int trips, int mask,
/* Add nodes that are always present via .groups */
result = thermal_zone_create_device_groups(tz, mask);
if (result)
- goto unregister;
+ goto remove_id;
But the problem is in the code below, where device_register() fails,
we should free the resources allocated in
thermal_zone_create_device_groups() explicitly.
thanks,
rui
/* A new thermal zone needs to be updated anyway. */
atomic_set(&tz->need_update, 1);
@@ -1294,8 +1294,9 @@ thermal_zone_device_register(const char *type,
int trips, int mask,
return tz;
unregister:
- ida_simple_remove(&thermal_tz_ida, tz->id);
device_unregister(&tz->device);
+remove_id:
+ ida_simple_remove(&thermal_tz_ida, tz->id);
kfree(tz);
return ERR_PTR(result);
}