Commit 495fbae6 authored by Doug Ledford's avatar Doug Ledford

IB/core: fix error unwind in sysfs hw counters code

Between the initial and final versions of the function setup_hw_stats,
the order of variable initialization was changed.  However, the unwind
flow on error did not properly keep up with the flow changes.  Make
the unwind flow match a proper unwind of the allocation flow, then
remove no longer needed variable initializations.

Fixes: b40f4757 (IB/core: Make device counter infrastructure
dynamic)
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 41aaa99f
...@@ -889,9 +889,9 @@ static struct attribute *alloc_hsa_lifespan(char *name, u8 port_num) ...@@ -889,9 +889,9 @@ static struct attribute *alloc_hsa_lifespan(char *name, u8 port_num)
static void setup_hw_stats(struct ib_device *device, struct ib_port *port, static void setup_hw_stats(struct ib_device *device, struct ib_port *port,
u8 port_num) u8 port_num)
{ {
struct attribute_group *hsag = NULL; struct attribute_group *hsag;
struct rdma_hw_stats *stats; struct rdma_hw_stats *stats;
int i = 0, ret; int i, ret;
stats = device->alloc_hw_stats(device, port_num); stats = device->alloc_hw_stats(device, port_num);
...@@ -914,7 +914,7 @@ static void setup_hw_stats(struct ib_device *device, struct ib_port *port, ...@@ -914,7 +914,7 @@ static void setup_hw_stats(struct ib_device *device, struct ib_port *port,
ret = device->get_hw_stats(device, stats, port_num, ret = device->get_hw_stats(device, stats, port_num,
stats->num_counters); stats->num_counters);
if (ret != stats->num_counters) if (ret != stats->num_counters)
goto err; goto err_free_hsag;
stats->timestamp = jiffies; stats->timestamp = jiffies;
...@@ -951,6 +951,7 @@ static void setup_hw_stats(struct ib_device *device, struct ib_port *port, ...@@ -951,6 +951,7 @@ static void setup_hw_stats(struct ib_device *device, struct ib_port *port,
err: err:
for (; i >= 0; i--) for (; i >= 0; i--)
kfree(hsag->attrs[i]); kfree(hsag->attrs[i]);
err_free_hsag:
kfree(hsag); kfree(hsag);
err_free_stats: err_free_stats:
kfree(stats); kfree(stats);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment