aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-02-18 23:32:49 -0500
committerDavid S. Miller <davem@davemloft.net>2013-02-18 23:34:21 -0500
commit6338a53a2bd02d5878ab449371323364b7cc7694 (patch)
tree461c4acae130771b9856715bc2cfdc341b6e5964 /drivers/net/xen-netback
parent8064b3cf750e71fdaf306abb4433a93d0f45f4c9 (diff)
parent18cf0d0784b4a634472ed24d0d7ca1c721d93e90 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net into net
Pull in 'net' to take in the bug fixes that didn't make it into 3.8-final. Also, deal with the semantic conflict of the change made to net/ipv6/xfrm6_policy.c A missing rt6->n neighbour release was added to 'net', but in 'net-next' we no longer cache the neighbour entries in the ipv6 routes so that change is not appropriate there. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/xen-netback')
-rw-r--r--drivers/net/xen-netback/interface.c3
-rw-r--r--drivers/net/xen-netback/netback.c8
2 files changed, 5 insertions, 6 deletions
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index fc1b8d78f4bc..d98414168485 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -132,6 +132,7 @@ static void xenvif_up(struct xenvif *vif)
132static void xenvif_down(struct xenvif *vif) 132static void xenvif_down(struct xenvif *vif)
133{ 133{
134 disable_irq(vif->irq); 134 disable_irq(vif->irq);
135 del_timer_sync(&vif->credit_timeout);
135 xen_netbk_deschedule_xenvif(vif); 136 xen_netbk_deschedule_xenvif(vif);
136 xen_netbk_remove_xenvif(vif); 137 xen_netbk_remove_xenvif(vif);
137} 138}
@@ -365,8 +366,6 @@ void xenvif_disconnect(struct xenvif *vif)
365 atomic_dec(&vif->refcnt); 366 atomic_dec(&vif->refcnt);
366 wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0); 367 wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0);
367 368
368 del_timer_sync(&vif->credit_timeout);
369
370 if (vif->irq) 369 if (vif->irq)
371 unbind_from_irqhandler(vif->irq, vif); 370 unbind_from_irqhandler(vif->irq, vif);
372 371
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 2b9520c46e97..cd49ba949636 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -911,13 +911,13 @@ static int netbk_count_requests(struct xenvif *vif,
911 if (frags >= work_to_do) { 911 if (frags >= work_to_do) {
912 netdev_err(vif->dev, "Need more frags\n"); 912 netdev_err(vif->dev, "Need more frags\n");
913 netbk_fatal_tx_err(vif); 913 netbk_fatal_tx_err(vif);
914 return -frags; 914 return -ENODATA;
915 } 915 }
916 916
917 if (unlikely(frags >= MAX_SKB_FRAGS)) { 917 if (unlikely(frags >= MAX_SKB_FRAGS)) {
918 netdev_err(vif->dev, "Too many frags\n"); 918 netdev_err(vif->dev, "Too many frags\n");
919 netbk_fatal_tx_err(vif); 919 netbk_fatal_tx_err(vif);
920 return -frags; 920 return -E2BIG;
921 } 921 }
922 922
923 memcpy(txp, RING_GET_REQUEST(&vif->tx, cons + frags), 923 memcpy(txp, RING_GET_REQUEST(&vif->tx, cons + frags),
@@ -925,7 +925,7 @@ static int netbk_count_requests(struct xenvif *vif,
925 if (txp->size > first->size) { 925 if (txp->size > first->size) {
926 netdev_err(vif->dev, "Frag is bigger than frame.\n"); 926 netdev_err(vif->dev, "Frag is bigger than frame.\n");
927 netbk_fatal_tx_err(vif); 927 netbk_fatal_tx_err(vif);
928 return -frags; 928 return -EIO;
929 } 929 }
930 930
931 first->size -= txp->size; 931 first->size -= txp->size;
@@ -935,7 +935,7 @@ static int netbk_count_requests(struct xenvif *vif,
935 netdev_err(vif->dev, "txp->offset: %x, size: %u\n", 935 netdev_err(vif->dev, "txp->offset: %x, size: %u\n",
936 txp->offset, txp->size); 936 txp->offset, txp->size);
937 netbk_fatal_tx_err(vif); 937 netbk_fatal_tx_err(vif);
938 return -frags; 938 return -EINVAL;
939 } 939 }
940 } while ((txp++)->flags & XEN_NETTXF_more_data); 940 } while ((txp++)->flags & XEN_NETTXF_more_data);
941 return frags; 941 return frags;