All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0 of 6 RESENT] A bunch of fixes for libxl
@ 2011-06-05 16:50 Marek Marczykowski
  2011-06-05 16:50 ` [PATCH 1 of 6 RESENT] libxl: Remove frontend and backend devices from xenstore after destroy Marek Marczykowski
                   ` (5 more replies)
  0 siblings, 6 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-05 16:50 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

A bunch of simple fixes for libxl. Most of them fixes SEGV or other annoying
bugs.

This time for xen-unstable tree - only part of previous patches are applicable.
All of them should be also backported to xen-4.1-testing tree (bugfixes).

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 1 of 6 RESENT] libxl: Remove frontend and backend devices from xenstore after destroy
  2011-06-05 16:50 [PATCH 0 of 6 RESENT] A bunch of fixes for libxl Marek Marczykowski
@ 2011-06-05 16:50 ` Marek Marczykowski
  2011-06-06 10:00   ` Ian Campbell
  2011-06-05 16:50 ` [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk Marek Marczykowski
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-05 16:50 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307143993 -7200
# Node ID c32797243a6ba61dd2942a0307151e42fb7bf157
# Parent  37c77bacb52aa7795978b994f9d371b979b2cb07
libxl: Remove frontend and backend devices from xenstore after destroy

Cleanup frontend and backend devices from xenstore for all dev types - not only
disks. Because backend cleanup moved to libxl__device_destroy,
libxl__devices_destroy is somehow simpler.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff -r 37c77bacb52a -r c32797243a6b tools/libxl/libxl.c
--- a/tools/libxl/libxl.c	Mon May 23 17:38:28 2011 +0100
+++ b/tools/libxl/libxl.c	Sat Jun 04 01:33:13 2011 +0200
@@ -1105,8 +1105,6 @@ int libxl_device_disk_del(libxl_ctx *ctx
     device.devid            = devid;
     device.kind             = DEVICE_VBD;
     rc = libxl__device_del(&gc, &device, wait);
-    xs_rm(ctx->xsh, XBT_NULL, libxl__device_backend_path(&gc, &device));
-    xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(&gc, &device));
 out_free:
     libxl__free_all(&gc);
     return rc;
diff -r 37c77bacb52a -r c32797243a6b tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c	Mon May 23 17:38:28 2011 +0100
+++ b/tools/libxl/libxl_device.c	Sat Jun 04 01:33:13 2011 +0200
@@ -272,6 +272,8 @@ retry_transaction:
     if (!force) {
         xs_watch(ctx->xsh, state_path, be_path);
         rc = 1;
+    } else {
+        xs_rm(ctx->xsh, XBT_NULL, be_path);
     }
 out:
     return rc;
@@ -311,10 +313,8 @@ int libxl__devices_destroy(libxl__gc *gc
     char *path, *be_path, *fe_path;
     unsigned int num1, num2;
     char **l1 = NULL, **l2 = NULL;
-    int i, j, n = 0, n_watches = 0;
-    flexarray_t *toremove;
+    int i, j, n_watches = 0;
 
-    toremove = flexarray_make(16, 1);
     path = libxl__sprintf(gc, "/local/domain/%d/device", domid);
     l1 = libxl__xs_directory(gc, XBT_NULL, path, &num1);
     if (!l1) {
@@ -338,7 +338,6 @@ int libxl__devices_destroy(libxl__gc *gc
             if (be_path != NULL) {
                 if (libxl__device_destroy(gc, be_path, force) > 0)
                     n_watches++;
-                flexarray_set(toremove, n++, libxl__dirname(gc, be_path));
             } else {
                 xs_rm(ctx->xsh, XBT_NULL, path);
             }
@@ -351,7 +350,6 @@ int libxl__devices_destroy(libxl__gc *gc
     if (be_path && strcmp(be_path, "")) {
         if (libxl__device_destroy(gc, be_path, force) > 0)
             n_watches++;
-        flexarray_set(toremove, n++, libxl__dirname(gc, be_path));
     }
 
     if (!force) {
@@ -371,17 +369,13 @@ int libxl__devices_destroy(libxl__gc *gc
             }
         }
     }
-    for (i = 0; i < n; i++) {
-        flexarray_get(toremove, i, (void**) &path);
-        xs_rm(ctx->xsh, XBT_NULL, path);
-    }
 out:
-    flexarray_free(toremove);
     return 0;
 }
 
 int libxl__device_del(libxl__gc *gc, libxl__device *dev, int wait)
 {
+    libxl_ctx *ctx = libxl__gc_owner(gc);
     char *backend_path;
     int rc;
 
@@ -400,6 +394,7 @@ int libxl__device_del(libxl__gc *gc, lib
         (void)wait_for_dev_destroy(gc, &tv);
     }
 
+    xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(gc, dev));
     rc = 0;
 
 out:

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk
  2011-06-05 16:50 [PATCH 0 of 6 RESENT] A bunch of fixes for libxl Marek Marczykowski
  2011-06-05 16:50 ` [PATCH 1 of 6 RESENT] libxl: Remove frontend and backend devices from xenstore after destroy Marek Marczykowski
@ 2011-06-05 16:50 ` Marek Marczykowski
  2011-06-06 11:24   ` Ian Campbell
  2011-06-05 16:50 ` [PATCH 3 of 6 RESENT] libxl: Allocate memory for strings in libxl_device_disk Marek Marczykowski
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-05 16:50 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1306962929 -7200
# Node ID 5231fa19f3e39091ff29e2a6dca057ca54403092
# Parent  c32797243a6ba61dd2942a0307151e42fb7bf157
libxl: Accept disk name in libxl_devid_to_device_disk

Accept disk name in xl block-detach.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff -r c32797243a6b -r 5231fa19f3e3 tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c	Sat Jun 04 01:33:13 2011 +0200
+++ b/tools/libxl/libxl_device.c	Wed Jun 01 23:15:29 2011 +0200
@@ -198,7 +198,7 @@ static int device_virtdisk_matches(const
     return 1;
 }
 
-int libxl__device_disk_dev_number(char *virtpath, int *pdisk, int *ppartition)
+int libxl__device_disk_dev_number(const char *virtpath, int *pdisk, int *ppartition)
 {
     int disk, partition;
     char *ep;
diff -r c32797243a6b -r 5231fa19f3e3 tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h	Sat Jun 04 01:33:13 2011 +0200
+++ b/tools/libxl/libxl_internal.h	Wed Jun 01 23:15:29 2011 +0200
@@ -205,7 +205,7 @@ _hidden char *libxl__device_disk_string_
 _hidden char *libxl__device_disk_string_of_format(libxl_disk_format format);
 
 _hidden int libxl__device_physdisk_major_minor(const char *physpath, int *major, int *minor);
-_hidden int libxl__device_disk_dev_number(char *virtpath,
+_hidden int libxl__device_disk_dev_number(const char *virtpath,
                                           int *pdisk, int *ppartition);
 
 _hidden int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
diff -r c32797243a6b -r 5231fa19f3e3 tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c	Sat Jun 04 01:33:13 2011 +0200
+++ b/tools/libxl/libxl_utils.c	Wed Jun 01 23:15:29 2011 +0200
@@ -530,18 +530,18 @@ int libxl_devid_to_device_disk(libxl_ctx
                                const char *devid, libxl_device_disk *disk)
 {
     libxl__gc gc = LIBXL_INIT_GC(ctx);
-    char *endptr, *val;
+    char *val;
     char *dompath, *diskpath, *be_path;
     unsigned int devid_n;
     int rc = ERROR_INVAL;
 
-    devid_n = strtoul(devid, &endptr, 10);
-    if (devid == endptr) {
+    devid_n = libxl__device_disk_dev_number(devid, NULL, NULL);
+    if (devid_n < 0) {
         goto out;
     }
     rc = ERROR_FAIL;
     dompath = libxl__xs_get_dompath(&gc, domid);
-    diskpath = libxl__sprintf(&gc, "%s/device/vbd/%s", dompath, devid);
+    diskpath = libxl__sprintf(&gc, "%s/device/vbd/%d", dompath, devid_n);
     if (!diskpath) {
         goto out;
     }

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 3 of 6 RESENT] libxl: Allocate memory for strings in libxl_device_disk
  2011-06-05 16:50 [PATCH 0 of 6 RESENT] A bunch of fixes for libxl Marek Marczykowski
  2011-06-05 16:50 ` [PATCH 1 of 6 RESENT] libxl: Remove frontend and backend devices from xenstore after destroy Marek Marczykowski
  2011-06-05 16:50 ` [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk Marek Marczykowski
@ 2011-06-05 16:50 ` Marek Marczykowski
  2011-06-06 11:24   ` Ian Campbell
  2011-06-27 16:25   ` Ian Jackson
  2011-06-05 16:50 ` [PATCH 4 of 6 RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param") Marek Marczykowski
                   ` (2 subsequent siblings)
  5 siblings, 2 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-05 16:50 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1306962954 -7200
# Node ID 9fe949c7ab9601bb5500a53c538f7a23b61e1bcb
# Parent  5231fa19f3e39091ff29e2a6dca057ca54403092
libxl: Allocate memory for strings in libxl_device_disk

Memory for strings in libxl_device_disk must be allocated from outside of
libxl__gc to not be freed at the end of function (by libxl__free_all).

Fixes xl block-detach

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff -r 5231fa19f3e3 -r 9fe949c7ab96 tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c	Wed Jun 01 23:15:29 2011 +0200
+++ b/tools/libxl/libxl_utils.c	Wed Jun 01 23:15:54 2011 +0200
@@ -551,10 +551,10 @@ int libxl_devid_to_device_disk(libxl_ctx
         goto out;
     disk->backend_domid = strtoul(val, NULL, 10);
     be_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/backend", diskpath));
-    disk->pdev_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/params", be_path));
+    disk->pdev_path = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, "%s/params", be_path), NULL);
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", be_path));
     libxl_string_to_backend(ctx, val, &(disk->backend));
-    disk->vdev = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/dev", be_path));
+    disk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, "%s/dev", be_path), NULL);
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/removable", be_path));
     disk->unpluggable = !strcmp(val, "1");
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/mode", be_path));

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 4 of 6 RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")
  2011-06-05 16:50 [PATCH 0 of 6 RESENT] A bunch of fixes for libxl Marek Marczykowski
                   ` (2 preceding siblings ...)
  2011-06-05 16:50 ` [PATCH 3 of 6 RESENT] libxl: Allocate memory for strings in libxl_device_disk Marek Marczykowski
@ 2011-06-05 16:50 ` Marek Marczykowski
  2011-06-07 12:02   ` Stefano Stabellini
  2011-06-05 16:50 ` [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name Marek Marczykowski
  2011-06-05 16:50 ` [PATCH 6 of 6 RESENT] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski
  5 siblings, 1 reply; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-05 16:50 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307145042 -7200
# Node ID 0863dfd23b3a10bee6d3eda30415dff0eef2bee1
# Parent  9fe949c7ab9601bb5500a53c538f7a23b61e1bcb
xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")

'script=' length was wrong... Replaced calls to strncmp("param", *argv,
explicit sizeof("param")) with macro and helper function to extract parameter
value. Also introduce replace_string function to simplify code.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff -r 9fe949c7ab96 -r 0863dfd23b3a tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c	Wed Jun 01 23:15:54 2011 +0200
+++ b/tools/libxl/xl_cmdimpl.c	Sat Jun 04 01:50:42 2011 +0200
@@ -1229,6 +1229,24 @@ static int handle_domain_death(libxl_ctx
     return restart;
 }
 
+/* for now used only by main_networkattach, but can be reused elsewhere */
+static int match_option_size(const char *prefix, size_t len,
+        char *arg, char **argopt)
+{
+    int rc = strncmp(prefix, arg, len);
+    if (!rc) *argopt = arg+len;
+    return !rc;
+}
+#define match_option(_prefix, _arg, _oparg) \
+    match_option_size((_prefix "="), sizeof((_prefix)) + 1, (_arg), &(_oparg))
+
+static void replace_string(char **str, const char *val)
+{
+    free(*str);
+    *str = strdup(val);
+}
+
+
 static int preserve_domain(libxl_ctx *ctx, uint32_t domid, libxl_event *event,
                            libxl_domain_config *d_config, libxl_dominfo *info)
 {
@@ -3925,7 +3943,7 @@ int main_networkattach(int argc, char **
 {
     int opt;
     libxl_device_nic nic;
-    char *endptr;
+    char *endptr, *oparg;
     const char *tok;
     int i;
     unsigned int val;
@@ -3944,17 +3962,17 @@ int main_networkattach(int argc, char **
     }
     libxl_device_nic_init(&nic, -1);
     for (argv += optind+1, argc -= optind+1; argc > 0; ++argv, --argc) {
-        if (!strncmp("type=", *argv, 5)) {
-            if (!strncmp("vif", (*argv) + 5, 4)) {
+        if (match_option("type", *argv, oparg)) {
+            if (!strcmp("vif", oparg)) {
                 nic.nictype = LIBXL_NIC_TYPE_VIF;
-            } else if (!strncmp("ioemu", (*argv) + 5, 5)) {
+            } else if (!strcmp("ioemu", oparg)) {
                 nic.nictype = LIBXL_NIC_TYPE_IOEMU;
             } else {
                 fprintf(stderr, "Invalid parameter `type'.\n");
                 return 1;
             }
-        } else if (!strncmp("mac=", *argv, 4)) {
-            tok = strtok((*argv) + 4, ":");
+        } else if (match_option("mac", *argv, oparg)) {
+            tok = strtok(oparg, ":");
             for (i = 0; tok && i < 6; tok = strtok(NULL, ":"), ++i) {
                 val = strtoul(tok, &endptr, 16);
                 if ((tok == endptr) || (val > 255)) {
@@ -3963,29 +3981,24 @@ int main_networkattach(int argc, char **
                 }
                 nic.mac[i] = val;
             }
-        } else if (!strncmp("bridge=", *argv, 7)) {
-            free(nic.bridge);
-            nic.bridge = strdup((*argv) + 7);
-        } else if (!strncmp("ip=", *argv, 3)) {
-            free(nic.ip);
-            nic.ip = strdup((*argv) + 3);
-        } else if (!strncmp("script=", *argv, 6)) {
-            free(nic.script);
-            nic.script = strdup((*argv) + 6);
-        } else if (!strncmp("backend=", *argv, 8)) {
-            if(libxl_name_to_domid(ctx, ((*argv) + 8), &val)) {
+        } else if (match_option("bridge", *argv, oparg)) {
+            replace_string(&nic.bridge, oparg);
+        } else if (match_option("ip", *argv, oparg)) {
+            replace_string(&nic.ip, oparg);
+        } else if (match_option("script", *argv, oparg)) {
+            replace_string(&nic.script, oparg);
+        } else if (match_option("backend", *argv, oparg)) {
+            if(libxl_name_to_domid(ctx, oparg, &val)) {
                 fprintf(stderr, "Specified backend domain does not exist, defaulting to Dom0\n");
                 val = 0;
             }
             nic.backend_domid = val;
-        } else if (!strncmp("vifname=", *argv, 8)) {
-            free(nic.ifname);
-            nic.ifname = strdup((*argv) + 8);
-        } else if (!strncmp("model=", *argv, 6)) {
-            free(nic.model);
-            nic.model = strdup((*argv) + 6);
-        } else if (!strncmp("rate=", *argv, 5)) {
-        } else if (!strncmp("accel=", *argv, 6)) {
+        } else if (match_option("vifname", *argv, oparg)) {
+            replace_string(&nic.ifname, oparg);
+        } else if (match_option("model", *argv, oparg)) {
+            replace_string(&nic.model, oparg);
+        } else if (match_option("rate", *argv, oparg)) {
+        } else if (match_option("accel", *argv, oparg)) {
         } else {
             fprintf(stderr, "unrecognized argument `%s'\n", *argv);
             return 1;

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name
  2011-06-05 16:50 [PATCH 0 of 6 RESENT] A bunch of fixes for libxl Marek Marczykowski
                   ` (3 preceding siblings ...)
  2011-06-05 16:50 ` [PATCH 4 of 6 RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param") Marek Marczykowski
@ 2011-06-05 16:50 ` Marek Marczykowski
  2011-06-27 16:34   ` Ian Jackson
       [not found]   ` <19976.45675.438028.965156@mariner.uk.xensource.com>
  2011-06-05 16:50 ` [PATCH 6 of 6 RESENT] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski
  5 siblings, 2 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-05 16:50 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307145131 -7200
# Node ID 0c0f9e1bd14073b5cb1d4f58b6950d16128003fa
# Parent  0863dfd23b3a10bee6d3eda30415dff0eef2bee1
xen.lowlevel.xl: Return None on empty domain name

Previously PyString_FromString(NULL) was called, which caused assertion
failure.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff -r 0863dfd23b3a -r 0c0f9e1bd140 tools/python/xen/lowlevel/xl/xl.c
--- a/tools/python/xen/lowlevel/xl/xl.c	Sat Jun 04 01:50:42 2011 +0200
+++ b/tools/python/xen/lowlevel/xl/xl.c	Sat Jun 04 01:52:11 2011 +0200
@@ -409,14 +409,16 @@ static PyObject *pyxl_domid_to_name(XlOb
 {
     char *domname;
     int domid;
-    PyObject *ret;
+    PyObject *ret = Py_None;
 
     if ( !PyArg_ParseTuple(args, "i", &domid) )
         return NULL;
 
     domname = libxl_domid_to_name(self->ctx, domid);
-    ret = PyString_FromString(domname);
-    free(domname);
+    if (domname) {
+        ret = PyString_FromString(domname);
+        free(domname);
+    }
 
     return ret;
 }

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 6 of 6 RESENT] libxl: Do not SEGV when no 'removable' disk parameter in xenstore
  2011-06-05 16:50 [PATCH 0 of 6 RESENT] A bunch of fixes for libxl Marek Marczykowski
                   ` (4 preceding siblings ...)
  2011-06-05 16:50 ` [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name Marek Marczykowski
@ 2011-06-05 16:50 ` Marek Marczykowski
  2011-06-07 11:57   ` Stefano Stabellini
  5 siblings, 1 reply; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-05 16:50 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307145395 -7200
# Node ID 70fc2a0f0a6003f1bf591cd941a841a9e6b69c01
# Parent  0c0f9e1bd14073b5cb1d4f58b6950d16128003fa
libxl: Do not SEGV when no 'removable' disk parameter in xenstore

Just assume disk as not removable when no 'removable' paremeter

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff -r 0c0f9e1bd140 -r 70fc2a0f0a60 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c	Sat Jun 04 01:52:11 2011 +0200
+++ b/tools/libxl/libxl.c	Sat Jun 04 01:56:35 2011 +0200
@@ -1563,6 +1563,7 @@ static unsigned int libxl__append_disk_l
                              libxl__xs_get_dompath(gc, 0), type, domid);
     dir = libxl__xs_directory(gc, XBT_NULL, be_path, &n);
     if (dir) {
+        char *removable;
         *disks = realloc(*disks, sizeof (libxl_device_disk) * (*ndisks + n));
         pdisk = *disks + *ndisks;
         *ndisks += n;
@@ -1581,6 +1582,11 @@ static unsigned int libxl__append_disk_l
                 &(pdisk->backend));
             pdisk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(gc, "%s/%s/dev", be_path, *dir), &len);
             pdisk->unpluggable = atoi(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir)));
+            removable = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir));
+            if (removable)
+                pdisk->unpluggable = atoi(removable);
+            else
+                pdisk->unpluggable = 0;
             if (!strcmp(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/mode", be_path, *dir)), "w"))
                 pdisk->readwrite = 1;
             else

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 1 of 6 RESENT] libxl: Remove frontend and backend devices from xenstore after destroy
  2011-06-05 16:50 ` [PATCH 1 of 6 RESENT] libxl: Remove frontend and backend devices from xenstore after destroy Marek Marczykowski
@ 2011-06-06 10:00   ` Ian Campbell
  2011-06-27 16:29     ` Ian Jackson
  0 siblings, 1 reply; 34+ messages in thread
From: Ian Campbell @ 2011-06-06 10:00 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

On Sun, 2011-06-05 at 17:50 +0100, Marek Marczykowski wrote:
> # HG changeset patch
> # User Marek Marczykowski <marmarek@mimuw.edu.pl>
> # Date 1307143993 -7200
> # Node ID c32797243a6ba61dd2942a0307151e42fb7bf157
> # Parent  37c77bacb52aa7795978b994f9d371b979b2cb07
> libxl: Remove frontend and backend devices from xenstore after destroy
> 
> Cleanup frontend and backend devices from xenstore for all dev types - not only
> disks. Because backend cleanup moved to libxl__device_destroy,
> libxl__devices_destroy is somehow simpler.
> 
> Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

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

> 
> diff -r 37c77bacb52a -r c32797243a6b tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c	Mon May 23 17:38:28 2011 +0100
> +++ b/tools/libxl/libxl.c	Sat Jun 04 01:33:13 2011 +0200
> @@ -1105,8 +1105,6 @@ int libxl_device_disk_del(libxl_ctx *ctx
>      device.devid            = devid;
>      device.kind             = DEVICE_VBD;
>      rc = libxl__device_del(&gc, &device, wait);
> -    xs_rm(ctx->xsh, XBT_NULL, libxl__device_backend_path(&gc, &device));
> -    xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(&gc, &device));
>  out_free:
>      libxl__free_all(&gc);
>      return rc;
> diff -r 37c77bacb52a -r c32797243a6b tools/libxl/libxl_device.c
> --- a/tools/libxl/libxl_device.c	Mon May 23 17:38:28 2011 +0100
> +++ b/tools/libxl/libxl_device.c	Sat Jun 04 01:33:13 2011 +0200
> @@ -272,6 +272,8 @@ retry_transaction:
>      if (!force) {
>          xs_watch(ctx->xsh, state_path, be_path);
>          rc = 1;
> +    } else {
> +        xs_rm(ctx->xsh, XBT_NULL, be_path);
>      }
>  out:
>      return rc;
> @@ -311,10 +313,8 @@ int libxl__devices_destroy(libxl__gc *gc
>      char *path, *be_path, *fe_path;
>      unsigned int num1, num2;
>      char **l1 = NULL, **l2 = NULL;
> -    int i, j, n = 0, n_watches = 0;
> -    flexarray_t *toremove;
> +    int i, j, n_watches = 0;
>  
> -    toremove = flexarray_make(16, 1);
>      path = libxl__sprintf(gc, "/local/domain/%d/device", domid);
>      l1 = libxl__xs_directory(gc, XBT_NULL, path, &num1);
>      if (!l1) {
> @@ -338,7 +338,6 @@ int libxl__devices_destroy(libxl__gc *gc
>              if (be_path != NULL) {
>                  if (libxl__device_destroy(gc, be_path, force) > 0)
>                      n_watches++;
> -                flexarray_set(toremove, n++, libxl__dirname(gc, be_path));
>              } else {
>                  xs_rm(ctx->xsh, XBT_NULL, path);
>              }
> @@ -351,7 +350,6 @@ int libxl__devices_destroy(libxl__gc *gc
>      if (be_path && strcmp(be_path, "")) {
>          if (libxl__device_destroy(gc, be_path, force) > 0)
>              n_watches++;
> -        flexarray_set(toremove, n++, libxl__dirname(gc, be_path));
>      }
>  
>      if (!force) {
> @@ -371,17 +369,13 @@ int libxl__devices_destroy(libxl__gc *gc
>              }
>          }
>      }
> -    for (i = 0; i < n; i++) {
> -        flexarray_get(toremove, i, (void**) &path);
> -        xs_rm(ctx->xsh, XBT_NULL, path);
> -    }
>  out:
> -    flexarray_free(toremove);
>      return 0;
>  }
>  
>  int libxl__device_del(libxl__gc *gc, libxl__device *dev, int wait)
>  {
> +    libxl_ctx *ctx = libxl__gc_owner(gc);
>      char *backend_path;
>      int rc;
>  
> @@ -400,6 +394,7 @@ int libxl__device_del(libxl__gc *gc, lib
>          (void)wait_for_dev_destroy(gc, &tv);
>      }
>  
> +    xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(gc, dev));
>      rc = 0;
>  
>  out:
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk
  2011-06-05 16:50 ` [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk Marek Marczykowski
@ 2011-06-06 11:24   ` Ian Campbell
  2011-06-06 11:31     ` Ian Campbell
  2011-06-27 16:28     ` [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk [and 1 more messages] Ian Jackson
  0 siblings, 2 replies; 34+ messages in thread
From: Ian Campbell @ 2011-06-06 11:24 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

On Sun, 2011-06-05 at 17:50 +0100, Marek Marczykowski wrote:
> # HG changeset patch
> # User Marek Marczykowski <marmarek@mimuw.edu.pl>
> # Date 1306962929 -7200
> # Node ID 5231fa19f3e39091ff29e2a6dca057ca54403092
> # Parent  c32797243a6ba61dd2942a0307151e42fb7bf157
> libxl: Accept disk name in libxl_devid_to_device_disk
> 
> Accept disk name in xl block-detach.
> 
> Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

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

While reviewing I noticed a path out of libxl__device_disk_dev_number
which would succeed without setting pdisk or ppartition, which would
surprise a caller which provided them. 

I wasn't immediately sure from docs/misc/vbd-interface.txt how to parse
a vdev which is an arbitrary number. Many cases are covered in the
document but there are others (e.g. NetBSD uses small integers iirc)
which I was unsure of. (I expect that document needs expanding to cover
these cases, but I'm not sure what to put...)

For now I just returned an error to prevent a cascading failure.

8<-------------------------------------------------------

# HG changeset patch
# User Ian Campbell <ian.campbell@citrix.com>
# Date 1307359172 -3600
# Node ID b5dfb12aa231c98a4dcf3372d3bf1cf9a85df2a4
# Parent  86009542df09c70ca8b4a95e4dd3de63cf95c9d6
libxl: fail to parse disk vpath if a disk+part number is required but unavailable

libxl__device_disk_dev_number() can parse a virtpath which is an encoded
unsigned long but does not set *pdisk or *ppartition in that case.

Ideally we would parse the number but for now simply fail to prevent cascading
failures.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>

diff -r 86009542df09 -r b5dfb12aa231 tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c	Mon Jun 06 12:11:25 2011 +0100
+++ b/tools/libxl/libxl_device.c	Mon Jun 06 12:19:32 2011 +0100
@@ -222,8 +222,12 @@ int libxl__device_disk_dev_number(char *
 
     errno = 0;
     ul = strtoul(virtpath, &ep, 0);
-    if (!errno && !*ep && ul <= INT_MAX)
+    if (!errno && !*ep && ul <= INT_MAX) {
+        /* FIXME: should parse ul to determine these. */
+        if (pdisk || ppartition)
+            return -1;
         return ul;
+    }
 
     if (device_virtdisk_matches(virtpath, "hd",
                                 &disk, 3,

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 3 of 6 RESENT] libxl: Allocate memory for strings in libxl_device_disk
  2011-06-05 16:50 ` [PATCH 3 of 6 RESENT] libxl: Allocate memory for strings in libxl_device_disk Marek Marczykowski
@ 2011-06-06 11:24   ` Ian Campbell
  2011-06-27 16:25   ` Ian Jackson
  1 sibling, 0 replies; 34+ messages in thread
From: Ian Campbell @ 2011-06-06 11:24 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

On Sun, 2011-06-05 at 17:50 +0100, Marek Marczykowski wrote:
> # HG changeset patch
> # User Marek Marczykowski <marmarek@mimuw.edu.pl>
> # Date 1306962954 -7200
> # Node ID 9fe949c7ab9601bb5500a53c538f7a23b61e1bcb
> # Parent  5231fa19f3e39091ff29e2a6dca057ca54403092
> libxl: Allocate memory for strings in libxl_device_disk
> 
> Memory for strings in libxl_device_disk must be allocated from outside of
> libxl__gc to not be freed at the end of function (by libxl__free_all).
> 
> Fixes xl block-detach
> 
> Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

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

> 
> diff -r 5231fa19f3e3 -r 9fe949c7ab96 tools/libxl/libxl_utils.c
> --- a/tools/libxl/libxl_utils.c	Wed Jun 01 23:15:29 2011 +0200
> +++ b/tools/libxl/libxl_utils.c	Wed Jun 01 23:15:54 2011 +0200
> @@ -551,10 +551,10 @@ int libxl_devid_to_device_disk(libxl_ctx
>          goto out;
>      disk->backend_domid = strtoul(val, NULL, 10);
>      be_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/backend", diskpath));
> -    disk->pdev_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/params", be_path));
> +    disk->pdev_path = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, "%s/params", be_path), NULL);
>      val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", be_path));
>      libxl_string_to_backend(ctx, val, &(disk->backend));
> -    disk->vdev = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/dev", be_path));
> +    disk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, "%s/dev", be_path), NULL);
>      val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/removable", be_path));
>      disk->unpluggable = !strcmp(val, "1");
>      val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/mode", be_path));
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk
  2011-06-06 11:24   ` Ian Campbell
@ 2011-06-06 11:31     ` Ian Campbell
  2011-06-27 16:28     ` [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk [and 1 more messages] Ian Jackson
  1 sibling, 0 replies; 34+ messages in thread
From: Ian Campbell @ 2011-06-06 11:31 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

On Mon, 2011-06-06 at 12:24 +0100, Ian Campbell wrote:
> On Sun, 2011-06-05 at 17:50 +0100, Marek Marczykowski wrote:
> > # HG changeset patch
> > # User Marek Marczykowski <marmarek@mimuw.edu.pl>
> > # Date 1306962929 -7200
> > # Node ID 5231fa19f3e39091ff29e2a6dca057ca54403092
> > # Parent  c32797243a6ba61dd2942a0307151e42fb7bf157
> > libxl: Accept disk name in libxl_devid_to_device_disk
> > 
> > Accept disk name in xl block-detach.
> > 
> > Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>
> 
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
> 
> While reviewing I noticed a path out of libxl__device_disk_dev_number
> which would succeed without setting pdisk or ppartition, which would
> surprise a caller which provided them. 
> 
> I wasn't immediately sure from docs/misc/vbd-interface.txt how to parse
> a vdev which is an arbitrary number. Many cases are covered in the
> document but there are others (e.g. NetBSD uses small integers iirc)
> which I was unsure of. (I expect that document needs expanding to cover
> these cases, but I'm not sure what to put...)

Actually the doc does say:
        To cope with guests which predate this specification we preserve the
        existing facility to specify the xenstore numerical value directly by
        putting a single number (hex, decimal or octal) in the domain config
        file instead of the disk identifier; this number is written directly
        to xenstore (after conversion to the canonical decimal format).

so I guess it is explicit that these values cannot be reliably parsed.

Ian.

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 6 of 6 RESENT] libxl: Do not SEGV when no 'removable' disk parameter in xenstore
  2011-06-05 16:50 ` [PATCH 6 of 6 RESENT] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski
@ 2011-06-07 11:57   ` Stefano Stabellini
  2011-06-07 12:00     ` Marek Marczykowski
  0 siblings, 1 reply; 34+ messages in thread
From: Stefano Stabellini @ 2011-06-07 11:57 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

On Sun, 5 Jun 2011, Marek Marczykowski wrote:
> # HG changeset patch
> # User Marek Marczykowski <marmarek@mimuw.edu.pl>
> # Date 1307145395 -7200
> # Node ID 70fc2a0f0a6003f1bf591cd941a841a9e6b69c01
> # Parent  0c0f9e1bd14073b5cb1d4f58b6950d16128003fa
> libxl: Do not SEGV when no 'removable' disk parameter in xenstore
> 
> Just assume disk as not removable when no 'removable' paremeter
> 
> Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>
> 
> diff -r 0c0f9e1bd140 -r 70fc2a0f0a60 tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c	Sat Jun 04 01:52:11 2011 +0200
> +++ b/tools/libxl/libxl.c	Sat Jun 04 01:56:35 2011 +0200
> @@ -1563,6 +1563,7 @@ static unsigned int libxl__append_disk_l
>                               libxl__xs_get_dompath(gc, 0), type, domid);
>      dir = libxl__xs_directory(gc, XBT_NULL, be_path, &n);
>      if (dir) {
> +        char *removable;
>          *disks = realloc(*disks, sizeof (libxl_device_disk) * (*ndisks + n));
>          pdisk = *disks + *ndisks;
>          *ndisks += n;
> @@ -1581,6 +1582,11 @@ static unsigned int libxl__append_disk_l
>                  &(pdisk->backend));
>              pdisk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(gc, "%s/%s/dev", be_path, *dir), &len);
>              pdisk->unpluggable = atoi(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir)));

