[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Re: [Bug 1612] Can't start VM when vif set and udev version is greater than 151



> > Soooo.. the last I remember it was that the patch for this was not
> > appropiate. But I don't remember the details - is there a forthcoming
> > patch that can fix the outstanding issue?
> > 
> > Or is the patch ready and we forgot about it?
> 
> For reference, below is the diff for what we're now using.

Ah nice.. 

I get this:
patch -p1 --dry-run < ~/p.patch 
patching file drivers/xen/netback/xenbus.c
Hunk #1 succeeded at 19 with fuzz 1.
Hunk #2 FAILED at 29.
Hunk #3 FAILED at 40.
patch: **** malformed patch at line 120: nv *env)

If it would not be too much trouble, can you attach it as an attachment?

> 
> Jan
> 
> --- a/drivers/xen/netback/xenbus.c
> +++ b/drivers/xen/netback/xenbus.c
> @@ -19,6 +19,7 @@
>  
>  #include <stdarg.h>
>  #include <linux/module.h>
> +#include <linux/rwsem.h>
>  #include <xen/xenbus.h>
>  #include "common.h"
>  
> @@ -28,6 +29,7 @@
>      printk("netback/xenbus (%s:%d) " fmt ".\n", __FUNCTION__, __LINE__, 
> ##args)
>  #endif
>  
> +static DECLARE_RWSEM(teardown_sem);
>  
>  static int connect_rings(struct backend_info *);
>  static void connect(struct backend_info *);
> @@ -39,13 +41,18 @@ static int netback_remove(struct xenbus_
>  
>       netback_remove_accelerators(be, dev);
>  
> -     if (be->netif) {
> +     if (be->netif)
>               kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
> +
> +     down_write(&teardown_sem);
> +     if (be->netif) {
>               netif_disconnect(be->netif);
>               be->netif = NULL;
>       }
> -     kfree(be);
>       dev_set_drvdata(&dev->dev, NULL);
> +     up_write(&teardown_sem);
> +     kfree(be);
> +
>       return 0;
>  }
>  
> @@ -151,8 +158,7 @@ fail:
>   */
>  static int netback_uevent(struct xenbus_device *xdev, struct kobj_uevent_env 
> *env)
>  {
> -     struct backend_info *be = dev_get_drvdata(&xdev->dev);
> -     netif_t *netif = be->netif;
> +     struct backend_info *be;
>       char *val;
>  
>       DPRINTK("netback_uevent");
> @@ -163,12 +169,15 @@ static int netback_uevent(struct xenbus_
>               xenbus_dev_fatal(xdev, err, "reading script");
>               return err;
>       }
> -     else {
> -             add_uevent_var(env, "script=%s", val);
> -             kfree(val);
> -     }
>  
> -     add_uevent_var(env, "vif=%s", netif->dev->name);
> +     add_uevent_var(env, "script=%s", val);
> +     kfree(val);
> +
> +     down_read(&teardown_sem);
> +     be = dev_get_drvdata(&xdev->dev);
> +     if (be && be->netif)
> +             add_uevent_var(env, "vif=%s", be->netif->dev->name);
> +     up_read(&teardown_sem);
>  
>       return 0;
>  }
> @@ -179,6 +188,7 @@ static void backend_create_netif(struct 
>       int err;
>       long handle;
>       struct xenbus_device *dev = be->dev;
> +     netif_t *netif;
>  
>       if (be->netif != NULL)
>               return;
> @@ -189,13 +199,13 @@ static void backend_create_netif(struct 
>               return;
>       }
>  
> -     be->netif = netif_alloc(&dev->dev, dev->otherend_id, handle);
> -     if (IS_ERR(be->netif)) {
> -             err = PTR_ERR(be->netif);
> -             be->netif = NULL;
> +     netif = netif_alloc(&dev->dev, dev->otherend_id, handle);
> +     if (IS_ERR(netif)) {
> +             err = PTR_ERR(netif);
>               xenbus_dev_fatal(dev, err, "creating interface");
>               return;
>       }
> +     be->netif = netif;
>  
>       kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
>  }
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.