Hi Tristram, Could you, please, tell me if the above variable was false in your case?
bool cloned = skb_cloned(*skb) || skb_header_cloned(*skb); If yes, then, the proper fix would be as follows: diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c index 8f5bf9166c11..492a8e1a34cd 100644 --- a/drivers/net/ethernet/cadence/macb_main.c +++ b/drivers/net/ethernet/cadence/macb_main.c @@ -1690,7 +1690,7 @@ static int macb_pad_and_fcs(struct sk_buff **skb, struct net_device *ndev) padlen += ETH_FCS_LEN; } - if (!cloned && headroom + tailroom >= padlen) { + if (!cloned && headroom + tailroom >= ETH_FCS_LEN) { (*skb)->data = memmove((*skb)->head, (*skb)->data, (*skb)->len); skb_set_tail_pointer(*skb, (*skb)->len); } else { Could you please check if it works in your case (and without your patch)? Thank you, Claudiu Beznea On 25.10.2018 00:51, tristram...@microchip.com wrote: > From: Tristram Ha <tristram...@microchip.com> > > Socket buffer is not re-created when headroom is 2 and tailroom is 1. > > Signed-off-by: Tristram Ha <tristram...@microchip.com> > --- > drivers/net/ethernet/cadence/macb_main.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/cadence/macb_main.c > b/drivers/net/ethernet/cadence/macb_main.c > index 8f5bf91..1d86b4d 100644 > --- a/drivers/net/ethernet/cadence/macb_main.c > +++ b/drivers/net/ethernet/cadence/macb_main.c > @@ -1684,7 +1684,7 @@ static int macb_pad_and_fcs(struct sk_buff **skb, > struct net_device *ndev) > padlen = 0; > /* No room for FCS, need to reallocate skb. */ > else > - padlen = ETH_FCS_LEN - tailroom; > + padlen = ETH_FCS_LEN; > } else { > /* Add room for FCS. */ > padlen += ETH_FCS_LEN; >