shouldn't you be removing this ^ line? 

> +            removable = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir));
> +            if (removable)
> +                pdisk->unpluggable = atoi(removable);
> +            else
> +                pdisk->unpluggable = 0;
>              if (!strcmp(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/mode", be_path, *dir)), "w"))
>                  pdisk->readwrite = 1;
>              else
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 6 of 6 RESENT] libxl: Do not SEGV when no 'removable' disk parameter in xenstore
  2011-06-07 11:57   ` Stefano Stabellini
@ 2011-06-07 12:00     ` Marek Marczykowski
  2011-06-08 10:41       ` [PATCH] " Marek Marczykowski
  2011-06-08 10:42       ` [PATCH RESENTv2] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski
  0 siblings, 2 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-07 12:00 UTC (permalink / raw)
  To: Stefano Stabellini; +Cc: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 2304 bytes --]

On 07.06.2011 13:57, Stefano Stabellini wrote:
> On Sun, 5 Jun 2011, Marek Marczykowski wrote:
>> # HG changeset patch
>> # User Marek Marczykowski <marmarek@mimuw.edu.pl>
>> # Date 1307145395 -7200
>> # Node ID 70fc2a0f0a6003f1bf591cd941a841a9e6b69c01
>> # Parent  0c0f9e1bd14073b5cb1d4f58b6950d16128003fa
>> libxl: Do not SEGV when no 'removable' disk parameter in xenstore
>>
>> Just assume disk as not removable when no 'removable' paremeter
>>
>> Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>
>>
>> diff -r 0c0f9e1bd140 -r 70fc2a0f0a60 tools/libxl/libxl.c
>> --- a/tools/libxl/libxl.c	Sat Jun 04 01:52:11 2011 +0200
>> +++ b/tools/libxl/libxl.c	Sat Jun 04 01:56:35 2011 +0200
>> @@ -1563,6 +1563,7 @@ static unsigned int libxl__append_disk_l
>>                               libxl__xs_get_dompath(gc, 0), type, domid);
>>      dir = libxl__xs_directory(gc, XBT_NULL, be_path, &n);
>>      if (dir) {
>> +        char *removable;
>>          *disks = realloc(*disks, sizeof (libxl_device_disk) * (*ndisks + n));
>>          pdisk = *disks + *ndisks;
>>          *ndisks += n;
>> @@ -1581,6 +1582,11 @@ static unsigned int libxl__append_disk_l
>>                  &(pdisk->backend));
>>              pdisk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(gc, "%s/%s/dev", be_path, *dir), &len);
>>              pdisk->unpluggable = atoi(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir)));
> 
> shouldn't you be removing this ^ line? 

Yes, should be...

