* [Qemu-devel] [PATCH 0/2] xen: Clean up BlockDriverState use @ 2012-06-05 12:51 Markus Armbruster 2012-06-05 12:51 ` [Qemu-devel] [PATCH 1/2] xen: Don't change -drive if=xen device name during machine init Markus Armbruster 2012-06-05 12:51 ` [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction Markus Armbruster 0 siblings, 2 replies; 12+ messages in thread From: Markus Armbruster @ 2012-06-05 12:51 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf, stefano.stabellini Compile tested only. Stefano, please give it a whirl. Markus Armbruster (2): xen: Don't change -drive if=xen device name during machine init xen: Don't peek behind the BlockDriverState abstraction hw/xen_devconfig.c | 13 ++++++------- hw/xen_disk.c | 5 +++-- 2 files changed, 9 insertions(+), 9 deletions(-) -- 1.7.6.5 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 1/2] xen: Don't change -drive if=xen device name during machine init 2012-06-05 12:51 [Qemu-devel] [PATCH 0/2] xen: Clean up BlockDriverState use Markus Armbruster @ 2012-06-05 12:51 ` Markus Armbruster 2012-06-05 12:51 ` [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction Markus Armbruster 1 sibling, 0 replies; 12+ messages in thread From: Markus Armbruster @ 2012-06-05 12:51 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf, stefano.stabellini A "top" BlockDriverState has a non-empty device_name. If the user doesn't specify one with -drive parameter id, the system supplies a default name. xen_config_dev_blk() changes this name, during machine initialization. Naughty. Don't do that. Signed-off-by: Markus Armbruster <armbru@redhat.com> --- hw/xen_devconfig.c | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) diff --git a/hw/xen_devconfig.c b/hw/xen_devconfig.c index 41accbb..7b7b0a2 100644 --- a/hw/xen_devconfig.c +++ b/hw/xen_devconfig.c @@ -94,16 +94,15 @@ static int xen_config_dev_all(char *fe, char *be) int xen_config_dev_blk(DriveInfo *disk) { - char fe[256], be[256]; + char fe[256], be[256], device_name[32]; int vdev = 202 * 256 + 16 * disk->unit; int cdrom = disk->media_cd; const char *devtype = cdrom ? "cdrom" : "disk"; const char *mode = cdrom ? "r" : "w"; - snprintf(disk->bdrv->device_name, sizeof(disk->bdrv->device_name), - "xvd%c", 'a' + disk->unit); + snprintf(device_name, sizeof(device_name), "xvd%c", 'a' + disk->unit); xen_be_printf(NULL, 1, "config disk %d [%s]: %s\n", - disk->unit, disk->bdrv->device_name, disk->bdrv->filename); + disk->unit, device_name, disk->bdrv->filename); xen_config_dev_dirs("vbd", "qdisk", vdev, fe, be, sizeof(fe)); /* frontend */ @@ -111,7 +110,7 @@ int xen_config_dev_blk(DriveInfo *disk) xenstore_write_str(fe, "device-type", devtype); /* backend */ - xenstore_write_str(be, "dev", disk->bdrv->device_name); + xenstore_write_str(be, "dev", device_name); xenstore_write_str(be, "type", "file"); xenstore_write_str(be, "params", disk->bdrv->filename); xenstore_write_str(be, "mode", mode); -- 1.7.6.5 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-05 12:51 [Qemu-devel] [PATCH 0/2] xen: Clean up BlockDriverState use Markus Armbruster 2012-06-05 12:51 ` [Qemu-devel] [PATCH 1/2] xen: Don't change -drive if=xen device name during machine init Markus Armbruster @ 2012-06-05 12:51 ` Markus Armbruster 2012-06-05 16:59 ` Stefano Stabellini 2012-06-06 11:52 ` Peter Maydell 1 sibling, 2 replies; 12+ messages in thread From: Markus Armbruster @ 2012-06-05 12:51 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf, stefano.stabellini First offender is xen_config_dev_blk()'s use of disk->bdrv->filename. Get the filename from disk->opts instead. Same result, except for snapshots: there, we now get the filename specified by the user instead of the name of the temporary image created by bdrv_open(). Should be an improvement. Second offender is blk_init()'s use of blkdev->bs->drv->format_name. Simply use the appropriate interface to get the format name. Signed-off-by: Markus Armbruster <armbru@redhat.com> --- hw/xen_devconfig.c | 6 +++--- hw/xen_disk.c | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/hw/xen_devconfig.c b/hw/xen_devconfig.c index 7b7b0a2..0928613 100644 --- a/hw/xen_devconfig.c +++ b/hw/xen_devconfig.c @@ -1,6 +1,5 @@ #include "xen_backend.h" #include "blockdev.h" -#include "block_int.h" /* XXX */ /* ------------------------------------------------------------- */ @@ -99,10 +98,11 @@ int xen_config_dev_blk(DriveInfo *disk) int cdrom = disk->media_cd; const char *devtype = cdrom ? "cdrom" : "disk"; const char *mode = cdrom ? "r" : "w"; + const char *filename = qemu_opt_get(disk->opts, "file"); snprintf(device_name, sizeof(device_name), "xvd%c", 'a' + disk->unit); xen_be_printf(NULL, 1, "config disk %d [%s]: %s\n", - disk->unit, device_name, disk->bdrv->filename); + disk->unit, device_name, filename); xen_config_dev_dirs("vbd", "qdisk", vdev, fe, be, sizeof(fe)); /* frontend */ @@ -112,7 +112,7 @@ int xen_config_dev_blk(DriveInfo *disk) /* backend */ xenstore_write_str(be, "dev", device_name); xenstore_write_str(be, "type", "file"); - xenstore_write_str(be, "params", disk->bdrv->filename); + xenstore_write_str(be, "params", filename); xenstore_write_str(be, "mode", mode); /* common stuff */ diff --git a/hw/xen_disk.c b/hw/xen_disk.c index 07594bc..c73b71e 100644 --- a/hw/xen_disk.c +++ b/hw/xen_disk.c @@ -40,7 +40,6 @@ #include <xen/io/xenbus.h> #include "hw.h" -#include "block_int.h" #include "qemu-char.h" #include "xen_blkif.h" #include "xen_backend.h" @@ -554,6 +553,7 @@ static int blk_init(struct XenDevice *xendev) { struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); int index, qflags, info = 0; + char fmt_name[128]; /* read xenstore entries */ if (blkdev->params == NULL) { @@ -634,9 +634,10 @@ static int blk_init(struct XenDevice *xendev) blkdev->file_blk = BLOCK_SIZE; blkdev->file_size = bdrv_getlength(blkdev->bs); if (blkdev->file_size < 0) { + bdrv_get_format(blkdev->bs, fmt_name, sizeof(fmt_name)); xen_be_printf(&blkdev->xendev, 1, "bdrv_getlength: %d (%s) | drv %s\n", (int)blkdev->file_size, strerror(-blkdev->file_size), - blkdev->bs->drv ? blkdev->bs->drv->format_name : "-"); + fmt_name[0] ? fmt_name : "-"); blkdev->file_size = 0; } -- 1.7.6.5 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-05 12:51 ` [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction Markus Armbruster @ 2012-06-05 16:59 ` Stefano Stabellini 2012-06-06 11:39 ` Markus Armbruster 2012-06-06 11:52 ` Peter Maydell 1 sibling, 1 reply; 12+ messages in thread From: Stefano Stabellini @ 2012-06-05 16:59 UTC (permalink / raw) To: Markus Armbruster Cc: kwolf@redhat.com, qemu-devel@nongnu.org, Stefano Stabellini On Tue, 5 Jun 2012, Markus Armbruster wrote: > First offender is xen_config_dev_blk()'s use of disk->bdrv->filename. > Get the filename from disk->opts instead. Same result, except for > snapshots: there, we now get the filename specified by the user > instead of the name of the temporary image created by bdrv_open(). > Should be an improvement. > > Second offender is blk_init()'s use of blkdev->bs->drv->format_name. > Simply use the appropriate interface to get the format name. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > --- > hw/xen_devconfig.c | 6 +++--- > hw/xen_disk.c | 5 +++-- > 2 files changed, 6 insertions(+), 5 deletions(-) > > diff --git a/hw/xen_devconfig.c b/hw/xen_devconfig.c > index 7b7b0a2..0928613 100644 > --- a/hw/xen_devconfig.c > +++ b/hw/xen_devconfig.c > @@ -1,6 +1,5 @@ > #include "xen_backend.h" > #include "blockdev.h" > -#include "block_int.h" /* XXX */ > > /* ------------------------------------------------------------- */ > > @@ -99,10 +98,11 @@ int xen_config_dev_blk(DriveInfo *disk) > int cdrom = disk->media_cd; > const char *devtype = cdrom ? "cdrom" : "disk"; > const char *mode = cdrom ? "r" : "w"; > + const char *filename = qemu_opt_get(disk->opts, "file"); > > snprintf(device_name, sizeof(device_name), "xvd%c", 'a' + disk->unit); > xen_be_printf(NULL, 1, "config disk %d [%s]: %s\n", > - disk->unit, device_name, disk->bdrv->filename); > + disk->unit, device_name, filename); > xen_config_dev_dirs("vbd", "qdisk", vdev, fe, be, sizeof(fe)); > > /* frontend */ > @@ -112,7 +112,7 @@ int xen_config_dev_blk(DriveInfo *disk) > /* backend */ > xenstore_write_str(be, "dev", device_name); > xenstore_write_str(be, "type", "file"); > - xenstore_write_str(be, "params", disk->bdrv->filename); > + xenstore_write_str(be, "params", filename); > xenstore_write_str(be, "mode", mode); > > /* common stuff */ > diff --git a/hw/xen_disk.c b/hw/xen_disk.c > index 07594bc..c73b71e 100644 > --- a/hw/xen_disk.c > +++ b/hw/xen_disk.c > @@ -40,7 +40,6 @@ > #include <xen/io/xenbus.h> > > #include "hw.h" > -#include "block_int.h" > #include "qemu-char.h" > #include "xen_blkif.h" > #include "xen_backend.h" > @@ -554,6 +553,7 @@ static int blk_init(struct XenDevice *xendev) > { > struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); > int index, qflags, info = 0; > + char fmt_name[128]; > > /* read xenstore entries */ > if (blkdev->params == NULL) { > @@ -634,9 +634,10 @@ static int blk_init(struct XenDevice *xendev) > blkdev->file_blk = BLOCK_SIZE; > blkdev->file_size = bdrv_getlength(blkdev->bs); > if (blkdev->file_size < 0) { > + bdrv_get_format(blkdev->bs, fmt_name, sizeof(fmt_name)); > xen_be_printf(&blkdev->xendev, 1, "bdrv_getlength: %d (%s) | drv %s\n", > (int)blkdev->file_size, strerror(-blkdev->file_size), > - blkdev->bs->drv ? blkdev->bs->drv->format_name : "-"); > + fmt_name[0] ? fmt_name : "-"); > blkdev->file_size = 0; > } You might as well move fmt_name here because it is only used if blkdev->file_size < 0. Apart from this minor nitpick, both patches are OK. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-05 16:59 ` Stefano Stabellini @ 2012-06-06 11:39 ` Markus Armbruster 2012-06-06 12:23 ` Stefano Stabellini 0 siblings, 1 reply; 12+ messages in thread From: Markus Armbruster @ 2012-06-06 11:39 UTC (permalink / raw) To: Stefano Stabellini; +Cc: kwolf@redhat.com, qemu-devel@nongnu.org Stefano Stabellini <stefano.stabellini@eu.citrix.com> writes: > On Tue, 5 Jun 2012, Markus Armbruster wrote: >> First offender is xen_config_dev_blk()'s use of disk->bdrv->filename. >> Get the filename from disk->opts instead. Same result, except for >> snapshots: there, we now get the filename specified by the user >> instead of the name of the temporary image created by bdrv_open(). >> Should be an improvement. >> >> Second offender is blk_init()'s use of blkdev->bs->drv->format_name. >> Simply use the appropriate interface to get the format name. >> >> Signed-off-by: Markus Armbruster <armbru@redhat.com> >> --- >> hw/xen_devconfig.c | 6 +++--- >> hw/xen_disk.c | 5 +++-- >> 2 files changed, 6 insertions(+), 5 deletions(-) >> >> diff --git a/hw/xen_devconfig.c b/hw/xen_devconfig.c >> index 7b7b0a2..0928613 100644 >> --- a/hw/xen_devconfig.c >> +++ b/hw/xen_devconfig.c >> @@ -1,6 +1,5 @@ >> #include "xen_backend.h" >> #include "blockdev.h" >> -#include "block_int.h" /* XXX */ >> >> /* ------------------------------------------------------------- */ >> >> @@ -99,10 +98,11 @@ int xen_config_dev_blk(DriveInfo *disk) >> int cdrom = disk->media_cd; >> const char *devtype = cdrom ? "cdrom" : "disk"; >> const char *mode = cdrom ? "r" : "w"; >> + const char *filename = qemu_opt_get(disk->opts, "file"); >> >> snprintf(device_name, sizeof(device_name), "xvd%c", 'a' + disk->unit); >> xen_be_printf(NULL, 1, "config disk %d [%s]: %s\n", >> - disk->unit, device_name, disk->bdrv->filename); >> + disk->unit, device_name, filename); >> xen_config_dev_dirs("vbd", "qdisk", vdev, fe, be, sizeof(fe)); >> >> /* frontend */ >> @@ -112,7 +112,7 @@ int xen_config_dev_blk(DriveInfo *disk) >> /* backend */ >> xenstore_write_str(be, "dev", device_name); >> xenstore_write_str(be, "type", "file"); >> - xenstore_write_str(be, "params", disk->bdrv->filename); >> + xenstore_write_str(be, "params", filename); >> xenstore_write_str(be, "mode", mode); >> >> /* common stuff */ >> diff --git a/hw/xen_disk.c b/hw/xen_disk.c >> index 07594bc..c73b71e 100644 >> --- a/hw/xen_disk.c >> +++ b/hw/xen_disk.c >> @@ -40,7 +40,6 @@ >> #include <xen/io/xenbus.h> >> >> #include "hw.h" >> -#include "block_int.h" >> #include "qemu-char.h" >> #include "xen_blkif.h" >> #include "xen_backend.h" >> @@ -554,6 +553,7 @@ static int blk_init(struct XenDevice *xendev) >> { >> struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); >> int index, qflags, info = 0; >> + char fmt_name[128]; >> >> /* read xenstore entries */ >> if (blkdev->params == NULL) { >> @@ -634,9 +634,10 @@ static int blk_init(struct XenDevice *xendev) >> blkdev->file_blk = BLOCK_SIZE; >> blkdev->file_size = bdrv_getlength(blkdev->bs); >> if (blkdev->file_size < 0) { >> + bdrv_get_format(blkdev->bs, fmt_name, sizeof(fmt_name)); >> xen_be_printf(&blkdev->xendev, 1, "bdrv_getlength: %d (%s) | drv %s\n", >> (int)blkdev->file_size, strerror(-blkdev->file_size), >> - blkdev->bs->drv ? blkdev->bs->drv->format_name : "-"); >> + fmt_name[0] ? fmt_name : "-"); >> blkdev->file_size = 0; >> } > > You might as well move fmt_name here because it is only used if > blkdev->file_size < 0. Matter of taste, and you're the maintainer. Want me to respin? > Apart from this minor nitpick, both patches are OK. Thanks! ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-06 11:39 ` Markus Armbruster @ 2012-06-06 12:23 ` Stefano Stabellini 0 siblings, 0 replies; 12+ messages in thread From: Stefano Stabellini @ 2012-06-06 12:23 UTC (permalink / raw) To: Markus Armbruster Cc: kwolf@redhat.com, qemu-devel@nongnu.org, Stefano Stabellini On Wed, 6 Jun 2012, Markus Armbruster wrote: > Stefano Stabellini <stefano.stabellini@eu.citrix.com> writes: > > On Tue, 5 Jun 2012, Markus Armbruster wrote: > >> First offender is xen_config_dev_blk()'s use of disk->bdrv->filename. > >> Get the filename from disk->opts instead. Same result, except for > >> snapshots: there, we now get the filename specified by the user > >> instead of the name of the temporary image created by bdrv_open(). > >> Should be an improvement. > >> > >> Second offender is blk_init()'s use of blkdev->bs->drv->format_name. > >> Simply use the appropriate interface to get the format name. > >> > >> Signed-off-by: Markus Armbruster <armbru@redhat.com> > >> --- > >> hw/xen_devconfig.c | 6 +++--- > >> hw/xen_disk.c | 5 +++-- > >> 2 files changed, 6 insertions(+), 5 deletions(-) > >> > >> diff --git a/hw/xen_devconfig.c b/hw/xen_devconfig.c > >> index 7b7b0a2..0928613 100644 > >> --- a/hw/xen_devconfig.c > >> +++ b/hw/xen_devconfig.c > >> @@ -1,6 +1,5 @@ > >> #include "xen_backend.h" > >> #include "blockdev.h" > >> -#include "block_int.h" /* XXX */ > >> > >> /* ------------------------------------------------------------- */ > >> > >> @@ -99,10 +98,11 @@ int xen_config_dev_blk(DriveInfo *disk) > >> int cdrom = disk->media_cd; > >> const char *devtype = cdrom ? "cdrom" : "disk"; > >> const char *mode = cdrom ? "r" : "w"; > >> + const char *filename = qemu_opt_get(disk->opts, "file"); > >> > >> snprintf(device_name, sizeof(device_name), "xvd%c", 'a' + disk->unit); > >> xen_be_printf(NULL, 1, "config disk %d [%s]: %s\n", > >> - disk->unit, device_name, disk->bdrv->filename); > >> + disk->unit, device_name, filename); > >> xen_config_dev_dirs("vbd", "qdisk", vdev, fe, be, sizeof(fe)); > >> > >> /* frontend */ > >> @@ -112,7 +112,7 @@ int xen_config_dev_blk(DriveInfo *disk) > >> /* backend */ > >> xenstore_write_str(be, "dev", device_name); > >> xenstore_write_str(be, "type", "file"); > >> - xenstore_write_str(be, "params", disk->bdrv->filename); > >> + xenstore_write_str(be, "params", filename); > >> xenstore_write_str(be, "mode", mode); > >> > >> /* common stuff */ > >> diff --git a/hw/xen_disk.c b/hw/xen_disk.c > >> index 07594bc..c73b71e 100644 > >> --- a/hw/xen_disk.c > >> +++ b/hw/xen_disk.c > >> @@ -40,7 +40,6 @@ > >> #include <xen/io/xenbus.h> > >> > >> #include "hw.h" > >> -#include "block_int.h" > >> #include "qemu-char.h" > >> #include "xen_blkif.h" > >> #include "xen_backend.h" > >> @@ -554,6 +553,7 @@ static int blk_init(struct XenDevice *xendev) > >> { > >> struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); > >> int index, qflags, info = 0; > >> + char fmt_name[128]; > >> > >> /* read xenstore entries */ > >> if (blkdev->params == NULL) { > >> @@ -634,9 +634,10 @@ static int blk_init(struct XenDevice *xendev) > >> blkdev->file_blk = BLOCK_SIZE; > >> blkdev->file_size = bdrv_getlength(blkdev->bs); > >> if (blkdev->file_size < 0) { > >> + bdrv_get_format(blkdev->bs, fmt_name, sizeof(fmt_name)); > >> xen_be_printf(&blkdev->xendev, 1, "bdrv_getlength: %d (%s) | drv %s\n", > >> (int)blkdev->file_size, strerror(-blkdev->file_size), > >> - blkdev->bs->drv ? blkdev->bs->drv->format_name : "-"); > >> + fmt_name[0] ? fmt_name : "-"); > >> blkdev->file_size = 0; > >> } > > > > You might as well move fmt_name here because it is only used if > > blkdev->file_size < 0. > > Matter of taste, and you're the maintainer. Want me to respin? Yes, please :-) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-05 12:51 ` [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction Markus Armbruster 2012-06-05 16:59 ` Stefano Stabellini @ 2012-06-06 11:52 ` Peter Maydell 2012-06-06 12:55 ` Markus Armbruster 1 sibling, 1 reply; 12+ messages in thread From: Peter Maydell @ 2012-06-06 11:52 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefano.stabellini On 5 June 2012 13:51, Markus Armbruster <armbru@redhat.com> wrote: > @@ -554,6 +553,7 @@ static int blk_init(struct XenDevice *xendev) > { > struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); > int index, qflags, info = 0; > + char fmt_name[128]; Fixed length array with a hardcoded magic number size ? If the block layer guarantees that format names are going to be less than 128 bytes it ought to provide a suitable #define for people to set array sizes to... -- PMM ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-06 11:52 ` Peter Maydell @ 2012-06-06 12:55 ` Markus Armbruster 2012-06-07 0:07 ` Peter Maydell 0 siblings, 1 reply; 12+ messages in thread From: Markus Armbruster @ 2012-06-06 12:55 UTC (permalink / raw) To: Peter Maydell; +Cc: kwolf, qemu-devel, stefano.stabellini Peter Maydell <peter.maydell@linaro.org> writes: > On 5 June 2012 13:51, Markus Armbruster <armbru@redhat.com> wrote: >> @@ -554,6 +553,7 @@ static int blk_init(struct XenDevice *xendev) >> { >> struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); >> int index, qflags, info = 0; >> + char fmt_name[128]; > > Fixed length array with a hardcoded magic number size ? > If the block layer guarantees that format names are going to be > less than 128 bytes it ought to provide a suitable #define for > people to set array sizes to... Maybe it should, but it doesn't. Does it really matter in this particular case? If somebody insists on giving his driver a name longer than 127 characters, we'll silently log it truncated, that's all. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-06 12:55 ` Markus Armbruster @ 2012-06-07 0:07 ` Peter Maydell 2012-06-07 8:13 ` Markus Armbruster 0 siblings, 1 reply; 12+ messages in thread From: Peter Maydell @ 2012-06-07 0:07 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefano.stabellini On 6 June 2012 13:55, Markus Armbruster <armbru@redhat.com> wrote: > Peter Maydell <peter.maydell@linaro.org> writes: > >> On 5 June 2012 13:51, Markus Armbruster <armbru@redhat.com> wrote: >>> @@ -554,6 +553,7 @@ static int blk_init(struct XenDevice *xendev) >>> { >>> struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); >>> int index, qflags, info = 0; >>> + char fmt_name[128]; >> >> Fixed length array with a hardcoded magic number size ? >> If the block layer guarantees that format names are going to be >> less than 128 bytes it ought to provide a suitable #define for >> people to set array sizes to... > > Maybe it should, but it doesn't. Does it really matter in this > particular case? If somebody insists on giving his driver a name longer > than 127 characters, we'll silently log it truncated, that's all. I think it matters in the general case, yours is just the first usage of this API which has caught my attention. We should fix the API before adding more uses of it (at the moment it seems to be only used in two places). Alternatively, we could have the function return a const char* rather than taking a buffer to be filled in. -- PMM ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-07 0:07 ` Peter Maydell @ 2012-06-07 8:13 ` Markus Armbruster 2012-06-07 12:49 ` Peter Maydell 0 siblings, 1 reply; 12+ messages in thread From: Markus Armbruster @ 2012-06-07 8:13 UTC (permalink / raw) To: Peter Maydell; +Cc: kwolf, qemu-devel, stefano.stabellini Peter Maydell <peter.maydell@linaro.org> writes: > On 6 June 2012 13:55, Markus Armbruster <armbru@redhat.com> wrote: >> Peter Maydell <peter.maydell@linaro.org> writes: >> >>> On 5 June 2012 13:51, Markus Armbruster <armbru@redhat.com> wrote: >>>> @@ -554,6 +553,7 @@ static int blk_init(struct XenDevice *xendev) >>>> { >>>> struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); >>>> int index, qflags, info = 0; >>>> + char fmt_name[128]; >>> >>> Fixed length array with a hardcoded magic number size ? >>> If the block layer guarantees that format names are going to be >>> less than 128 bytes it ought to provide a suitable #define for >>> people to set array sizes to... >> >> Maybe it should, but it doesn't. Does it really matter in this >> particular case? If somebody insists on giving his driver a name longer >> than 127 characters, we'll silently log it truncated, that's all. > > I think it matters in the general case, yours is just the first > usage of this API which has caught my attention. We should fix > the API before adding more uses of it (at the moment it seems to > be only used in two places). What kind of fix do you have in mind? > Alternatively, we could have the function return a const char* rather > than taking a buffer to be filled in. Trades the theoretical string truncation problem for a theoretical dangling pointer problem. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-07 8:13 ` Markus Armbruster @ 2012-06-07 12:49 ` Peter Maydell 2012-06-13 7:35 ` Markus Armbruster 0 siblings, 1 reply; 12+ messages in thread From: Peter Maydell @ 2012-06-07 12:49 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefano.stabellini On 7 June 2012 09:13, Markus Armbruster <armbru@redhat.com> wrote: > Peter Maydell <peter.maydell@linaro.org> writes: >> I think it matters in the general case, yours is just the first >> usage of this API which has caught my attention. We should fix >> the API before adding more uses of it (at the moment it seems to >> be only used in two places). > > What kind of fix do you have in mind? Option 1: the function should guarantee that it won't ever use more than X bytes of buffer, and provide a #define that corresponds to that maximum length. Option 2: this: vv >> Alternatively, we could have the function return a const char* rather >> than taking a buffer to be filled in. > > Trades the theoretical string truncation problem for a theoretical > dangling pointer problem. Yes, you'd need to come up with some reasonable lifecycle management if you took this option. -- PMM ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction 2012-06-07 12:49 ` Peter Maydell @ 2012-06-13 7:35 ` Markus Armbruster 0 siblings, 0 replies; 12+ messages in thread From: Markus Armbruster @ 2012-06-13 7:35 UTC (permalink / raw) To: Peter Maydell; +Cc: kwolf, qemu-devel, stefano.stabellini Peter Maydell <peter.maydell@linaro.org> writes: > On 7 June 2012 09:13, Markus Armbruster <armbru@redhat.com> wrote: >> Peter Maydell <peter.maydell@linaro.org> writes: >>> I think it matters in the general case, yours is just the first >>> usage of this API which has caught my attention. We should fix >>> the API before adding more uses of it (at the moment it seems to >>> be only used in two places). >> >> What kind of fix do you have in mind? > > Option 1: the function should guarantee that it won't ever > use more than X bytes of buffer, and provide a #define that > corresponds to that maximum length. > > Option 2: this: vv > >>> Alternatively, we could have the function return a const char* rather >>> than taking a buffer to be filled in. >> >> Trades the theoretical string truncation problem for a theoretical >> dangling pointer problem. > > Yes, you'd need to come up with some reasonable lifecycle > management if you took this option. Actually, the lifecycle is trivial, because it's a *driver* name, and drivers never go away. Taking option 2. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2012-06-13 7:35 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-06-05 12:51 [Qemu-devel] [PATCH 0/2] xen: Clean up BlockDriverState use Markus Armbruster 2012-06-05 12:51 ` [Qemu-devel] [PATCH 1/2] xen: Don't change -drive if=xen device name during machine init Markus Armbruster 2012-06-05 12:51 ` [Qemu-devel] [PATCH 2/2] xen: Don't peek behind the BlockDriverState abstraction Markus Armbruster 2012-06-05 16:59 ` Stefano Stabellini 2012-06-06 11:39 ` Markus Armbruster 2012-06-06 12:23 ` Stefano Stabellini 2012-06-06 11:52 ` Peter Maydell 2012-06-06 12:55 ` Markus Armbruster 2012-06-07 0:07 ` Peter Maydell 2012-06-07 8:13 ` Markus Armbruster 2012-06-07 12:49 ` Peter Maydell 2012-06-13 7:35 ` Markus Armbruster
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).