c
if (fragid == FIRST_FRAGMENT) {
    if (unlikely(head))
        goto err;
    struct sk_buff *tmp_frag = frag;
    if (skb_has_frag_list(tmp_frag) && __skb_linearize(tmp_frag))
        goto err;
    tmp_frag = skb_unshare(tmp_frag, GFP_ATOMIC);
    if (unlikely(!tmp_frag))
        goto err;
    head = *headbuf = tmp_frag;
    TIPC_SKB_CB(head)->tail = NULL;
    *buf = NULL;
    return 0;
}