> 
>> +            removable = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir));
>> +            if (removable)
>> +                pdisk->unpluggable = atoi(removable);
>> +            else
>> +                pdisk->unpluggable = 0;
>>              if (!strcmp(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/mode", be_path, *dir)), "w"))
>>                  pdisk->readwrite = 1;
>>              else
>>
>>
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xensource.com
>> http://lists.xensource.com/xen-devel
>>


-- 
Pozdrawiam / Best Regards,
Marek Marczykowski         | RLU #390519
marmarek at mimuw edu pl   | xmpp:marmarek at staszic waw pl


[-- Attachment #1.2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 5842 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 4 of 6 RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")
  2011-06-05 16:50 ` [PATCH 4 of 6 RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param") Marek Marczykowski
@ 2011-06-07 12:02   ` Stefano Stabellini
  0 siblings, 0 replies; 34+ messages in thread
From: Stefano Stabellini @ 2011-06-07 12:02 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

On Sun, 5 Jun 2011, Marek Marczykowski wrote:
> # HG changeset patch
> # User Marek Marczykowski <marmarek@mimuw.edu.pl>
> # Date 1307145042 -7200
> # Node ID 0863dfd23b3a10bee6d3eda30415dff0eef2bee1
> # Parent  9fe949c7ab9601bb5500a53c538f7a23b61e1bcb
> xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")
> 
> 'script=' length was wrong... Replaced calls to strncmp("param", *argv,
> explicit sizeof("param")) with macro and helper function to extract parameter
> value. Also introduce replace_string function to simplify code.
> 
> Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

It seems correct to me and makes the code easier to read, so

Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>


> diff -r 9fe949c7ab96 -r 0863dfd23b3a tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c	Wed Jun 01 23:15:54 2011 +0200
> +++ b/tools/libxl/xl_cmdimpl.c	Sat Jun 04 01:50:42 2011 +0200
> @@ -1229,6 +1229,24 @@ static int handle_domain_death(libxl_ctx
>      return restart;
>  }
>  
> +/* for now used only by main_networkattach, but can be reused elsewhere */
> +static int match_option_size(const char *prefix, size_t len,
> +        char *arg, char **argopt)
> +{
> +    int rc = strncmp(prefix, arg, len);
> +    if (!rc) *argopt = arg+len;
> +    return !rc;
> +}
> +#define match_option(_prefix, _arg, _oparg) \
> +    match_option_size((_prefix "="), sizeof((_prefix)) + 1, (_arg), &(_oparg))
> +
> +static void replace_string(char **str, const char *val)
> +{
> +    free(*str);
> +    *str = strdup(val);
> +}
> +
> +
>  static int preserve_domain(libxl_ctx *ctx, uint32_t domid, libxl_event *event,
>                             libxl_domain_config *d_config, libxl_dominfo *info)
>  {
> @@ -3925,7 +3943,7 @@ int main_networkattach(int argc, char **
>  {
>      int opt;
>      libxl_device_nic nic;
> -    char *endptr;
> +    char *endptr, *oparg;
>      const char *tok;
>      int i;
>      unsigned int val;
> @@ -3944,17 +3962,17 @@ int main_networkattach(int argc, char **
>      }
>      libxl_device_nic_init(&nic, -1);
>      for (argv += optind+1, argc -= optind+1; argc > 0; ++argv, --argc) {
> -        if (!strncmp("type=", *argv, 5)) {
> -            if (!strncmp("vif", (*argv) + 5, 4)) {
> +        if (match_option("type", *argv, oparg)) {
> +            if (!strcmp("vif", oparg)) {
>                  nic.nictype = LIBXL_NIC_TYPE_VIF;
> -            } else if (!strncmp("ioemu", (*argv) + 5, 5)) {
> +            } else if (!strcmp("ioemu", oparg)) {
>                  nic.nictype = LIBXL_NIC_TYPE_IOEMU;
>              } else {
>                  fprintf(stderr, "Invalid parameter `type'.\n");
>                  return 1;
>              }
> -        } else if (!strncmp("mac=", *argv, 4)) {
> -            tok = strtok((*argv) + 4, ":");
> +        } else if (match_option("mac", *argv, oparg)) {
> +            tok = strtok(oparg, ":");
>              for (i = 0; tok && i < 6; tok = strtok(NULL, ":"), ++i) {
>                  val = strtoul(tok, &endptr, 16);
>                  if ((tok == endptr) || (val > 255)) {
> @@ -3963,29 +3981,24 @@ int main_networkattach(int argc, char **
>                  }
>                  nic.mac[i] = val;
>              }
> -        } else if (!strncmp("bridge=", *argv, 7)) {
> -            free(nic.bridge);
> -            nic.bridge = strdup((*argv) + 7);
> -        } else if (!strncmp("ip=", *argv, 3)) {
> -            free(nic.ip);
> -            nic.ip = strdup((*argv) + 3);
> -        } else if (!strncmp("script=", *argv, 6)) {
> -            free(nic.script);
> -            nic.script = strdup((*argv) + 6);
> -        } else if (!strncmp("backend=", *argv, 8)) {
> -            if(libxl_name_to_domid(ctx, ((*argv) + 8), &val)) {
> +        } else if (match_option("bridge", *argv, oparg)) {
> +            replace_string(&nic.bridge, oparg);
> +        } else if (match_option("ip", *argv, oparg)) {
> +            replace_string(&nic.ip, oparg);
> +        } else if (match_option("script", *argv, oparg)) {
> +            replace_string(&nic.script, oparg);
> +        } else if (match_option("backend", *argv, oparg)) {
> +            if(libxl_name_to_domid(ctx, oparg, &val)) {
>                  fprintf(stderr, "Specified backend domain does not exist, defaulting to Dom0\n");
>                  val = 0;
>              }
>              nic.backend_domid = val;
> -        } else if (!strncmp("vifname=", *argv, 8)) {
> -            free(nic.ifname);
> -            nic.ifname = strdup((*argv) + 8);
> -        } else if (!strncmp("model=", *argv, 6)) {
> -            free(nic.model);
> -            nic.model = strdup((*argv) + 6);
> -        } else if (!strncmp("rate=", *argv, 5)) {
> -        } else if (!strncmp("accel=", *argv, 6)) {
> +        } else if (match_option("vifname", *argv, oparg)) {
> +            replace_string(&nic.ifname, oparg);
> +        } else if (match_option("model", *argv, oparg)) {
> +            replace_string(&nic.model, oparg);
> +        } else if (match_option("rate", *argv, oparg)) {
> +        } else if (match_option("accel", *argv, oparg)) {
>          } else {
>              fprintf(stderr, "unrecognized argument `%s'\n", *argv);
>              return 1;
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH] libxl: Do not SEGV when no 'removable' disk parameter in xenstore
  2011-06-07 12:00     ` Marek Marczykowski
@ 2011-06-08 10:41       ` Marek Marczykowski
  2011-06-08 10:50         ` Stefano Stabellini
  2011-06-08 10:42       ` [PATCH RESENTv2] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski
  1 sibling, 1 reply; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-08 10:41 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307145395 -7200
# Node ID b2b8fef3732c10f012fc209d2850e80d95471582
# Parent  0c0f9e1bd14073b5cb1d4f58b6950d16128003fa
libxl: Do not SEGV when no 'removable' disk parameter in xenstore

Just assume disk as not removable when no 'removable' paremeter

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -1563,6 +1563,7 @@ static unsigned int libxl__append_disk_l
                              libxl__xs_get_dompath(gc, 0), type, domid);
     dir = libxl__xs_directory(gc, XBT_NULL, be_path, &n);
     if (dir) {
+        char *removable;
         *disks = realloc(*disks, sizeof (libxl_device_disk) * (*ndisks + n));
         pdisk = *disks + *ndisks;
         *ndisks += n;
@@ -1580,7 +1581,11 @@ static unsigned int libxl__append_disk_l
                 libxl__sprintf(gc, "%s/%s/type", be_path, *dir)), 
                 &(pdisk->backend));
             pdisk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(gc, "%s/%s/dev", be_path, *dir), &len);
-            pdisk->unpluggable = atoi(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir)));
+            removable = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir));
+            if (removable)
+                pdisk->unpluggable = atoi(removable);
+            else
+                pdisk->unpluggable = 0;
             if (!strcmp(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/mode", be_path, *dir)), "w"))
                 pdisk->readwrite = 1;
             else

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH RESENTv2] libxl: Do not SEGV when no 'removable' disk parameter in xenstore
  2011-06-07 12:00     ` Marek Marczykowski
  2011-06-08 10:41       ` [PATCH] " Marek Marczykowski
@ 2011-06-08 10:42       ` Marek Marczykowski
  1 sibling, 0 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-08 10:42 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307145395 -7200
# Node ID b2b8fef3732c10f012fc209d2850e80d95471582
# Parent  0c0f9e1bd14073b5cb1d4f58b6950d16128003fa
libxl: Do not SEGV when no 'removable' disk parameter in xenstore

Just assume disk as not removable when no 'removable' paremeter

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -1563,6 +1563,7 @@ static unsigned int libxl__append_disk_l
                              libxl__xs_get_dompath(gc, 0), type, domid);
     dir = libxl__xs_directory(gc, XBT_NULL, be_path, &n);
     if (dir) {
+        char *removable;
         *disks = realloc(*disks, sizeof (libxl_device_disk) * (*ndisks + n));
         pdisk = *disks + *ndisks;
         *ndisks += n;
@@ -1580,7 +1581,11 @@ static unsigned int libxl__append_disk_l
                 libxl__sprintf(gc, "%s/%s/type", be_path, *dir)), 
                 &(pdisk->backend));
             pdisk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(gc, "%s/%s/dev", be_path, *dir), &len);
-            pdisk->unpluggable = atoi(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir)));
+            removable = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir));
+            if (removable)
+                pdisk->unpluggable = atoi(removable);
+            else
+                pdisk->unpluggable = 0;
             if (!strcmp(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/mode", be_path, *dir)), "w"))
                 pdisk->readwrite = 1;
             else

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH] libxl: Do not SEGV when no 'removable' disk parameter in xenstore
  2011-06-08 10:41       ` [PATCH] " Marek Marczykowski
@ 2011-06-08 10:50         ` Stefano Stabellini
  2011-06-27 16:37           ` [PATCH] libxl: Do not SEGV when no 'removable' disk parameter in xenstore [and 1 more messages] Ian Jackson
  0 siblings, 1 reply; 34+ messages in thread
From: Stefano Stabellini @ 2011-06-08 10:50 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

On Wed, 8 Jun 2011, Marek Marczykowski wrote:
> # HG changeset patch
> # User Marek Marczykowski <marmarek@mimuw.edu.pl>
> # Date 1307145395 -7200
> # Node ID b2b8fef3732c10f012fc209d2850e80d95471582
> # Parent  0c0f9e1bd14073b5cb1d4f58b6950d16128003fa
> libxl: Do not SEGV when no 'removable' disk parameter in xenstore
> 
> Just assume disk as not removable when no 'removable' paremeter
> 
> Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>
> 

Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -1563,6 +1563,7 @@ static unsigned int libxl__append_disk_l
>                               libxl__xs_get_dompath(gc, 0), type, domid);
>      dir = libxl__xs_directory(gc, XBT_NULL, be_path, &n);
>      if (dir) {
> +        char *removable;
>          *disks = realloc(*disks, sizeof (libxl_device_disk) * (*ndisks + n));
>          pdisk = *disks + *ndisks;
>          *ndisks += n;
> @@ -1580,7 +1581,11 @@ static unsigned int libxl__append_disk_l
>                  libxl__sprintf(gc, "%s/%s/type", be_path, *dir)), 
>                  &(pdisk->backend));
>              pdisk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(gc, "%s/%s/dev", be_path, *dir), &len);
> -            pdisk->unpluggable = atoi(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir)));
> +            removable = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/removable", be_path, *dir));
> +            if (removable)
> +                pdisk->unpluggable = atoi(removable);
> +            else
> +                pdisk->unpluggable = 0;
>              if (!strcmp(libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/%s/mode", be_path, *dir)), "w"))
>                  pdisk->readwrite = 1;
>              else
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 3 of 6 RESENT] libxl: Allocate memory for strings in libxl_device_disk
  2011-06-05 16:50 ` [PATCH 3 of 6 RESENT] libxl: Allocate memory for strings in libxl_device_disk Marek Marczykowski
  2011-06-06 11:24   ` Ian Campbell
@ 2011-06-27 16:25   ` Ian Jackson
  1 sibling, 0 replies; 34+ messages in thread
From: Ian Jackson @ 2011-06-27 16:25 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

Marek Marczykowski writes ("[Xen-devel] [PATCH 3 of 6 RESENT] libxl: Allocate memory for strings in libxl_device_disk"):
> libxl: Allocate memory for strings in libxl_device_disk
> 
> Memory for strings in libxl_device_disk must be allocated from outside of
> libxl__gc to not be freed at the end of function (by libxl__free_all).
> 
> Fixes xl block-detach

Applied, thanks (long lines fixed up).

Ian.

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk [and 1 more messages]
  2011-06-06 11:24   ` Ian Campbell
  2011-06-06 11:31     ` Ian Campbell
@ 2011-06-27 16:28     ` Ian Jackson
  1 sibling, 0 replies; 34+ messages in thread
From: Ian Jackson @ 2011-06-27 16:28 UTC (permalink / raw)
  To: Marek Marczykowski, Ian Campbell; +Cc: xen-devel

Marek Marczykowski writes ("[Xen-devel] [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk"):
> libxl: Accept disk name in libxl_devid_to_device_disk

Applied, thanks (long lines fixed up).

Ian.

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 1 of 6 RESENT] libxl: Remove frontend and backend devices from xenstore after destroy
  2011-06-06 10:00   ` Ian Campbell
@ 2011-06-27 16:29     ` Ian Jackson
  0 siblings, 0 replies; 34+ messages in thread
