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 <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
1635304d63
commit
fde7382b47
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user