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

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
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -161,21 +161,18 @@ static void gb_operation_complete(struct gb_operation *operation)
}

/*
 * Wait for a submitted operation to complete.  Returns -RESTARTSYS
 * if the wait was interrupted.  Otherwise returns the result of the
 * operation.
 * Wait for a submitted operation to complete.  Returns the result
 * of the operation; this will be -EINTR if the wait was interrupted.
 */
int gb_operation_wait(struct gb_operation *operation)
static int gb_operation_wait(struct gb_operation *operation)
{
	int ret;

	ret = wait_for_completion_interruptible(&operation->completion);
	/* If interrupted, cancel the in-flight buffer */
	if (ret < 0)
		gb_message_cancel(operation->request);
	else
		ret = operation->errno;
	return ret;
		gb_operation_cancel(operation, -EINTR);

	return operation->errno;
}

#if 0
+0 −1
Original line number Diff line number Diff line
@@ -99,7 +99,6 @@ int gb_operation_request_send(struct gb_operation *operation,
int gb_operation_response_send(struct gb_operation *operation);

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);