diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c index 2a6f361b877f..c80eb33f5884 100644 --- a/drivers/staging/greybus/operation.c +++ b/drivers/staging/greybus/operation.c @@ -642,8 +642,13 @@ int gb_operation_request_send(struct gb_operation *operation, /* * Send a response for an incoming operation request. */ -int gb_operation_response_send(struct gb_operation *operation) +int gb_operation_response_send(struct gb_operation *operation, int errno) { + /* Record the result */ + if (!gb_operation_result_set(operation, errno)) { + pr_err("request result already set\n"); + return -EIO; /* Shouldn't happen */ + } gb_operation_destroy(operation); return 0; diff --git a/drivers/staging/greybus/operation.h b/drivers/staging/greybus/operation.h index feff8238f7cf..ed344f8de2a7 100644 --- a/drivers/staging/greybus/operation.h +++ b/drivers/staging/greybus/operation.h @@ -100,7 +100,7 @@ static inline void gb_operation_destroy(struct gb_operation *operation) int gb_operation_request_send(struct gb_operation *operation, gb_operation_callback callback); -int gb_operation_response_send(struct gb_operation *operation); +int gb_operation_response_send(struct gb_operation *operation, int errno); void gb_operation_cancel(struct gb_operation *operation, int errno);