diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c index 8cb08033b7c152b388a291d03499f7f180566d4b..9c8c9ed1dc9e0b2186e60e66488ea1159f22d7b8 100644 --- a/drivers/usb/gadget/function/u_ether.c +++ b/drivers/usb/gadget/function/u_ether.c @@ -553,16 +553,14 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, spin_lock_irqsave(&dev->lock, flags); if (dev->port_usb) skb = dev->wrap(dev->port_usb, skb); + spin_unlock_irqrestore(&dev->lock, flags); if (!skb) { /* Multi frame CDC protocols may store the frame for * later which is not a dropped frame. */ if (dev->port_usb && - dev->port_usb->supports_multi_frame) { - spin_unlock_irqrestore(&dev->lock, flags); + dev->port_usb->supports_multi_frame) goto multiframe; - } - spin_unlock_irqrestore(&dev->lock, flags); goto drop; } } @@ -580,7 +578,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, req->zero = 0; else req->zero = 1; - spin_unlock_irqrestore(&dev->lock, flags); /* use zlp framing on tx for strict CDC-Ether conformance, * though any robust network rx path ignores extra padding.