From: Ian Jackson @ 2011-06-27 16:29 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel, Ian Campbell

Ian Campbell writes ("Re: [Xen-devel] [PATCH 1 of 6 RESENT] libxl: Remove frontend and backend devices from xenstore after destroy"):
> On Sun, 2011-06-05 at 17:50 +0100, Marek Marczykowski wrote:
> > # HG changeset patch
> > # User Marek Marczykowski <marmarek@mimuw.edu.pl>
> > # Date 1307143993 -7200
> > # Node ID c32797243a6ba61dd2942a0307151e42fb7bf157
> > # Parent  37c77bacb52aa7795978b994f9d371b979b2cb07
> > libxl: Remove frontend and backend devices from xenstore after destroy
> > 
> > Cleanup frontend and backend devices from xenstore for all dev types - not only
> > disks. Because backend cleanup moved to libxl__device_destroy,
> > libxl__devices_destroy is somehow simpler.
> > 
> > Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>
> 
> Acked-by: Ian Campbell <ian.campbell@citrix.com>

Applied, thanks.

Ian.

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name
  2011-06-05 16:50 ` [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name Marek Marczykowski
@ 2011-06-27 16:34   ` Ian Jackson
       [not found]   ` <19976.45675.438028.965156@mariner.uk.xensource.com>
  1 sibling, 0 replies; 34+ messages in thread
From: Ian Jackson @ 2011-06-27 16:34 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

Marek Marczykowski writes ("[Xen-devel] [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name"):
> xen.lowlevel.xl: Return None on empty domain name
> 
> Previously PyString_FromString(NULL) was called, which caused assertion
> failure.
> 
> Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>

I modified it slightly to make the diff and complexity slightly
smaller (since "free(NULL)" is legal).

Ian.

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH] libxl: Do not SEGV when no 'removable' disk parameter in xenstore [and 1 more messages]
  2011-06-08 10:50         ` Stefano Stabellini
@ 2011-06-27 16:37           ` Ian Jackson
  0 siblings, 0 replies; 34+ messages in thread
From: Ian Jackson @ 2011-06-27 16:37 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel, Stefano Stabellini

Marek Marczykowski writes ("[Xen-devel] [PATCH] libxl: Do not SEGV when no 'removable' disk parameter in xenstore"):
> libxl: Do not SEGV when no 'removable' disk parameter in xenstore
> 
> Just assume disk as not removable when no 'removable' paremeter
> 
> Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

Thanks, applied.

(Fixed up conflict due to "unpluggable" rename, fixed up long lines).

Ian.

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Backport libxl bugfixes to 4.1 (was: Re: [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name)
       [not found]   ` <19976.45675.438028.965156@mariner.uk.xensource.com>
@ 2011-06-28 21:37     ` Marek Marczykowski
  2011-06-28 21:57       ` Keir Fraser
  2011-06-30 16:47       ` Ian Jackson
  0 siblings, 2 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-06-28 21:37 UTC (permalink / raw)
  To: Ian Jackson, Keir Fraser; +Cc: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 967 bytes --]

On 27.06.2011 18:40, Ian Jackson wrote:
> Right, I think I've dealt with all your outstanding patches now.

Looks good, thanks :)
Keir, can you apply them to 4.1 tree? This require slight modifications,
but all of them are fixing bugs present also in 4.1.

I can also send patches ready for 4.1 tree if it helps.

This is all about:
23607:2f63562df1c4	libxl: Do not SEGV when no 'removable' disk parameter
in xenstoredefault tip
23606:cc2f376d0cd9	xen.lowlevel.xl: Return None on empty domain name
23605:ff8d170852b3	libxl: Remove frontend and backend devices from
xenstore after destroy
23604:5d7998be2252	libxl: Accept disk name in libxl_devid_to_device_disk
23603:6656d80b4de4	libxl: Allocate memory for strings in libxl_device_disk
23602:5c353f53c8e2	xl: Use macros for param parsing in network-attach


-- 
Pozdrawiam / Best Regards,
Marek Marczykowski         | RLU #390519
marmarek at mimuw edu pl   | xmpp:marmarek at staszic waw pl


[-- Attachment #1.2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 5842 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Backport libxl bugfixes to 4.1 (was: Re: [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name)
  2011-06-28 21:37     ` Backport libxl bugfixes to 4.1 (was: Re: [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name) Marek Marczykowski
@ 2011-06-28 21:57       ` Keir Fraser
  2011-06-30 16:47       ` Ian Jackson
  1 sibling, 0 replies; 34+ messages in thread
From: Keir Fraser @ 2011-06-28 21:57 UTC (permalink / raw)
  To: Marek Marczykowski, Ian Jackson; +Cc: xen-devel

On 28/06/2011 22:37, "Marek Marczykowski" <marmarek@mimuw.edu.pl> wrote:

> On 27.06.2011 18:40, Ian Jackson wrote:
>> Right, I think I've dealt with all your outstanding patches now.
> 
> Looks good, thanks :)
> Keir, can you apply them to 4.1 tree? This require slight modifications,
> but all of them are fixing bugs present also in 4.1.

Ian Jackson deals with libxl backports to 4.1.

 -- Keir

> I can also send patches ready for 4.1 tree if it helps.
> 
> This is all about:
> 23607:2f63562df1c4 libxl: Do not SEGV when no 'removable' disk parameter
> in xenstoredefault tip
> 23606:cc2f376d0cd9 xen.lowlevel.xl: Return None on empty domain name
> 23605:ff8d170852b3 libxl: Remove frontend and backend devices from
> xenstore after destroy
> 23604:5d7998be2252 libxl: Accept disk name in libxl_devid_to_device_disk
> 23603:6656d80b4de4 libxl: Allocate memory for strings in libxl_device_disk
> 23602:5c353f53c8e2 xl: Use macros for param parsing in network-attach
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Backport libxl bugfixes to 4.1 (was: Re: [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name)
  2011-06-28 21:37     ` Backport libxl bugfixes to 4.1 (was: Re: [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name) Marek Marczykowski
  2011-06-28 21:57       ` Keir Fraser
@ 2011-06-30 16:47       ` Ian Jackson
  2011-08-25 11:05         ` Ian Jackson
  1 sibling, 1 reply; 34+ messages in thread
From: Ian Jackson @ 2011-06-30 16:47 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: Keir Fraser, xen-devel, Ian Jackson

Marek Marczykowski writes ("Backport libxl bugfixes to 4.1 (was: Re: [Xen-devel] [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name)"):
> On 27.06.2011 18:40, Ian Jackson wrote:
> > Right, I think I've dealt with all your outstanding patches now.
> 
> Looks good, thanks :)
> Keir, can you apply them to 4.1 tree? This require slight modifications,
> but all of them are fixing bugs present also in 4.1.

Can we let it all sit in -unstable for a few weeks ?

> I can also send patches ready for 4.1 tree if it helps.

That would certainly be useful.

> This is all about:
> 23607:2f63562df1c4	libxl: Do not SEGV when no 'removable' disk parameter
> 23606:cc2f376d0cd9	xen.lowlevel.xl: Return None on empty domain name
> 23605:ff8d170852b3	libxl: Remove frontend and backend devices from
> 23604:5d7998be2252	libxl: Accept disk name in libxl_devid_to_device_disk
> 23603:6656d80b4de4	libxl: Allocate memory for strings in libxl_device_disk

Without checking each one, I think these are suitable for backport.

> 23602:5c353f53c8e2	xl: Use macros for param parsing in network-attach

This one isn't, I think ?

