OSDN Git Service

s390/qeth: remove QETH_RX_PULL_LEN
authorJulian Wiedmann <jwi@linux.ibm.com>
Mon, 23 Dec 2019 14:22:27 +0000 (15:22 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 26 Dec 2019 23:23:50 +0000 (15:23 -0800)
Since commit f677fcb9aeb6 ("s390/qeth: ensure linear access to packet headers"),
the CQ-specific skbs are allocated with a slightly bigger linear part
than necessary. Shrink it down to the maximum that's needed by
qeth_extract_skb().

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/qeth_core.h
drivers/s390/net/qeth_core_main.c

index 4ab3be8..7c37e94 100644 (file)
@@ -221,7 +221,6 @@ struct qeth_vnicc_info {
 
 /* large receive scatter gather copy break */
 #define QETH_RX_SG_CB (PAGE_SIZE >> 1)
-#define QETH_RX_PULL_LEN 256
 
 struct qeth_hdr_layer3 {
        __u8  id;
index b32b503..3be3d13 100644 (file)
@@ -2627,7 +2627,8 @@ static int qeth_init_input_buffer(struct qeth_card *card,
 
        if ((card->options.cq == QETH_CQ_ENABLED) && (!buf->rx_skb)) {
                buf->rx_skb = netdev_alloc_skb(card->dev,
-                                              QETH_RX_PULL_LEN + ETH_HLEN);
+                                              ETH_HLEN +
+                                              sizeof(struct ipv6hdr));
                if (!buf->rx_skb)
                        return 1;
        }
@@ -5264,7 +5265,8 @@ next_packet:
 
        if (use_rx_sg) {
                /* QETH_CQ_ENABLED only: */
-               if (qethbuffer->rx_skb) {
+               if (qethbuffer->rx_skb &&
+                   skb_tailroom(qethbuffer->rx_skb) >= linear_len + headroom) {
                        skb = qethbuffer->rx_skb;
                        qethbuffer->rx_skb = NULL;
                        goto use_skb;