From: Andrey Shvetsov <andrey.shvetsov@k2l.de>
Date: Tue, 21 Nov 2017 14:05:22 +0000 (+0100)
Subject: staging: most: core: fix list traversing
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=e7e3ce04588c7f4919627f0742bc6cbe832036a4;p=linux.git

staging: most: core: fix list traversing

This patch fixes the offset and data handling when traversing
the list of devices that are attached to the bus.

Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---

diff --git a/drivers/staging/most/core.c b/drivers/staging/most/core.c
index bfd1a028ccad8..c1fba5ba7541a 100644
--- a/drivers/staging/most/core.c
+++ b/drivers/staging/most/core.c
@@ -529,10 +529,16 @@ static struct core_component *match_component(char *name)
 	return NULL;
 }
 
+struct show_links_data {
+	int offs;
+	char *buf;
+};
+
 int print_links(struct device *dev, void *data)
 {
-	int offs = 0;
-	char *buf = data;
+	struct show_links_data *d = data;
+	int offs = d->offs;
+	char *buf = d->buf;
 	struct most_channel *c;
 	struct most_interface *iface = to_most_interface(dev);
 
@@ -554,13 +560,16 @@ int print_links(struct device *dev, void *data)
 					 dev_name(&c->dev));
 		}
 	}
+	d->offs = offs;
 	return 0;
 }
 
 static ssize_t links_show(struct device_driver *drv, char *buf)
 {
-	bus_for_each_dev(&mc.bus, NULL, buf, print_links);
-	return strlen(buf);
+	struct show_links_data d = { .buf = buf };
+
+	bus_for_each_dev(&mc.bus, NULL, &d, print_links);
+	return d.offs;
 }
 
 static ssize_t components_show(struct device_driver *drv, char *buf)