skb_put(skb, GOOD_PACKET_LEN);
 
        hdr = skb_vnet_hdr(skb);
+       sg_init_table(rq->sg, MAX_SKB_FRAGS + 2);
        sg_set_buf(rq->sg, &hdr->hdr, sizeof hdr->hdr);
-
        skb_to_sgvec(skb, rq->sg + 1, 0, skb->len);
 
        err = virtqueue_add_inbuf(rq->vq, rq->sg, 2, skb, gfp);
        char *p;
        int i, err, offset;
 
+       sg_init_table(rq->sg, MAX_SKB_FRAGS + 2);
+
        /* page in rq->sg[MAX_SKB_FRAGS + 1] is list tail */
        for (i = MAX_SKB_FRAGS + 1; i > 1; --i) {
                first = get_a_page(rq, gfp);
        if (vi->mergeable_rx_bufs)
                hdr->mhdr.num_buffers = 0;
 
+       sg_init_table(sq->sg, MAX_SKB_FRAGS + 2);
        if (can_push) {
                __skb_push(skb, hdr_len);
                num_sg = skb_to_sgvec(skb, sq->sg, 0, skb->len);