Commit 864c17c3 authored by Julian Wiedmann's avatar Julian Wiedmann Committed by David S. Miller

s390/qeth: try harder to get packets from RX buffer

Current code bails out when two subsequent buffer elements hold
insufficient data to contain a qeth_hdr packet descriptor.
This seems reasonable, but it would be legal for quirky hardware to
leave a few elements empty and then present packets in a subsequent
element. These packets would currently be dropped.

So make sure to check all buffer elements, until we hit the LAST_ENTRY
indication.
Signed-off-by: default avatarJulian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8d68af6a
...@@ -5214,13 +5214,11 @@ struct sk_buff *qeth_core_get_next_skb(struct qeth_card *card, ...@@ -5214,13 +5214,11 @@ struct sk_buff *qeth_core_get_next_skb(struct qeth_card *card,
int use_rx_sg = 0; int use_rx_sg = 0;
/* qeth_hdr must not cross element boundaries */ /* qeth_hdr must not cross element boundaries */
if (element->length < offset + sizeof(struct qeth_hdr)) { while (element->length < offset + sizeof(struct qeth_hdr)) {
if (qeth_is_last_sbale(element)) if (qeth_is_last_sbale(element))
return NULL; return NULL;
element++; element++;
offset = 0; offset = 0;
if (element->length < sizeof(struct qeth_hdr))
return NULL;
} }
*hdr = element->addr + offset; *hdr = element->addr + offset;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment