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: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c
index dc12e6d..f4d984f 100644
--- a/drivers/staging/greybus/operation.c
+++ b/drivers/staging/greybus/operation.c
@@ -161,21 +161,18 @@
 }
 
 /*
- * 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
diff --git a/drivers/staging/greybus/operation.h b/drivers/staging/greybus/operation.h
index d24e5e0..c391b28 100644
--- a/drivers/staging/greybus/operation.h
+++ b/drivers/staging/greybus/operation.h
@@ -99,7 +99,6 @@
 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);