summaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netfront.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/xen-netfront.c')
-rw-r--r--drivers/net/xen-netfront.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index e14ec75b61d6..482c6c8b0fb7 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -887,9 +887,9 @@ static int xennet_set_skb_gso(struct sk_buff *skb,
887 return 0; 887 return 0;
888} 888}
889 889
890static RING_IDX xennet_fill_frags(struct netfront_queue *queue, 890static int xennet_fill_frags(struct netfront_queue *queue,
891 struct sk_buff *skb, 891 struct sk_buff *skb,
892 struct sk_buff_head *list) 892 struct sk_buff_head *list)
893{ 893{
894 RING_IDX cons = queue->rx.rsp_cons; 894 RING_IDX cons = queue->rx.rsp_cons;
895 struct sk_buff *nskb; 895 struct sk_buff *nskb;
@@ -908,7 +908,7 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
908 if (unlikely(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS)) { 908 if (unlikely(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS)) {
909 queue->rx.rsp_cons = ++cons + skb_queue_len(list); 909 queue->rx.rsp_cons = ++cons + skb_queue_len(list);
910 kfree_skb(nskb); 910 kfree_skb(nskb);
911 return ~0U; 911 return -ENOENT;
912 } 912 }
913 913
914 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, 914 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
@@ -919,7 +919,9 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
919 kfree_skb(nskb); 919 kfree_skb(nskb);
920 } 920 }
921 921
922 return cons; 922 queue->rx.rsp_cons = cons;
923
924 return 0;
923} 925}
924 926
925static int checksum_setup(struct net_device *dev, struct sk_buff *skb) 927static int checksum_setup(struct net_device *dev, struct sk_buff *skb)
@@ -1045,8 +1047,7 @@ err:
1045 skb->data_len = rx->status; 1047 skb->data_len = rx->status;
1046 skb->len += rx->status; 1048 skb->len += rx->status;
1047 1049
1048 i = xennet_fill_frags(queue, skb, &tmpq); 1050 if (unlikely(xennet_fill_frags(queue, skb, &tmpq)))
1049 if (unlikely(i == ~0U))
1050 goto err; 1051 goto err;
1051 1052
1052 if (rx->flags & XEN_NETRXF_csum_blank) 1053 if (rx->flags & XEN_NETRXF_csum_blank)
@@ -1056,7 +1057,7 @@ err:
1056 1057
1057 __skb_queue_tail(&rxq, skb); 1058 __skb_queue_tail(&rxq, skb);
1058 1059
1059 queue->rx.rsp_cons = ++i; 1060 i = ++queue->rx.rsp_cons;
1060 work_done++; 1061 work_done++;
1061 } 1062 }
1062 1063