Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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);