|
@@ -546,8 +546,8 @@ static int add_recvbuf_small(struct receive_queue *rq, gfp_t gfp)
|
|
|
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);
|
|
@@ -563,6 +563,8 @@ static int add_recvbuf_big(struct receive_queue *rq, gfp_t 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);
|
|
@@ -899,6 +901,7 @@ static int xmit_skb(struct send_queue *sq, struct sk_buff *skb)
|
|
|
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);
|