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