Message ID | 1456428318-8318-3-git-send-email-roger.pau@citrix.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Feb 25, 2016 at 08:25:13PM +0100, Roger Pau Monne wrote: > Linux and NetBSD will return the device major and minor numbers encoded in > hex and separated by a ":". FreeBSD on the other hand returns the path to > the block device or image file. > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> The code looks sensible. Acked-by: Wei Liu <wei.liu2@citrix.com> The acceptance of the patch depends on whether we come to agreement to use the node as proposed in patch #1. > --- > Cc: Ian Jackson <ian.jackson@eu.citrix.com> > Cc: Ian Campbell <ian.campbell@citrix.com> > Cc: Wei Liu <wei.liu2@citrix.com> > --- > tools/libxl/libxl.c | 9 +++++---- > tools/libxl/libxl_freebsd.c | 6 ++++++ > tools/libxl/libxl_internal.h | 6 ++++++ > tools/libxl/libxl_linux.c | 10 ++++++++++ > tools/libxl/libxl_netbsd.c | 10 ++++++++++ > 5 files changed, 37 insertions(+), 4 deletions(-) > > diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c > index 2d18b8d..6d719d7 100644 > --- a/tools/libxl/libxl.c > +++ b/tools/libxl/libxl.c > @@ -2515,10 +2515,11 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, > */ > if (!disk->script && > disk->backend_domid == LIBXL_TOOLSTACK_DOMID) { > - int major, minor; > - if (!libxl__device_physdisk_major_minor(dev, &major, &minor)) > - flexarray_append_pair(back, "physical-device", > - GCSPRINTF("%x:%x", major, minor)); > + char *physdev; > + > + physdev = libxl__get_physical_device(dev); > + if (physdev != NULL) > + flexarray_append_pair(back, "physical-device", physdev); > } > > assert(device->backend_kind == LIBXL__DEVICE_KIND_VBD); > diff --git a/tools/libxl/libxl_freebsd.c b/tools/libxl/libxl_freebsd.c > index 47c3391..483f36e 100644 > --- a/tools/libxl/libxl_freebsd.c > +++ b/tools/libxl/libxl_freebsd.c > @@ -143,3 +143,9 @@ int libxl__pci_topology_init(libxl__gc *gc, > { > return ERROR_NI; > } > + > +char *libxl__get_physical_device(char *dev) > +{ > + No need to have this extra blank line. Wei.
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 2d18b8d..6d719d7 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -2515,10 +2515,11 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, */ if (!disk->script && disk->backend_domid == LIBXL_TOOLSTACK_DOMID) { - int major, minor; - if (!libxl__device_physdisk_major_minor(dev, &major, &minor)) - flexarray_append_pair(back, "physical-device", - GCSPRINTF("%x:%x", major, minor)); + char *physdev; + + physdev = libxl__get_physical_device(dev); + if (physdev != NULL) + flexarray_append_pair(back, "physical-device", physdev); } assert(device->backend_kind == LIBXL__DEVICE_KIND_VBD); diff --git a/tools/libxl/libxl_freebsd.c b/tools/libxl/libxl_freebsd.c index 47c3391..483f36e 100644 --- a/tools/libxl/libxl_freebsd.c +++ b/tools/libxl/libxl_freebsd.c @@ -143,3 +143,9 @@ int libxl__pci_topology_init(libxl__gc *gc, { return ERROR_NI; } + +char *libxl__get_physical_device(char *dev) +{ + + return dev; +} diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 650a958..1a3fa35 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1346,6 +1346,12 @@ void libxl__domaindeathcheck_stop(libxl__gc *gc, libxl__domaindeathcheck *dc); */ _hidden int libxl__try_phy_backend(mode_t st_mode); +/* + * Fetch the "physical-device" backend xenstore field for a local disk + * device. The implementation of this function is OS-specific. + */ +_hidden char *libxl__get_physical_device(char *dev); + _hidden char *libxl__devid_to_localdev(libxl__gc *gc, int devid); diff --git a/tools/libxl/libxl_linux.c b/tools/libxl/libxl_linux.c index be4afc6..7e6d7b9 100644 --- a/tools/libxl/libxl_linux.c +++ b/tools/libxl/libxl_linux.c @@ -347,3 +347,13 @@ int libxl__pci_topology_init(libxl__gc *gc, return err; } + +char *libxl__get_physical_device(char *dev) +{ + int major, minor; + + if (libxl__device_physdisk_major_minor(dev, &major, &minor)) + return NULL; + + return GCSPRINTF("%x:%x", major, minor); +} diff --git a/tools/libxl/libxl_netbsd.c b/tools/libxl/libxl_netbsd.c index 096c057..e12561f 100644 --- a/tools/libxl/libxl_netbsd.c +++ b/tools/libxl/libxl_netbsd.c @@ -100,3 +100,13 @@ int libxl__pci_topology_init(libxl__gc *gc, { return ERROR_NI; } + +char *libxl__get_physical_device(char *dev) +{ + int major, minor; + + if (libxl__device_physdisk_major_minor(dev, &major, &minor)) + return NULL; + + return GCSPRINTF("%x:%x", major, minor); +}
Linux and NetBSD will return the device major and minor numbers encoded in hex and separated by a ":". FreeBSD on the other hand returns the path to the block device or image file. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> --- Cc: Ian Jackson <ian.jackson@eu.citrix.com> Cc: Ian Campbell <ian.campbell@citrix.com> Cc: Wei Liu <wei.liu2@citrix.com> --- tools/libxl/libxl.c | 9 +++++---- tools/libxl/libxl_freebsd.c | 6 ++++++ tools/libxl/libxl_internal.h | 6 ++++++ tools/libxl/libxl_linux.c | 10 ++++++++++ tools/libxl/libxl_netbsd.c | 10 ++++++++++ 5 files changed, 37 insertions(+), 4 deletions(-)