From fde7382b47c5fbb64be81420d267f1e314cfee94 Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Wed, 1 Jul 2015 12:37:30 +0200 Subject: [PATCH] greybus: operation: allocate response before setting result Make sure to allocate a response message before setting the operation result. This is needed to handle cancellation of incoming operations. Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/operation.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c index d6e1db87e30a..881dddc51abd 100644 --- a/drivers/staging/greybus/operation.c +++ b/drivers/staging/greybus/operation.c @@ -662,6 +662,12 @@ static int gb_operation_response_send(struct gb_operation *operation, struct gb_connection *connection = operation->connection; int ret; + if (!operation->response && + !gb_operation_is_unidirectional(operation)) { + if (!gb_operation_response_alloc(operation, 0)) + return -ENOMEM; + } + /* Record the result */ if (!gb_operation_result_set(operation, errno)) { dev_err(&connection->dev, "request result already set\n"); @@ -672,11 +678,6 @@ static int gb_operation_response_send(struct gb_operation *operation, if (gb_operation_is_unidirectional(operation)) return 0; - if (!operation->response) { - if (!gb_operation_response_alloc(operation, 0)) - return -ENOMEM; - } - /* Reference will be dropped when message has been sent. */ gb_operation_get(operation); -- 2.20.1