greybus: handle data send errors in workqueue

The data sent callback can execute in atomic context.  If an error
occurred, we shouldn't be completing the operation right then and
there.  Instead, hand it off to the operation workqueue to complete
the operation.

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 4e4fa8b..9ad714e 100644
--- a/drivers/staging/greybus/operation.c
+++ b/drivers/staging/greybus/operation.c
@@ -506,9 +506,8 @@
 	/* XXX Right now we assume we're an outgoing request */
 	message = gb_hd_message_find(hd, header);
 	operation = message->operation;
-	gb_connection_err(operation->connection, "send error %d\n", status);
 	operation->errno = status;
-	gb_operation_complete(operation);
+	queue_work(gb_operation_workqueue, &operation->work);
 }
 EXPORT_SYMBOL_GPL(greybus_data_sent);