|
@@ -3898,10 +3898,12 @@ EXPORT_SYMBOL_GPL(qeth_get_elements_for_frags);
|
|
|
int qeth_get_elements_no(struct qeth_card *card,
|
|
|
struct sk_buff *skb, int extra_elems, int data_offset)
|
|
|
{
|
|
|
- int elements = qeth_get_elements_for_range(
|
|
|
- (addr_t)skb->data + data_offset,
|
|
|
- (addr_t)skb->data + skb_headlen(skb)) +
|
|
|
- qeth_get_elements_for_frags(skb);
|
|
|
+ addr_t end = (addr_t)skb->data + skb_headlen(skb);
|
|
|
+ int elements = qeth_get_elements_for_frags(skb);
|
|
|
+ addr_t start = (addr_t)skb->data + data_offset;
|
|
|
+
|
|
|
+ if (start != end)
|
|
|
+ elements += qeth_get_elements_for_range(start, end);
|
|
|
|
|
|
if ((elements + extra_elems) > QETH_MAX_BUFFER_ELEMENTS(card)) {
|
|
|
QETH_DBF_MESSAGE(2, "Invalid size of IP packet "
|