On Wed, May 13, 2020 at 01:38:09PM +0000, Walter Harms wrote: > IMHO _rtl_usb_transmit() should not free() either > it should return -1. > The only caller is rtl_usb_tx() where we need a check: > > if ( _rtl_usb_transmit() < 0) > goto err_free; > > but i am confused, rtl_usb_tx() is returning NETDEV_TX_OK in an error case ? > > err_free: > dev_kfree_skb_any(skb); > return NETDEV_TX_OK; This is a pretty typical pattern in networking. For convenience we are pretending that the transmit always succeeds and that the packet was lost somewhere in the network. The TCP layer will ask for a resend. regards, dan carpenter