This is not necessary.  skb_gro_receive() will never change what
'head' points to.
In it's original implementation (see commit 
71d93b39e52e ("net: Add
skb_gro_receive")), it did:
====================
+	*head = nskb;
+	nskb->next = p->next;
+	p->next = NULL;
====================
This sequence was removed in commit 
58025e46ea2d ("net: gro: remove
obsolete code from skb_gro_receive()")
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Eric Dumazet <edumazet@google.com>
 
                goto out_check_final;
        }
 
-       p = *head;
-       th2 = tcp_hdr(p);
        tcp_flag_word(th2) |= flags & (TCP_FLAG_FIN | TCP_FLAG_PSH);
 
 out_check_final: