mirror of https://gitee.com/openkylin/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 <elder@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
856618f3fb
commit
deb58ca829
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue