From: Johan Hovold Date: Wed, 1 Jul 2015 10:37:30 +0000 (+0200) Subject: greybus: operation: allocate response before setting result X-Git-Tag: v4.9-rc1~119^2~378^2~21^2~1417 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=fde7382b47c5fbb64be81420d267f1e314cfee94;p=karo-tx-linux.git 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 --- 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);