kfree_skb() 함수의 내용이 이해가 되지 않습니다.

trymp의 이미지

void kfree_skb(struct sk_buff *skb)
{
	if (unlikely(!skb))
		return;
	if (likely(atomic_read(&skb->users) == 1))
		smp_rmb();
	else if (likely(!atomic_dec_and_test(&skb->users)))
		return;
	trace_kfree_skb(skb, __builtin_return_address(0));
	__kfree_skb(skb);
}

linux kernel 의 kfree_skb 함수의 내용인데요.

user count 가 1 인 경우에는 smb_rmb() 를 호출하고 아니면

1 감소 시키고 0 이 아니면 리턴하고 0 이면 free 를 진행시켜라 라는 내용같은데요

그러면 0 or 1 인 경우에 free 를 하는 건가요?

뭔가 코드가 일관성이 없는 것 같아서요.

제가 이해한 내용이 맞는지 조언해 주시면 감사하겠습니다.