From: Alex Elder Date: Fri, 12 Jun 2015 15:21:07 +0000 (-0500) Subject: greybus: connection: drop unneeded gb_protocol_put() calls X-Git-Tag: v4.9-rc1~119^2~378^2~21^2~1469 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=deb58ca8299598f81123dd92456c0cc3a9a38555;p=linux.git greybus: connection: drop unneeded gb_protocol_put() calls Although a connection records its protocol id when it gets created, its protocol handler doesn't actually get assigned until gb_connection_bind_protocol() is called. In gb_connection_create() there are some error paths in which a reference to the connection's protocol is released before the protocol handler has been associated with the connection. Get rid of those calls. As a result, we will never pass a null protocol pointer to gb_protocol_put(). Add a precautionary warning in that function in the event that ever occurs. Signed-off-by: Alex Elder Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c index bf5fa101e541..abd74116cf62 100644 --- a/drivers/staging/greybus/connection.c +++ b/drivers/staging/greybus/connection.c @@ -195,7 +195,6 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle, connection->major = major; connection->minor = minor; if (!gb_connection_hd_cport_id_alloc(connection)) { - gb_protocol_put(connection->protocol); kfree(connection); return NULL; } @@ -217,7 +216,6 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle, pr_err("failed to add connection device for cport 0x%04hx\n", cport_id); gb_connection_hd_cport_id_free(connection); - gb_protocol_put(connection->protocol); put_device(&connection->dev); return NULL; @@ -264,6 +262,7 @@ void gb_connection_destroy(struct gb_connection *connection) gb_connection_hd_cport_id_free(connection); gb_protocol_put(connection->protocol); + connection->protocol = NULL; device_unregister(&connection->dev); } diff --git a/drivers/staging/greybus/protocol.c b/drivers/staging/greybus/protocol.c index eed77c3f3a7f..6aebbbd585e1 100644 --- a/drivers/staging/greybus/protocol.c +++ b/drivers/staging/greybus/protocol.c @@ -196,7 +196,7 @@ void gb_protocol_put(struct gb_protocol *protocol) u8 minor; u8 protocol_count; - if (!protocol) + if (WARN_ON(!protocol)) return; id = protocol->id;