Reject incomplete messages, causing the request to be
transmitted again. This should fix various problems
out there.
Signed-off-by: Julian Andres Klode <jak@jak-linux.org>
Acked-by: Marc Dietrich <marvin24@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
*/
static void nvec_rx_completed(struct nvec_chip *nvec)
{
- if (nvec->rx->pos != nvec_msg_size(nvec->rx))
+ if (nvec->rx->pos != nvec_msg_size(nvec->rx)) {
dev_err(nvec->dev, "RX incomplete: Expected %u bytes, got %u\n",
(uint) nvec_msg_size(nvec->rx),
(uint) nvec->rx->pos);
+ nvec_msg_free(nvec, nvec->rx);
+ nvec->state = 0;
+ return;
+ }
+
spin_lock(&nvec->rx_lock);
/* add the received data to the work list