[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] xen_disk: cope with missing xenstore "params" node
From: |
stefano.stabellini |
Subject: |
[Qemu-devel] [PATCH] xen_disk: cope with missing xenstore "params" node |
Date: |
Fri, 24 Jun 2011 15:50:33 +0100 |
From: Stefano Stabellini <address@hidden>
When disk is a cdrom and the drive is empty the "params" node in
xenstore might be missing completely: cope with it instead of
segfaulting.
Signed-off-by: Stefano Stabellini <address@hidden>
---
hw/xen_disk.c | 16 +++++++++++-----
1 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/hw/xen_disk.c b/hw/xen_disk.c
index 096d1c9..801da58 100644
--- a/hw/xen_disk.c
+++ b/hw/xen_disk.c
@@ -616,11 +616,13 @@ static int blk_init(struct XenDevice *xendev)
{
struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev);
int index, qflags, have_barriers, info = 0;
- char *h;
+ char *h = NULL;
/* read xenstore entries */
if (blkdev->params == NULL) {
blkdev->params = xenstore_read_be_str(&blkdev->xendev, "params");
+ if (blkdev->params != NULL)
+ h = strchr(blkdev->params, ':');
h = strchr(blkdev->params, ':');
if (h != NULL) {
blkdev->fileproto = blkdev->params;
@@ -672,11 +674,15 @@ static int blk_init(struct XenDevice *xendev)
/* setup via xenbus -> create new block driver instance */
xen_be_printf(&blkdev->xendev, 2, "create new bdrv (xenbus setup)\n");
blkdev->bs = bdrv_new(blkdev->dev);
- if (bdrv_open(blkdev->bs, blkdev->filename, qflags,
- bdrv_find_whitelisted_format(blkdev->fileproto)) != 0) {
- bdrv_delete(blkdev->bs);
- return -1;
+ if (blkdev->bs) {
+ if (bdrv_open(blkdev->bs, blkdev->filename, qflags,
+ bdrv_find_whitelisted_format(blkdev->fileproto)) != 0)
{
+ bdrv_delete(blkdev->bs);
+ blkdev->bs = NULL;
+ }
}
+ if (!blkdev->bs)
+ return -1;
} else {
/* setup via qemu cmdline -> already setup for us */
xen_be_printf(&blkdev->xendev, 2, "get configured bdrv (cmdline
setup)\n");
--
1.7.2.3
- [Qemu-devel] [PATCH] xen_disk: cope with missing xenstore "params" node,
stefano.stabellini <=
- [Qemu-devel] [PATCH] xen_disk: treat "aio" as "raw", stefano.stabellini, 2011/06/24
- Re: [Qemu-devel] [PATCH] xen_disk: treat "aio" as "raw", Alexander Graf, 2011/06/30
- Re: [Qemu-devel] [PATCH] xen_disk: treat "aio" as "raw", Kevin Wolf, 2011/06/30
- Re: [Qemu-devel] [PATCH] xen_disk: treat "aio" as "raw", Alexander Graf, 2011/06/30
- Re: [Qemu-devel] [PATCH] xen_disk: treat "aio" as "raw", Stefano Stabellini, 2011/06/30
- Re: [Qemu-devel] [PATCH] xen_disk: treat "aio" as "raw", Alexander Graf, 2011/06/30
- Re: [Qemu-devel] [PATCH] xen_disk: treat "aio" as "raw", Stefano Stabellini, 2011/06/30
Re: [Qemu-devel] [PATCH] xen_disk: cope with missing xenstore "params" node, Peter Maydell, 2011/06/24