The skb_unlink function is a wrapper for __skb_unlink.
__skb_unlink removes skb from its sk_buff_head.
It decrements the list qlen pointer, and cleanly detaches the sk_buff
from its queue. This function should always be used instead of
performing this task manually, as it provides a clean, standardized
way of manipulating an sk_buff_head, and provides interrupt disabling (see
NOTES below.) Most users will not call __skb_unlink
directly, as it requires that two arguments be supplied and does not
provide any interrupt handling. skb_unlink determines the list
from which skb should be detached, and disables interrupts.
It is important to note the difference between not only __skb_unlink
and skb_unlink, but all the __skb_ functions and their
skb_ counterparts. Essentially, the __skb_ functions are
non-atomic, and should only be used with interrupts disabled. As a convenience,
the skb_ functions are provided, which perform interrupt disable /
enable wrapper functionality in addition to performing their specific tasks.