greybus: operation: fix memory leak in request_send error path

Make sure to drop the operation reference when sending the request fails
to avoid leaking the operation structures.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c
index ad45dee..dcf987f 100644
--- a/drivers/staging/greybus/operation.c
+++ b/drivers/staging/greybus/operation.c
@@ -643,6 +643,7 @@
 	struct gb_connection *connection = operation->connection;
 	struct gb_operation_msg_hdr *header;
 	unsigned int cycle;
+	int ret;
 
 	if (!callback)
 		return -EINVAL;
@@ -675,7 +676,11 @@
 	/* All set, send the request */
 	gb_operation_result_set(operation, -EINPROGRESS);
 
-	return gb_message_send(operation->request);
+	ret = gb_message_send(operation->request);
+	if (ret)
+		gb_operation_put(operation);
+
+	return ret;
 }
 EXPORT_SYMBOL_GPL(gb_operation_request_send);