summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/loopback.c
diff options
context:
space:
mode:
authorBartosz Golaszewski <bgolaszewski@baylibre.com>2015-11-19 13:46:43 +0100
committerGreg Kroah-Hartman <gregkh@google.com>2015-11-19 16:02:41 -0800
commit81ad6994611706270bc68a8dd951d7c69e2ed175 (patch)
treeef7bb8a785c97cd4f879b37188a50f773f597638 /drivers/staging/greybus/loopback.c
parent9864756be7542d3fe4e18297e0a45b5e2dec2f62 (diff)
downloadlinux-81ad6994611706270bc68a8dd951d7c69e2ed175.tar.bz2
greybus: loopback: allocate a response even for a 0-byte request
If payload length of a transfer packet is 0, no response is allocated. Send a well-formed response even in that case. Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> Reviewed-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/loopback.c')
-rw-r--r--drivers/staging/greybus/loopback.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/staging/greybus/loopback.c b/drivers/staging/greybus/loopback.c
index ec68247f5bdb..0c38414a3e06 100644
--- a/drivers/staging/greybus/loopback.c
+++ b/drivers/staging/greybus/loopback.c
@@ -533,16 +533,16 @@ static int gb_loopback_request_recv(u8 type, struct gb_operation *operation)
return -EINVAL;
}
- if (len) {
- if (!gb_operation_response_alloc(operation,
- len + sizeof(*response), GFP_KERNEL)) {
- dev_err(dev, "error allocating response\n");
- return -ENOMEM;
- }
- response = operation->response->payload;
- response->len = cpu_to_le32(len);
- memcpy(response->data, request->data, len);
+ if (!gb_operation_response_alloc(operation,
+ len + sizeof(*response), GFP_KERNEL)) {
+ dev_err(dev, "error allocating response\n");
+ return -ENOMEM;
}
+ response = operation->response->payload;
+ response->len = cpu_to_le32(len);
+ if (len)
+ memcpy(response->data, request->data, len);
+
return 0;
default:
dev_err(dev, "unsupported request: %hhu\n", type);