Ian.

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Backport libxl bugfixes to 4.1 (was: Re: [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name)
  2011-06-30 16:47       ` Ian Jackson
@ 2011-08-25 11:05         ` Ian Jackson
  2011-08-25 11:12           ` Backport libxl bugfixes to 4.1 Marek Marczykowski
  0 siblings, 1 reply; 34+ messages in thread
From: Ian Jackson @ 2011-08-25 11:05 UTC (permalink / raw)
  To: Ian Jackson; +Cc: Keir Fraser, xen-devel, Marek Marczykowski

Ian Jackson writes ("Backport libxl bugfixes to 4.1 (was: Re: [Xen-devel] [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name)"):
> Marek Marczykowski writes ("Backport libxl bugfixes to 4.1 (was: Re: [Xen-devel] [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name)"):
> > I can also send patches ready for 4.1 tree if it helps.
> 
> That would certainly be useful.
> 
> > This is all about:
> > 23607:2f63562df1c4	libxl: Do not SEGV when no 'removable' disk parameter
> > 23606:cc2f376d0cd9	xen.lowlevel.xl: Return None on empty domain name
> > 23605:ff8d170852b3	libxl: Remove frontend and backend devices from
> > 23604:5d7998be2252	libxl: Accept disk name in libxl_devid_to_device_disk
> > 23603:6656d80b4de4	libxl: Allocate memory for strings in libxl_device_disk
> 
> Without checking each one, I think these are suitable for backport.

Did you send backports for these ?  I think we may have missed them.

Ian.

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Backport libxl bugfixes to 4.1
  2011-08-25 11:05         ` Ian Jackson
@ 2011-08-25 11:12           ` Marek Marczykowski
  2011-08-25 17:13             ` [PATCH 0 of 5] A bunch of fixes for libxl Marek Marczykowski
  0 siblings, 1 reply; 34+ messages in thread
From: Marek Marczykowski @ 2011-08-25 11:12 UTC (permalink / raw)
  To: Ian Jackson; +Cc: xen-devel, Keir Fraser


[-- Attachment #1.1: Type: text/plain, Size: 1214 bytes --]

On 25.08.2011 13:05, Ian Jackson wrote:
> Ian Jackson writes ("Backport libxl bugfixes to 4.1 (was: Re: [Xen-devel] [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name)"):
>> Marek Marczykowski writes ("Backport libxl bugfixes to 4.1 (was: Re: [Xen-devel] [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name)"):
>>> I can also send patches ready for 4.1 tree if it helps.
>>
>> That would certainly be useful.
>>
>>> This is all about:
>>> 23607:2f63562df1c4	libxl: Do not SEGV when no 'removable' disk parameter
>>> 23606:cc2f376d0cd9	xen.lowlevel.xl: Return None on empty domain name
>>> 23605:ff8d170852b3	libxl: Remove frontend and backend devices from
>>> 23604:5d7998be2252	libxl: Accept disk name in libxl_devid_to_device_disk
>>> 23603:6656d80b4de4	libxl: Allocate memory for strings in libxl_device_disk
>>
>> Without checking each one, I think these are suitable for backport.
> 
> Did you send backports for these ?  I think we may have missed them.

Not yet. Will send in near future (today/tomorrow).

-- 
Pozdrawiam / Best Regards,
Marek Marczykowski         | RLU #390519
marmarek at mimuw edu pl   | xmpp:marmarek at staszic waw pl


[-- Attachment #1.2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 5842 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 0 of 5] A bunch of fixes for libxl
  2011-08-25 11:12           ` Backport libxl bugfixes to 4.1 Marek Marczykowski
@ 2011-08-25 17:13             ` Marek Marczykowski
  2011-08-25 17:13               ` [PATCH 1 of 5] libxl: Remove frontend and backend devices from xenstore after destroy Marek Marczykowski
                                 ` (5 more replies)
  0 siblings, 6 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-08-25 17:13 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

Backorted version of patches.

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 1 of 5] libxl: Remove frontend and backend devices from xenstore after destroy
  2011-08-25 17:13             ` [PATCH 0 of 5] A bunch of fixes for libxl Marek Marczykowski
@ 2011-08-25 17:13               ` Marek Marczykowski
  2011-08-25 17:13               ` [PATCH 2 of 5] libxl: Accept disk name in libxl_devid_to_device_disk Marek Marczykowski
                                 ` (4 subsequent siblings)
  5 siblings, 0 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-08-25 17:13 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307285159 -7200
# Node ID 969051f07ee813d2a556f50d37cf59d4e509bf67
# Parent  43acc031eb24945973dffda2b7caf976993bbd5f
libxl: Remove frontend and backend devices from xenstore after destroy

Cleanup frontend and backend devices from xenstore for all dev types - not only
disks. Because backend cleanup moved to libxl__device_destroy,
libxl__devices_destroy is somehow simpler.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c
+++ b/tools/libxl/libxl_device.c
@@ -269,7 +269,9 @@ retry_transaction:
     if (!force) {
         xs_watch(ctx->xsh, state_path, be_path);
         rc = 1;
-    }
+    } else {
+		xs_rm(ctx->xsh, XBT_NULL, be_path);
+	}
 out:
     libxl__free_all(&gc);
     return rc;
@@ -310,10 +312,8 @@ int libxl__devices_destroy(libxl_ctx *ct
     char *path, *be_path, *fe_path;
     unsigned int num1, num2;
     char **l1 = NULL, **l2 = NULL;
-    int i, j, n = 0, n_watches = 0;
-    flexarray_t *toremove;
+    int i, j, n_watches = 0;
 
-    toremove = flexarray_make(16, 1);
     path = libxl__sprintf(&gc, "/local/domain/%d/device", domid);
     l1 = libxl__xs_directory(&gc, XBT_NULL, path, &num1);
     if (!l1) {
@@ -337,7 +337,6 @@ int libxl__devices_destroy(libxl_ctx *ct
             if (be_path != NULL) {
                 if (libxl__device_destroy(ctx, be_path, force) > 0)
                     n_watches++;
-                flexarray_set(toremove, n++, libxl__dirname(&gc, be_path));
             } else {
                 xs_rm(ctx->xsh, XBT_NULL, path);
             }
@@ -350,7 +349,6 @@ int libxl__devices_destroy(libxl_ctx *ct
     if (be_path && strcmp(be_path, "")) {
         if (libxl__device_destroy(ctx, be_path, force) > 0)
             n_watches++;
-        flexarray_set(toremove, n++, libxl__dirname(&gc, be_path));
     }
 
     if (!force) {
@@ -370,12 +368,7 @@ int libxl__devices_destroy(libxl_ctx *ct
             }
         }
     }
-    for (i = 0; i < n; i++) {
-        flexarray_get(toremove, i, (void**) &path);
-        xs_rm(ctx->xsh, XBT_NULL, path);
-    }
 out:
-    flexarray_free(toremove);
     libxl__free_all(&gc);
     return 0;
 }
@@ -401,6 +394,7 @@ int libxl__device_del(libxl_ctx *ctx, li
         (void)wait_for_dev_destroy(ctx, &tv);
     }
 
+    xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(&gc, dev));
     rc = 0;
 
 out:

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 2 of 5] libxl: Accept disk name in libxl_devid_to_device_disk
  2011-08-25 17:13             ` [PATCH 0 of 5] A bunch of fixes for libxl Marek Marczykowski
  2011-08-25 17:13               ` [PATCH 1 of 5] libxl: Remove frontend and backend devices from xenstore after destroy Marek Marczykowski
@ 2011-08-25 17:13               ` Marek Marczykowski
  2011-08-25 17:13               ` [PATCH 3 of 5] libxl: Allocate memory for strings in libxl_device_disk Marek Marczykowski
                                 ` (3 subsequent siblings)
  5 siblings, 0 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-08-25 17:13 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307285297 -7200
# Node ID 8080606fb87a751f7cde4c6a08e3945a21d397b0
# Parent  969051f07ee813d2a556f50d37cf59d4e509bf67
libxl: Accept disk name in libxl_devid_to_device_disk

Accept disk name in xl block-detach.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c
+++ b/tools/libxl/libxl_device.c
@@ -201,7 +201,7 @@ static int device_virtdisk_matches(const
     return 1;
 }
 
-int libxl__device_disk_dev_number(char *virtpath)
+int libxl__device_disk_dev_number(const char *virtpath)
 {
     int disk, partition;
     char *ep;
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -182,7 +182,7 @@ _hidden char *libxl__device_disk_string_
 _hidden char *libxl__device_disk_string_of_format(libxl_disk_format format);
 
 _hidden int libxl__device_physdisk_major_minor(const char *physpath, int *major, int *minor);
-_hidden int libxl__device_disk_dev_number(char *virtpath);
+_hidden int libxl__device_disk_dev_number(const char *virtpath);
 
 _hidden int libxl__device_generic_add(libxl_ctx *ctx, libxl__device *device,
                              char **bents, char **fents);
diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c
+++ b/tools/libxl/libxl_utils.c
@@ -529,18 +529,18 @@ int libxl_devid_to_device_disk(libxl_ctx
                                const char *devid, libxl_device_disk *disk)
 {
     libxl__gc gc = LIBXL_INIT_GC(ctx);
-    char *endptr, *val;
+    char *val;
     char *dompath, *diskpath, *be_path;
     unsigned int devid_n;
     int rc = ERROR_INVAL;
 
-    devid_n = strtoul(devid, &endptr, 10);
-    if (devid == endptr) {
+    devid_n = libxl__device_disk_dev_number(devid);
+    if (devid_n < 0) {
         goto out;
     }
     rc = ERROR_FAIL;
     dompath = libxl__xs_get_dompath(&gc, domid);
-    diskpath = libxl__sprintf(&gc, "%s/device/vbd/%s", dompath, devid);
+    diskpath = libxl__sprintf(&gc, "%s/device/vbd/%d", dompath, devid_n);
     if (!diskpath) {
         goto out;
     }

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 3 of 5] libxl: Allocate memory for strings in libxl_device_disk
  2011-08-25 17:13             ` [PATCH 0 of 5] A bunch of fixes for libxl Marek Marczykowski
  2011-08-25 17:13               ` [PATCH 1 of 5] libxl: Remove frontend and backend devices from xenstore after destroy Marek Marczykowski
  2011-08-25 17:13               ` [PATCH 2 of 5] libxl: Accept disk name in libxl_devid_to_device_disk Marek Marczykowski
@ 2011-08-25 17:13               ` Marek Marczykowski
  2011-08-25 17:13               ` [PATCH 4 of 5] xen.lowlevel.xl: Return None on empty domain name Marek Marczykowski
                                 ` (2 subsequent siblings)
  5 siblings, 0 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-08-25 17:13 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1306962954 -7200
# Node ID aa6e0521bb3853b0e1d90e870220568020929cf5
# Parent  8080606fb87a751f7cde4c6a08e3945a21d397b0
libxl: Allocate memory for strings in libxl_device_disk

Memory for strings in libxl_device_disk must be allocated from outside of
libxl__gc to not be freed at the end of function (by libxl__free_all).

Fixes xl block-detach

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c
+++ b/tools/libxl/libxl_utils.c
@@ -551,10 +551,10 @@ int libxl_devid_to_device_disk(libxl_ctx
     disk->backend_domid = strtoul(val, NULL, 10);
     disk->domid = domid;
     be_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/backend", diskpath));
-    disk->pdev_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/params", be_path));
+    disk->pdev_path = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, "%s/params", be_path), NULL);
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", be_path));
     libxl_string_to_backend(ctx, val, &(disk->backend));
-    disk->vdev = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/dev", be_path));
+    disk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, "%s/dev", be_path), NULL);
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/removable", be_path));
     disk->unpluggable = !strcmp(val, "1");
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/mode", be_path));

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 4 of 5] xen.lowlevel.xl: Return None on empty domain name
  2011-08-25 17:13             ` [PATCH 0 of 5] A bunch of fixes for libxl Marek Marczykowski
                                 ` (2 preceding siblings ...)
  2011-08-25 17:13               ` [PATCH 3 of 5] libxl: Allocate memory for strings in libxl_device_disk Marek Marczykowski
@ 2011-08-25 17:13               ` Marek Marczykowski
  2011-08-25 17:13               ` [PATCH 5 of 5] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski
  2011-08-30 17:19               ` [PATCH 0 of 5] A bunch of fixes for libxl Ian Jackson
  5 siblings, 0 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-08-25 17:13 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307285583 -7200
# Node ID b77de60c85431593d439f2c4ac46023c6f8e5ee2
# Parent  f33981cd7d3df1718123cd364ee91a7bad064283
xen.lowlevel.xl: Return None on empty domain name

Previously PyString_FromString(NULL) was called, which caused assertion
failure.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff --git a/tools/python/xen/lowlevel/xl/xl.c b/tools/python/xen/lowlevel/xl/xl.c
--- a/tools/python/xen/lowlevel/xl/xl.c
+++ b/tools/python/xen/lowlevel/xl/xl.c
@@ -412,14 +412,16 @@ static PyObject *pyxl_domid_to_name(XlOb
 {
     char *domname;
     int domid;
-    PyObject *ret;
+    PyObject *ret = Py_None;
 
     if ( !PyArg_ParseTuple(args, "i", &domid) )
         return NULL;
 
     domname = libxl_domid_to_name(&self->ctx, domid);
-    ret = PyString_FromString(domname);
-    free(domname);
+    if (domname) {
+        ret = PyString_FromString(domname);
+        free(domname);
+    }
 
     return ret;
 }

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH 5 of 5] libxl: Do not SEGV when no 'removable' disk parameter in xenstore
  2011-08-25 17:13             ` [PATCH 0 of 5] A bunch of fixes for libxl Marek Marczykowski
                                 ` (3 preceding siblings ...)
  2011-08-25 17:13               ` [PATCH 4 of 5] xen.lowlevel.xl: Return None on empty domain name Marek Marczykowski
@ 2011-08-25 17:13               ` Marek Marczykowski
  2011-08-30 17:19               ` [PATCH 0 of 5] A bunch of fixes for libxl Ian Jackson
  5 siblings, 0 replies; 34+ messages in thread
From: Marek Marczykowski @ 2011-08-25 17:13 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307285721 -7200
# Node ID fed2015fe1745e5e712380960cc50a71629698fc
# Parent  b77de60c85431593d439f2c4ac46023c6f8e5ee2
libxl: Do not SEGV when no 'removable' disk parameter in xenstore

Just assume disk as not removable when no 'removable' paremeter

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -1724,6 +1724,7 @@ static unsigned int libxl_append_disk_li
                              libxl__xs_get_dompath(&gc, 0), type, domid);
     dir = libxl__xs_directory(&gc, XBT_NULL, be_path, &n);
     if (dir) {
+        char *removable;
         *disks = realloc(*disks, sizeof (libxl_device_disk) * (*ndisks + n));
         pdisk = *disks + *ndisks;
         *ndisks += n;
@@ -1742,7 +1743,11 @@ static unsigned int libxl_append_disk_li
                 libxl__sprintf(&gc, "%s/%s/type", be_path, *dir)), 
                 &(pdisk->backend));
             pdisk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, "%s/%s/dev", be_path, *dir), &len);
