[PATCH 01/14] parport: return value of attach and parport_register_driver

From: Sudip Mukherjee
Date: Wed Apr 08 2015 - 07:21:18 EST


as of now, we are not checking if attach or parport_register_driver
has succeeded or failed. But attach can fail in the places where they
have been used. Lets check the return of attach, and if attach fails
then parport_register_driver should also fail. We can have multiple
parallel port so we only mark attach as failed only if it has never
returned a 0.

Signed-off-by: Sudip Mukherjee <sudip@xxxxxxxxxxxxxxx>
---
drivers/parport/share.c | 20 +++++++++++++++-----
include/linux/parport.h | 2 +-
2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/drivers/parport/share.c b/drivers/parport/share.c
index 3fa6624..640ce41 100644
--- a/drivers/parport/share.c
+++ b/drivers/parport/share.c
@@ -148,23 +148,33 @@ static void get_lowlevel_driver (void)
* callback, but if the driver wants to take a copy of the
* pointer it must call parport_get_port() to do so.
*
- * Returns 0 on success. Currently it always succeeds.
+ * Returns 0 on success.
**/

int parport_register_driver (struct parport_driver *drv)
{
struct parport *port;
+ int ret, err;
+ bool attached = false;

if (list_empty(&portlist))
get_lowlevel_driver ();

mutex_lock(&registration_lock);
- list_for_each_entry(port, &portlist, list)
- drv->attach(port);
- list_add(&drv->list, &drivers);
+ list_for_each_entry(port, &portlist, list) {
+ err = drv->attach(port);
+ if (err == 0)
+ attached = true;
+ else
+ ret = err;
+ }
+ if (attached) {
+ list_add(&drv->list, &drivers);
+ ret = 0;
+ }
mutex_unlock(&registration_lock);

- return 0;
+ return ret;
}

/**
diff --git a/include/linux/parport.h b/include/linux/parport.h
index c22f125..9411065 100644
--- a/include/linux/parport.h
+++ b/include/linux/parport.h
@@ -249,7 +249,7 @@ struct parport {

struct parport_driver {
const char *name;
- void (*attach) (struct parport *);
+ int (*attach)(struct parport *);
void (*detach) (struct parport *);
struct list_head list;
};
--
1.8.1.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/