Skip to content

Commit 1e2c611

Browse files
bmorkdavem330
authored andcommitted
net: cdc_ncm: reduce skb truesize in rx path
Cloning the big skbs we use for USB buffering chokes up TCP and SCTP because the socket memory limits are hitting earlier than they should. It is better to unconditionally copy the unwrapped packets to freshly allocated skbs. Reported-by: Jim Baxter <[email protected]> Acked-by: Eric Dumazet <[email protected]> Signed-off-by: Bjørn Mork <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent e289fd2 commit 1e2c611

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

drivers/net/usb/cdc_ncm.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,12 +1289,11 @@ int cdc_ncm_rx_fixup(struct usbnet *dev, struct sk_buff *skb_in)
12891289
break;
12901290

12911291
} else {
1292-
skb = skb_clone(skb_in, GFP_ATOMIC);
1292+
/* create a fresh copy to reduce truesize */
1293+
skb = netdev_alloc_skb_ip_align(dev->net, len);
12931294
if (!skb)
12941295
goto error;
1295-
skb->len = len;
1296-
skb->data = ((u8 *)skb_in->data) + offset;
1297-
skb_set_tail_pointer(skb, len);
1296+
memcpy(skb_put(skb, len), skb_in->data + offset, len);
12981297
usbnet_skb_return(dev, skb);
12991298
payload += len; /* count payload bytes in this NTB */
13001299
}

0 commit comments

Comments
 (0)