Commit 7035833f authored by Alex Elder's avatar Alex Elder Committed by Greg Kroah-Hartman

greybus: cancel whole operation on interrupt

Cancel the operation--not just the request message--if waiting
for a synchronous operation to complete is interrupted.  Return
the operation result (which in that case will be -EINTR).  The
cancelation will result in the normal operation completion path
being taken before returning.

Make gb_operation_wait() private, since it's only ever used for
for synchronous operations.
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent f68c05c0
...@@ -161,21 +161,18 @@ static void gb_operation_complete(struct gb_operation *operation) ...@@ -161,21 +161,18 @@ static void gb_operation_complete(struct gb_operation *operation)
} }
/* /*
* Wait for a submitted operation to complete. Returns -RESTARTSYS * Wait for a submitted operation to complete. Returns the result
* if the wait was interrupted. Otherwise returns the result of the * of the operation; this will be -EINTR if the wait was interrupted.
* operation.
*/ */
int gb_operation_wait(struct gb_operation *operation) static int gb_operation_wait(struct gb_operation *operation)
{ {
int ret; int ret;
ret = wait_for_completion_interruptible(&operation->completion); ret = wait_for_completion_interruptible(&operation->completion);
/* If interrupted, cancel the in-flight buffer */
if (ret < 0) if (ret < 0)
gb_message_cancel(operation->request); gb_operation_cancel(operation, -EINTR);
else
ret = operation->errno; return operation->errno;
return ret;
} }
#if 0 #if 0
......
...@@ -99,7 +99,6 @@ int gb_operation_request_send(struct gb_operation *operation, ...@@ -99,7 +99,6 @@ int gb_operation_request_send(struct gb_operation *operation,
int gb_operation_response_send(struct gb_operation *operation); int gb_operation_response_send(struct gb_operation *operation);
void gb_operation_cancel(struct gb_operation *operation, int errno); void gb_operation_cancel(struct gb_operation *operation, int errno);
int gb_operation_wait(struct gb_operation *operation);
int gb_operation_status_map(u8 status); int gb_operation_status_map(u8 status);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment