diff options
Diffstat (limited to 'drivers/net/xen-netfront.c')
-rw-r--r-- | drivers/net/xen-netfront.c | 17 |
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 | ||
890 | static RING_IDX xennet_fill_frags(struct netfront_queue *queue, | 890 | static 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 | ||
925 | static int checksum_setup(struct net_device *dev, struct sk_buff *skb) | 927 | static 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 | ||