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

Re: [Xen-devel] [PATCH 3 of 6] xenbackendd: pass type of block device to hotplug script



On Thu, 2011-09-22 at 13:01 +0100, Roger Pau Monne wrote:
> # HG changeset patch
> # User Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
> # Date 1316692489 -7200
> # Node ID 2d77cbdc816bc943e9e69ecca34ae7157079045a
> # Parent  1d3830f8a7306088b49d5732b5e88a73c2bc0315
> xenbackendd: pass type of block device to hotplug script
> 
> Pass the type of block device to attach to the block script instead of 
> reading it from xenstore, since new Xen versions don't make a difference 
> between a block device or an image.
> 
> Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>

I've not got any problem with this one, but I don't think my ACK is
worth much since it's NetBSD and I'm not really qualified, neverless:

Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

> 
> diff -r 1d3830f8a730 -r 2d77cbdc816b tools/hotplug/NetBSD/block
> --- a/tools/hotplug/NetBSD/block      Thu Sep 22 13:54:42 2011 +0200
> +++ b/tools/hotplug/NetBSD/block      Thu Sep 22 13:54:49 2011 +0200
> @@ -19,7 +19,7 @@ error() {
>  
>  xpath=$1
>  xstatus=$2
> -xtype=$(xenstore-read "$xpath/type")
> +xtype=$3
>  xparams=$(xenstore-read "$xpath/params")
>  
>  case $xstatus in
> diff -r 1d3830f8a730 -r 2d77cbdc816b tools/xenbackendd/xenbackendd.c
> --- a/tools/xenbackendd/xenbackendd.c Thu Sep 22 13:54:42 2011 +0200
> +++ b/tools/xenbackendd/xenbackendd.c Thu Sep 22 13:54:49 2011 +0200
> @@ -89,15 +89,15 @@ dodebug(const char *fmt, ...)
>  }
>  
>  static void
> -doexec(const char *cmd, const char *arg1, const char *arg2)
> +doexec(const char *cmd, const char *arg1, const char *arg2, const char *arg3)
>  {
> -     dodebug("exec %s %s %s", cmd, arg1, arg2);
> +     dodebug("exec %s %s %s %s", cmd, arg1, arg2, arg3);
>       switch(vfork()) {
>       case -1:
>               dolog(LOG_ERR, "can't vfork: %s", strerror(errno));
>               break;
>       case 0:
> -             execl(cmd, cmd, arg1, arg2, NULL);
> +             execl(cmd, cmd, arg1, arg2, arg3, NULL);
>               dolog(LOG_ERR, "can't exec %s: %s", cmd, strerror(errno));
>               exit(EXIT_FAILURE);
>               /* NOTREACHED */
> @@ -145,11 +145,14 @@ xen_setup(void)
>  int
>  main(int argc, char * const argv[])
>  {
> +     struct stat stab;
>       char **vec;
>       unsigned int num;
>       char *s;
>       int state;
>       char *sstate;
> +     char *stype;
> +     char *params;
>       char *p;
>       char buf[80];
>       int type;
> @@ -297,11 +300,38 @@ main(int argc, char * const argv[])
>                                   strerror(errno));
>                               goto next2;
>                       }
> -                     doexec(s, vec[XS_WATCH_PATH], sstate);
> +                     doexec(s, vec[XS_WATCH_PATH], sstate, NULL);
>                       break;
>  
>               case DEVTYPE_VBD:
> -                     doexec(vbd_script, vec[XS_WATCH_PATH], sstate);
> +                     /* check if given file is a block device or a raw image 
> */
> +                     snprintf(buf, sizeof(buf), "%s/params", 
> vec[XS_WATCH_PATH]);
> +                     params = xs_read(xs, XBT_NULL, buf, 0);
> +                     if(params == NULL) {
> +                             dolog(LOG_ERR,
> +                                     "Failed to read %s (%s)", buf, 
> strerror(errno));
> +                             goto next2;
> +                     }
> +                     if (stat(params, &stab) < 0) {
> +                             dolog(LOG_ERR,
> +                                     "Failed to get info about %s (%s)", 
> params,
> +                                     strerror(errno));
> +                             goto next3;
> +                     }
> +                     stype = NULL;
> +                     if (S_ISBLK(stab.st_mode))
> +                             stype = "phy";
> +                     if (S_ISREG(stab.st_mode))
> +                             stype = "file";
> +                     if (stype == NULL) {
> +                             dolog(LOG_ERR,
> +                                     "Failed to attach %s (not a block 
> device or raw image)",
> +                                     params, strerror(errno));
> +                             goto next3;
> +                     }
> +                     doexec(vbd_script, vec[XS_WATCH_PATH], sstate, stype);
> +next3:
> +                     free(params);
>                       break;
>  
>               default:
> 
> _______________________________________________
> 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®.