WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 2 of 9] xenbackendd: pass type of block device to hot

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 2 of 9] xenbackendd: pass type of block device to hotplug script
From: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
Date: Fri, 30 Sep 2011 14:43:02 +0200
Delivery-date: Fri, 30 Sep 2011 05:47:31 -0700
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=sender:content-type:mime-version:content-transfer-encoding:subject :x-mercurial-node:message-id:in-reply-to:references:user-agent:date :from:to; bh=EBT5BcTvW+w5QVPsFWvJ6HTNbMiV6h49jgZTeClUQrU=; b=IbGTBV+WE7cdeTVF26OpjhlNehWPiQxKDX2EdwnzlhA+dwJsWmyfSzt4xy0+MDoeqE 8Bche0wjOr6HB2PI/JZu7x7zb2q8pBxYu5gxcW5EOX/IpBjkASBfsdB4EBru+7qEuAnt ugY/+yXnQtWuqSrBvQa2RZH9+/yvafreLLj+8=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1317386580@loki>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1317386580@loki>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.9.2
# HG changeset patch
# User Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
# Date 1317386335 -7200
# Node ID d10abc15d963b00658405be71981f5726e24c0aa
# Parent  47005b3da245e2be052b614c02ed212d3d2cecbd
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>

diff -r 47005b3da245 -r d10abc15d963 tools/hotplug/NetBSD/block
--- a/tools/hotplug/NetBSD/block        Thu Sep 29 14:44:42 2011 +0200
+++ b/tools/hotplug/NetBSD/block        Fri Sep 30 14:38:55 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 47005b3da245 -r d10abc15d963 tools/xenbackendd/xenbackendd.c
--- a/tools/xenbackendd/xenbackendd.c   Thu Sep 29 14:44:42 2011 +0200
+++ b/tools/xenbackendd/xenbackendd.c   Fri Sep 30 14:38:55 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