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: b40f4757da (IB/core: Make device counter infrastructure
dynamic)
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Doug Ledford 2016-06-07 07:43:46 -04:00
Родитель 41aaa99fab
Коммит 495fbae6e2
1 изменённых файлов: 4 добавлений и 3 удалений

Просмотреть файл

@ -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,
u8 port_num)
{
struct attribute_group *hsag = NULL;
struct attribute_group *hsag;
struct rdma_hw_stats *stats;
int i = 0, ret;
int i, ret;
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,
ret = device->get_hw_stats(device, stats, port_num,
stats->num_counters);
if (ret != stats->num_counters)
goto err;
goto err_free_hsag;
stats->timestamp = jiffies;
@ -951,6 +951,7 @@ static void setup_hw_stats(struct ib_device *device, struct ib_port *port,
err:
for (; i >= 0; i--)
kfree(hsag->attrs[i]);
err_free_hsag:
kfree(hsag);
err_free_stats:
kfree(stats);