1) When you have no space in your DMA
Do NOT stash the packet in your ring
a) netif_stop_queue()
b) return 1
A _lot_ of drivers dont follow this rule. A good driver to copy
from if you are into cutnpaste is the e1000.
If you stash the packet in your ring then return 1 you are in deep
doodoo friend.
2) return a 0 only when you have succesfully put things on DMA.
Returning 0 always is not a BadThing. Most drivers do this.
It is a little less efficient at the top layer for each batch of packets
sent to the driver and you end up stopping the netif at this point.
3) In case of error probably return a 1 and dont try anything funny
with the skb. Dont put on your DMA or try to free it or muck with it in
any way. You probably should whine if you have too many errors in
sequence.
Someone with more time than myself can audit the drivers - I have seen
these issues.