diff options
-rw-r--r-- | drivers/net/xen-netback/xenbus.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c index 968787abf78d..ec383b0f5443 100644 --- a/drivers/net/xen-netback/xenbus.c +++ b/drivers/net/xen-netback/xenbus.c | |||
@@ -681,6 +681,9 @@ static int xen_register_watchers(struct xenbus_device *dev, struct xenvif *vif) | |||
681 | char *node; | 681 | char *node; |
682 | unsigned maxlen = strlen(dev->nodename) + sizeof("/rate"); | 682 | unsigned maxlen = strlen(dev->nodename) + sizeof("/rate"); |
683 | 683 | ||
684 | if (vif->credit_watch.node) | ||
685 | return -EADDRINUSE; | ||
686 | |||
684 | node = kmalloc(maxlen, GFP_KERNEL); | 687 | node = kmalloc(maxlen, GFP_KERNEL); |
685 | if (!node) | 688 | if (!node) |
686 | return -ENOMEM; | 689 | return -ENOMEM; |
@@ -770,6 +773,7 @@ static void connect(struct backend_info *be) | |||
770 | } | 773 | } |
771 | 774 | ||
772 | xen_net_read_rate(dev, &credit_bytes, &credit_usec); | 775 | xen_net_read_rate(dev, &credit_bytes, &credit_usec); |
776 | xen_unregister_watchers(be->vif); | ||
773 | xen_register_watchers(dev, be->vif); | 777 | xen_register_watchers(dev, be->vif); |
774 | read_xenbus_vif_flags(be); | 778 | read_xenbus_vif_flags(be); |
775 | 779 | ||