-            pdisk->unpluggable = atoi(libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/%s/removable", be_path, *dir)));
+            removable = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/%s/removable", be_path, *dir));
+            if (removable)
+                pdisk->unpluggable = atoi(removable);
+            else
+                pdisk->unpluggable = 0;
             if (!strcmp(libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/%s/mode", be_path, *dir)), "w"))
                 pdisk->readwrite = 1;
             else

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH 0 of 5] A bunch of fixes for libxl
  2011-08-25 17:13             ` [PATCH 0 of 5] A bunch of fixes for libxl Marek Marczykowski
                                 ` (4 preceding siblings ...)
  2011-08-25 17:13               ` [PATCH 5 of 5] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski
@ 2011-08-30 17:19               ` Ian Jackson
  5 siblings, 0 replies; 34+ messages in thread
From: Ian Jackson @ 2011-08-30 17:19 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

Marek Marczykowski writes ("[Xen-devel] [PATCH 0 of 5] A bunch of fixes for libxl"):
> Backorted version of patches.

Applied all 5, thanks.

Ian.

^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2011-08-30 17:19 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-05 16:50 [PATCH 0 of 6 RESENT] A bunch of fixes for libxl Marek Marczykowski
2011-06-05 16:50 ` [PATCH 1 of 6 RESENT] libxl: Remove frontend and backend devices from xenstore after destroy Marek Marczykowski
2011-06-06 10:00   ` Ian Campbell
2011-06-27 16:29     ` Ian Jackson
2011-06-05 16:50 ` [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk Marek Marczykowski
2011-06-06 11:24   ` Ian Campbell
2011-06-06 11:31     ` Ian Campbell
2011-06-27 16:28     ` [PATCH 2 of 6 RESENT] libxl: Accept disk name in libxl_devid_to_device_disk [and 1 more messages] Ian Jackson
2011-06-05 16:50 ` [PATCH 3 of 6 RESENT] libxl: Allocate memory for strings in libxl_device_disk Marek Marczykowski
2011-06-06 11:24   ` Ian Campbell
2011-06-27 16:25   ` Ian Jackson
2011-06-05 16:50 ` [PATCH 4 of 6 RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param") Marek Marczykowski
2011-06-07 12:02   ` Stefano Stabellini
2011-06-05 16:50 ` [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name Marek Marczykowski
2011-06-27 16:34   ` Ian Jackson
     [not found]   ` <19976.45675.438028.965156@mariner.uk.xensource.com>
2011-06-28 21:37     ` Backport libxl bugfixes to 4.1 (was: Re: [PATCH 5 of 6 RESENT] xen.lowlevel.xl: Return None on empty domain name) Marek Marczykowski
2011-06-28 21:57       ` Keir Fraser
2011-06-30 16:47       ` Ian Jackson
2011-08-25 11:05         ` Ian Jackson
2011-08-25 11:12           ` Backport libxl bugfixes to 4.1 Marek Marczykowski
2011-08-25 17:13             ` [PATCH 0 of 5] A bunch of fixes for libxl Marek Marczykowski
2011-08-25 17:13               ` [PATCH 1 of 5] libxl: Remove frontend and backend devices from xenstore after destroy Marek Marczykowski
2011-08-25 17:13               ` [PATCH 2 of 5] libxl: Accept disk name in libxl_devid_to_device_disk Marek Marczykowski
2011-08-25 17:13               ` [PATCH 3 of 5] libxl: Allocate memory for strings in libxl_device_disk Marek Marczykowski
2011-08-25 17:13               ` [PATCH 4 of 5] xen.lowlevel.xl: Return None on empty domain name Marek Marczykowski
2011-08-25 17:13               ` [PATCH 5 of 5] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski
2011-08-30 17:19               ` [PATCH 0 of 5] A bunch of fixes for libxl Ian Jackson
2011-06-05 16:50 ` [PATCH 6 of 6 RESENT] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski
2011-06-07 11:57   ` Stefano Stabellini
2011-06-07 12:00     ` Marek Marczykowski
2011-06-08 10:41       ` [PATCH] " Marek Marczykowski
2011-06-08 10:50         ` Stefano Stabellini
2011-06-27 16:37           ` [PATCH] libxl: Do not SEGV when no 'removable' disk parameter in xenstore [and 1 more messages] Ian Jackson
2011-06-08 10:42       ` [PATCH RESENTv2] libxl: Do not SEGV when no 'removable' disk parameter in xenstore Marek Marczykowski

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.