All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/3] allow online resizing of block devices
@ 2011-01-14 16:20 Christoph Hellwig
  2011-01-14 16:20 ` [Qemu-devel] [PATCH 1/3] block: add resize monitor command Christoph Hellwig
                   ` (3 more replies)
  0 siblings, 4 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-14 16:20 UTC (permalink / raw)
  To: qemu-devel

This patchset adds support for online resizing of block devices.

The first patch adds a new resize monitor command which call into
the existing image resize code.  This is the meat of the series
and probably needs quite a bit of review and help as I'm not sure
about how to implement the error handling for monitor commands
correctly.  Am I really supposed to add a new QERR_ definition
for each possible error?  And if yes how am I supposed to define
them?  The macros for them aren't exactly self-explaining.

The second patch adds a way to tell drivers about a resize, and the
third one adds a guest notification for config changes to virtio-blk
which allows the guest to pick it up without a rescan.  I've just sent
the corresponding Linux guest driver patch to Rusty.

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

* [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-14 16:20 [Qemu-devel] [PATCH 0/3] allow online resizing of block devices Christoph Hellwig
@ 2011-01-14 16:20 ` Christoph Hellwig
  2011-01-17 11:28   ` Stefan Hajnoczi
  2011-01-17 17:36   ` Kevin Wolf
  2011-01-14 16:21 ` [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize Christoph Hellwig
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-14 16:20 UTC (permalink / raw)
  To: qemu-devel

Add a monitor command that allows resizing of block devices while
qemu is running.  It uses the existing bdrv_truncate method already
used by qemu-img to do it's work.  Compared to qemu-img the size
parsing is very simplicistic, but I think having a properly numering
object is more useful for non-humand monitor users than having
the units and relative resize parsing.

For SCSI devices the new size can be updated in Linux guests by
doing the following shell command:

	echo > /sys/class/scsi_device/0:0:0:0/device/rescan

For ATA devices I don't know of a way to update the block device
size in Linux system, and for virtio-blk the next two patches
will provide an automatic update of the size when this command
is issued on the host.

Signed-off-by: Christoph Hellwig <hch@lst.de>

Index: qemu/hmp-commands.hx
===================================================================
--- qemu.orig/hmp-commands.hx	2011-01-14 15:11:48.527004132 +0100
+++ qemu/hmp-commands.hx	2011-01-14 15:40:14.407006506 +0100
@@ -53,6 +53,24 @@ Quit the emulator.
 ETEXI
 
     {
+        .name       = "resize",
+        .args_type  = "id:s,size:l",
+        .params     = "device size",
+        .help       = "resize a block image",
+        .user_print = monitor_user_noop,
+        .mhandler.cmd_new = do_resize,
+    },
+
+STEXI
+@item resize
+@findex resize
+Resize a block image while a guest is running.  Usuaully requires guest
+action to see the updated size.  Resize to a lower size is supported,
+but should be used with extreme caution.
+ETEXI
+
+
+    {
         .name       = "eject",
         .args_type  = "force:-f,device:B",
         .params     = "[-f] device",
Index: qemu/blockdev.c
===================================================================
--- qemu.orig/blockdev.c	2011-01-14 15:11:48.539261151 +0100
+++ qemu/blockdev.c	2011-01-14 15:50:35.604293558 +0100
@@ -700,3 +700,41 @@ int do_drive_del(Monitor *mon, const QDi
 
     return 0;
 }
+
+int do_resize(Monitor *mon, const QDict *qdict, QObject **ret_data)
+{
+    const char *id = qdict_get_str(qdict, "id");
+    int64_t size = qdict_get_int(qdict, "size");
+    BlockDriverState *bs;
+
+    bs = bdrv_find(id);
+    if (!bs) {
+        qerror_report(QERR_DEVICE_NOT_FOUND, id);
+        return -1;
+    }
+
+    if (bdrv_get_type_hint(bs) == BDRV_TYPE_CDROM) {
+        error_report("Can not resize CDROM devices\n");
+        return -1;
+    }
+
+    if (size < 0) {
+        error_report("Can only resize to positive sizes");
+        return -1;
+    }
+
+    switch (bdrv_truncate(bs, size)) {
+    case 0:
+        return 0;
+    case -ENOTSUP:
+        error_report("This image format does not support resize");
+        return -1;
+    case -EACCES:
+        error_report("Image is read-only");
+        return -1;
+    default:
+        error_report("Error resizing image");
+        return -1;
+    }
+}
+
Index: qemu/blockdev.h
===================================================================
--- qemu.orig/blockdev.h	2011-01-14 15:11:48.548263456 +0100
+++ qemu/blockdev.h	2011-01-14 15:12:00.965047363 +0100
@@ -53,5 +53,6 @@ int do_change_block(Monitor *mon, const
                     const char *filename, const char *fmt);
 int do_drive_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
 int do_snapshot_blkdev(Monitor *mon, const QDict *qdict, QObject **ret_data);
+int do_resize(Monitor *mon, const QDict *qdict, QObject **ret_data);
 
 #endif

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

* [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize
  2011-01-14 16:20 [Qemu-devel] [PATCH 0/3] allow online resizing of block devices Christoph Hellwig
  2011-01-14 16:20 ` [Qemu-devel] [PATCH 1/3] block: add resize monitor command Christoph Hellwig
@ 2011-01-14 16:21 ` Christoph Hellwig
  2011-01-14 21:06   ` Ryan Harper
  2011-01-14 16:21 ` [Qemu-devel] [PATCH 3/3] virtio-blk: tell the guest about size changes Christoph Hellwig
  2011-01-18 12:35 ` [Qemu-devel] [PATCH 0/3] allow online resizing of block devices Luiz Capitulino
  3 siblings, 1 reply; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-14 16:21 UTC (permalink / raw)
  To: qemu-devel

Add a new size_changed flag in the BlockDriverState and call the
change_cb callback to notify drivers about a size change.

Signed-off-by: Christoph Hellwig <hch@lst.de>

Index: qemu/block.c
===================================================================
--- qemu.orig/block.c	2011-01-14 17:05:49.527003363 +0100
+++ qemu/block.c	2011-01-14 17:07:23.206255143 +0100
@@ -1135,6 +1135,10 @@ int bdrv_truncate(BlockDriverState *bs,
     ret = drv->bdrv_truncate(bs, offset);
     if (ret == 0) {
         ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
+        if (bs->change_cb) {
+            bs->size_changed = 1;
+            bs->change_cb(bs->change_opaque);
+        }
     }
     return ret;
 }
Index: qemu/block_int.h
===================================================================
--- qemu.orig/block_int.h	2011-01-14 17:05:49.537004411 +0100
+++ qemu/block_int.h	2011-01-14 17:06:02.539004271 +0100
@@ -167,6 +167,7 @@ struct BlockDriverState {
     char backing_format[16]; /* if non-zero and backing_file exists */
     int is_temporary;
     int media_changed;
+    int size_changed;
 
     BlockDriverState *backing_hd;
     BlockDriverState *file;

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

* [Qemu-devel] [PATCH 3/3] virtio-blk: tell the guest about size changes
  2011-01-14 16:20 [Qemu-devel] [PATCH 0/3] allow online resizing of block devices Christoph Hellwig
  2011-01-14 16:20 ` [Qemu-devel] [PATCH 1/3] block: add resize monitor command Christoph Hellwig
  2011-01-14 16:21 ` [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize Christoph Hellwig
@ 2011-01-14 16:21 ` Christoph Hellwig
  2011-01-18 12:35 ` [Qemu-devel] [PATCH 0/3] allow online resizing of block devices Luiz Capitulino
  3 siblings, 0 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-14 16:21 UTC (permalink / raw)
  To: qemu-devel

Raise a config change interrupt when the size changed.  This allows
virtio-blk guest drivers to read-read the information from the
config space once it got the config chaged interrupt.

Signed-off-by: Christoph Hellwig <hch@lst.de>

Index: qemu/hw/virtio-blk.c
===================================================================
--- qemu.orig/hw/virtio-blk.c	2011-01-14 17:00:07.468262896 +0100
+++ qemu/hw/virtio-blk.c	2011-01-14 17:07:06.897257239 +0100
@@ -504,6 +504,16 @@ static int virtio_blk_load(QEMUFile *f,
     return 0;
 }
 
+static void virtio_blk_change_cb(void *opaque)
+{
+    VirtIOBlock *s = opaque;
+
+    if (s->bs->size_changed) {
+        virtio_notify_config(&s->vdev);
+        s->bs->size_changed = 0;
+    }
+}
+
 VirtIODevice *virtio_blk_init(DeviceState *dev, BlockConf *conf)
 {
     VirtIOBlock *s;
@@ -546,6 +556,7 @@ VirtIODevice *virtio_blk_init(DeviceStat
     register_savevm(dev, "virtio-blk", virtio_blk_id++, 2,
                     virtio_blk_save, virtio_blk_load, s);
     bdrv_set_removable(s->bs, 0);
+    bdrv_set_change_cb(s->bs, virtio_blk_change_cb, s);
     s->bs->buffer_alignment = conf->logical_block_size;
 
     add_boot_device_path(conf->bootindex, dev, "/disk@0,0");

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

* Re: [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize
  2011-01-14 16:21 ` [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize Christoph Hellwig
@ 2011-01-14 21:06   ` Ryan Harper
  2011-01-17  9:14     ` Christoph Hellwig
  0 siblings, 1 reply; 23+ messages in thread
From: Ryan Harper @ 2011-01-14 21:06 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel

* Christoph Hellwig <hch@lst.de> [2011-01-14 10:27]:
> Add a new size_changed flag in the BlockDriverState and call the
> change_cb callback to notify drivers about a size change.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> 
> Index: qemu/block.c
> ===================================================================
> --- qemu.orig/block.c	2011-01-14 17:05:49.527003363 +0100
> +++ qemu/block.c	2011-01-14 17:07:23.206255143 +0100
> @@ -1135,6 +1135,10 @@ int bdrv_truncate(BlockDriverState *bs,
>      ret = drv->bdrv_truncate(bs, offset);
>      if (ret == 0) {
>          ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
> +        if (bs->change_cb) {
> +            bs->size_changed = 1;
> +            bs->change_cb(bs->change_opaque);
> +        }

Do we want to check to ensure the size_changed flag isn't set before
doing a second resize event?  I'm wondering if the truncate takes
$longtime and user gets impatient and issues a second resize command.
How should we respond?  Ignore it?  queue it up? 

Is there any other path that invokes bdrv_truncate?  If so, do we want
invoke the call back in those scenarios or only if the truncate is
initiated from the monitor invocation?

>      }
>      return ret;
>  }
> Index: qemu/block_int.h
> ===================================================================
> --- qemu.orig/block_int.h	2011-01-14 17:05:49.537004411 +0100
> +++ qemu/block_int.h	2011-01-14 17:06:02.539004271 +0100
> @@ -167,6 +167,7 @@ struct BlockDriverState {
>      char backing_format[16]; /* if non-zero and backing_file exists */
>      int is_temporary;
>      int media_changed;
> +    int size_changed;
> 
>      BlockDriverState *backing_hd;
>      BlockDriverState *file;

-- 
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
ryanh@us.ibm.com

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

* Re: [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize
  2011-01-14 21:06   ` Ryan Harper
@ 2011-01-17  9:14     ` Christoph Hellwig
  0 siblings, 0 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-17  9:14 UTC (permalink / raw)
  To: Ryan Harper; +Cc: Christoph Hellwig, qemu-devel

> Do we want to check to ensure the size_changed flag isn't set before
> doing a second resize event?  I'm wondering if the truncate takes
> $longtime and user gets impatient and issues a second resize command.
> How should we respond?  Ignore it?  queue it up? 

The truncate is synchronous and the monitor command won't return before
it's done.  The interfact might be a bit cleaner if we'd just pass the
reason for the change callback as another argument.  I'll do that for
the next respin.

> Is there any other path that invokes bdrv_truncate?  If so, do we want
> invoke the call back in those scenarios or only if the truncate is
> initiated from the monitor invocation?

Currently only the qemu-img and qemu-io tools invooke bdrv_truncate.
But if we grow new users we should always tell the driver/guest about it
so that it knows about the size change.

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

* Re: [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-14 16:20 ` [Qemu-devel] [PATCH 1/3] block: add resize monitor command Christoph Hellwig
@ 2011-01-17 11:28   ` Stefan Hajnoczi
  2011-01-17 15:59     ` Christoph Hellwig
  2011-01-17 17:36   ` Kevin Wolf
  1 sibling, 1 reply; 23+ messages in thread
From: Stefan Hajnoczi @ 2011-01-17 11:28 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel

On Fri, Jan 14, 2011 at 4:20 PM, Christoph Hellwig <hch@lst.de> wrote:
> +STEXI
> +@item resize
> +@findex resize
> +Resize a block image while a guest is running.  Usuaully requires guest

s/Usuaully/Usually/

> +action to see the updated size.  Resize to a lower size is supported,
> +but should be used with extreme caution.

This resizes the image files.  Resizing an LVM volume is a useful case
too.  One way to integrate that feature is to implement a host_device
.bdrv_truncate() that checks the underlying device size and returns
success if it matches the new value and failure otherwise.  Or perhaps
allow the QEMU resize command without an argument to fetch the size
from the underlying device (aka refresh the size).

> +    if (bdrv_get_type_hint(bs) == BDRV_TYPE_CDROM) {
> +        error_report("Can not resize CDROM devices\n");
> +        return -1;
> +    }

Hrm...BDRV_TYPE_FLOPPY probably too?

Stefan

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

* Re: [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-17 11:28   ` Stefan Hajnoczi
@ 2011-01-17 15:59     ` Christoph Hellwig
  0 siblings, 0 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-17 15:59 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: Christoph Hellwig, qemu-devel

On Mon, Jan 17, 2011 at 11:28:47AM +0000, Stefan Hajnoczi wrote:
> > + ? ?if (bdrv_get_type_hint(bs) == BDRV_TYPE_CDROM) {
> > + ? ? ? ?error_report("Can not resize CDROM devices\n");
> > + ? ? ? ?return -1;
> > + ? ?}
> 
> Hrm...BDRV_TYPE_FLOPPY probably too?

If we want to be consistent, yes.  Or we could remove the CDROM check
and let people shoot themselves in the foot as much as they want.

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

* Re: [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-14 16:20 ` [Qemu-devel] [PATCH 1/3] block: add resize monitor command Christoph Hellwig
  2011-01-17 11:28   ` Stefan Hajnoczi
@ 2011-01-17 17:36   ` Kevin Wolf
  2011-01-18 12:28     ` Christoph Hellwig
  2011-01-19 15:35     ` Christoph Hellwig
  1 sibling, 2 replies; 23+ messages in thread
From: Kevin Wolf @ 2011-01-17 17:36 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel

Am 14.01.2011 17:20, schrieb Christoph Hellwig:
> Add a monitor command that allows resizing of block devices while
> qemu is running.  It uses the existing bdrv_truncate method already
> used by qemu-img to do it's work.  Compared to qemu-img the size
> parsing is very simplicistic, but I think having a properly numering
> object is more useful for non-humand monitor users than having
> the units and relative resize parsing.
> 
> For SCSI devices the new size can be updated in Linux guests by
> doing the following shell command:
> 
> 	echo > /sys/class/scsi_device/0:0:0:0/device/rescan
> 
> For ATA devices I don't know of a way to update the block device
> size in Linux system, and for virtio-blk the next two patches
> will provide an automatic update of the size when this command
> is issued on the host.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> 
> Index: qemu/hmp-commands.hx
> ===================================================================
> --- qemu.orig/hmp-commands.hx	2011-01-14 15:11:48.527004132 +0100
> +++ qemu/hmp-commands.hx	2011-01-14 15:40:14.407006506 +0100
> @@ -53,6 +53,24 @@ Quit the emulator.
>  ETEXI
>  
>      {
> +        .name       = "resize",
> +        .args_type  = "id:s,size:l",

size should be 'o' instead of 'l'. The latter may be too small on 32 bit
hosts and doesn't support convenient suffixes:

 * 'l'          target long (32 or 64 bit)

 * 'o'          octets (aka bytes)
 *              user mode accepts an optional T, t, G, g, M, m, K, k
 *              suffix, which multiplies the value by 2^40 for
 *              suffixes T and t, 2^30 for suffixes G and g, 2^20 for
 *              M and m, 2^10 for K and k

> +        .params     = "device size",
> +        .help       = "resize a block image",
> +        .user_print = monitor_user_noop,
> +        .mhandler.cmd_new = do_resize,
> +    },
> +
> +STEXI
> +@item resize
> +@findex resize
> +Resize a block image while a guest is running.  Usuaully requires guest
> +action to see the updated size.  Resize to a lower size is supported,
> +but should be used with extreme caution.
> +ETEXI
> +
> +
> +    {
>          .name       = "eject",
>          .args_type  = "force:-f,device:B",
>          .params     = "[-f] device",
> Index: qemu/blockdev.c
> ===================================================================
> --- qemu.orig/blockdev.c	2011-01-14 15:11:48.539261151 +0100
> +++ qemu/blockdev.c	2011-01-14 15:50:35.604293558 +0100
> @@ -700,3 +700,41 @@ int do_drive_del(Monitor *mon, const QDi
>  
>      return 0;
>  }
> +
> +int do_resize(Monitor *mon, const QDict *qdict, QObject **ret_data)
> +{
> +    const char *id = qdict_get_str(qdict, "id");
> +    int64_t size = qdict_get_int(qdict, "size");
> +    BlockDriverState *bs;
> +
> +    bs = bdrv_find(id);
> +    if (!bs) {
> +        qerror_report(QERR_DEVICE_NOT_FOUND, id);
> +        return -1;
> +    }
> +
> +    if (bdrv_get_type_hint(bs) == BDRV_TYPE_CDROM) {
> +        error_report("Can not resize CDROM devices\n");
> +        return -1;
> +    }

Hm, is there a real reason except that CD-ROMs are read-only? The code
below seems to take read-only devices into account.

Kevin

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

* Re: [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-17 17:36   ` Kevin Wolf
@ 2011-01-18 12:28     ` Christoph Hellwig
  2011-01-19 15:35     ` Christoph Hellwig
  1 sibling, 0 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-18 12:28 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Christoph Hellwig, qemu-devel

On Mon, Jan 17, 2011 at 06:36:15PM +0100, Kevin Wolf wrote:
> size should be 'o' instead of 'l'. The latter may be too small on 32 bit
> hosts and doesn't support convenient suffixes:

Fixed.

> Hm, is there a real reason except that CD-ROMs are read-only? The code
> below seems to take read-only devices into account.

I've removed the CDROM check for the next version.

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

* Re: [Qemu-devel] [PATCH 0/3] allow online resizing of block devices
  2011-01-14 16:20 [Qemu-devel] [PATCH 0/3] allow online resizing of block devices Christoph Hellwig
                   ` (2 preceding siblings ...)
  2011-01-14 16:21 ` [Qemu-devel] [PATCH 3/3] virtio-blk: tell the guest about size changes Christoph Hellwig
@ 2011-01-18 12:35 ` Luiz Capitulino
  2011-01-18 12:48   ` Christoph Hellwig
  3 siblings, 1 reply; 23+ messages in thread
From: Luiz Capitulino @ 2011-01-18 12:35 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel, Markus Armbruster

On Fri, 14 Jan 2011 17:20:44 +0100
Christoph Hellwig <hch@lst.de> wrote:

> This patchset adds support for online resizing of block devices.
> 
> The first patch adds a new resize monitor command which call into
> the existing image resize code.  This is the meat of the series
> and probably needs quite a bit of review and help as I'm not sure
> about how to implement the error handling for monitor commands
> correctly.  Am I really supposed to add a new QERR_ definition
> for each possible error?  And if yes how am I supposed to define
> them?  The macros for them aren't exactly self-explaining.

Well, what happens is this: we screwed up with that interface and we
should replace it soon.

I see you're not adding the new command in QMP (only in the human monitor),
is that intentional? (qmp commands are added to the qmp-commands.hx file).

If it's intentional, then using only error_report() should be ok. If you
plan to have a qmp version, then we'll have to choose between reporting
a generic error version to the client, which is what's going to happen if
you use error_report(), or add the QERR_ macros.

Markus, what do you think? I feel it's pretty urgent for us to replace
that interface.

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

* Re: [Qemu-devel] [PATCH 0/3] allow online resizing of block devices
  2011-01-18 12:35 ` [Qemu-devel] [PATCH 0/3] allow online resizing of block devices Luiz Capitulino
@ 2011-01-18 12:48   ` Christoph Hellwig
  2011-01-18 13:17     ` Luiz Capitulino
  0 siblings, 1 reply; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-18 12:48 UTC (permalink / raw)
  To: Luiz Capitulino; +Cc: qemu-devel, Markus Armbruster

On Tue, Jan 18, 2011 at 10:35:39AM -0200, Luiz Capitulino wrote:
> Well, what happens is this: we screwed up with that interface and we
> should replace it soon.
> 
> I see you're not adding the new command in QMP (only in the human monitor),
> is that intentional? (qmp commands are added to the qmp-commands.hx file).
> 
> If it's intentional, then using only error_report() should be ok. If you
> plan to have a qmp version, then we'll have to choose between reporting
> a generic error version to the client, which is what's going to happen if
> you use error_report(), or add the QERR_ macros.

No, I hoped this would also add the QMP interface.  Why do we need to
declare the commands twice?  Especially as hmp-commands.hx is full of
magic that makes little sense only for human readable commands.

Any help on how to define the QERR_ macros?

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

* Re: [Qemu-devel] [PATCH 0/3] allow online resizing of block devices
  2011-01-18 12:48   ` Christoph Hellwig
@ 2011-01-18 13:17     ` Luiz Capitulino
  0 siblings, 0 replies; 23+ messages in thread
From: Luiz Capitulino @ 2011-01-18 13:17 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel, Markus Armbruster

On Tue, 18 Jan 2011 13:48:06 +0100
Christoph Hellwig <hch@lst.de> wrote:

> On Tue, Jan 18, 2011 at 10:35:39AM -0200, Luiz Capitulino wrote:
> > Well, what happens is this: we screwed up with that interface and we
> > should replace it soon.
> > 
> > I see you're not adding the new command in QMP (only in the human monitor),
> > is that intentional? (qmp commands are added to the qmp-commands.hx file).
> > 
> > If it's intentional, then using only error_report() should be ok. If you
> > plan to have a qmp version, then we'll have to choose between reporting
> > a generic error version to the client, which is what's going to happen if
> > you use error_report(), or add the QERR_ macros.
> 
> No, I hoped this would also add the QMP interface.  Why do we need to
> declare the commands twice?

Because they're different interfaces and should not be tied to each other,
they have different name spaces for example and commands in QMP might have
no relation to commands in HMP and vice-versa.

> Especially as hmp-commands.hx is full of
> magic that makes little sense only for human readable commands.

Yes, the reason for that is that we're in the middle of a refactoring,
but I have around 100 patches that makes a clean separation between the
two and creates a cleaner interface (specially for HMP).

> Any help on how to define the QERR_ macros?

I think we should emit a generic error in QMP for now, I don't think it's
a good idea to expend the bad interface we have today.

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

* Re: [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-17 17:36   ` Kevin Wolf
  2011-01-18 12:28     ` Christoph Hellwig
@ 2011-01-19 15:35     ` Christoph Hellwig
  2011-01-19 15:49       ` Kevin Wolf
  1 sibling, 1 reply; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-19 15:35 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Christoph Hellwig, qemu-devel

On Mon, Jan 17, 2011 at 06:36:15PM +0100, Kevin Wolf wrote:
> > +        .args_type  = "id:s,size:l",
> 
> size should be 'o' instead of 'l'. The latter may be too small on 32 bit
> hosts and doesn't support convenient suffixes:

o actually fails for 2GB or more for me:

(qemu) resize scratch 2047 
resize scratch 2047 
(qemu) 
(qemu) resize scrarch 2048
resize scrarch 2048
invalid size

for l these worked fine.

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

* Re: [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-19 15:35     ` Christoph Hellwig
@ 2011-01-19 15:49       ` Kevin Wolf
  2011-01-19 15:52         ` Christoph Hellwig
  0 siblings, 1 reply; 23+ messages in thread
From: Kevin Wolf @ 2011-01-19 15:49 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel, Luiz Capitulino

Am 19.01.2011 16:35, schrieb Christoph Hellwig:
> On Mon, Jan 17, 2011 at 06:36:15PM +0100, Kevin Wolf wrote:
>>> +        .args_type  = "id:s,size:l",
>>
>> size should be 'o' instead of 'l'. The latter may be too small on 32 bit
>> hosts and doesn't support convenient suffixes:
> 
> o actually fails for 2GB or more for me:
> 
> (qemu) resize scratch 2047 
> resize scratch 2047 
> (qemu) 
> (qemu) resize scrarch 2048
> resize scrarch 2048
> invalid size
> 
> for l these worked fine.

Hm, yeah, 'o' uses ssize_t instead of int64_t, so it's broken on a 32
bit host as well. Though I assume that you use a 64 bit host, and I
can't really see what's the problem there...

Kevin

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

* Re: [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-19 15:49       ` Kevin Wolf
@ 2011-01-19 15:52         ` Christoph Hellwig
  2011-01-19 16:01           ` Kevin Wolf
  0 siblings, 1 reply; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-19 15:52 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Luiz Capitulino, Christoph Hellwig, qemu-devel

On Wed, Jan 19, 2011 at 04:49:04PM +0100, Kevin Wolf wrote:
> > (qemu) resize scratch 2047 
> > resize scratch 2047 
> > (qemu) 
> > (qemu) resize scrarch 2048
> > resize scrarch 2048
> > invalid size
> > 
> > for l these worked fine.
> 
> Hm, yeah, 'o' uses ssize_t instead of int64_t, so it's broken on a 32
> bit host as well. Though I assume that you use a 64 bit host, and I
> can't really see what's the problem there...

This is a test on a 32-bit host.  The target_long of "l" worked fine
because a kvm enabled qemu always builds for an x86-64 target, even
with a 32-bit host.

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

* Re: [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-19 15:52         ` Christoph Hellwig
@ 2011-01-19 16:01           ` Kevin Wolf
  2011-01-19 16:31             ` Christoph Hellwig
  0 siblings, 1 reply; 23+ messages in thread
From: Kevin Wolf @ 2011-01-19 16:01 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel, Luiz Capitulino

Am 19.01.2011 16:52, schrieb Christoph Hellwig:
> On Wed, Jan 19, 2011 at 04:49:04PM +0100, Kevin Wolf wrote:
>>> (qemu) resize scratch 2047 
>>> resize scratch 2047 
>>> (qemu) 
>>> (qemu) resize scrarch 2048
>>> resize scrarch 2048
>>> invalid size
>>>
>>> for l these worked fine.
>>
>> Hm, yeah, 'o' uses ssize_t instead of int64_t, so it's broken on a 32
>> bit host as well. Though I assume that you use a 64 bit host, and I
>> can't really see what's the problem there...
> 
> This is a test on a 32-bit host.  The target_long of "l" worked fine
> because a kvm enabled qemu always builds for an x86-64 target, even
> with a 32-bit host.

Oh, okay, then it makes perfect sense. We should fix 'o' then to use
int64_t. The patch below should do it.

strtosz (which is used by 'o') has the same problem in git master.
There's a fix by Jes, so be sure to test this on the block branch.

Kevin

diff --git a/monitor.c b/monitor.c
index d291158..0cda3da 100644
--- a/monitor.c
+++ b/monitor.c
@@ -4162,7 +4162,7 @@ static const mon_cmd_t
*monitor_parse_command(Monitor *mon,
             break;
         case 'o':
             {
-                ssize_t val;
+                int64_t val;
                 char *end;

                 while (qemu_isspace(*p)) {

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

* Re: [Qemu-devel] [PATCH 1/3] block: add resize monitor command
  2011-01-19 16:01           ` Kevin Wolf
@ 2011-01-19 16:31             ` Christoph Hellwig
  0 siblings, 0 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-19 16:31 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Luiz Capitulino, Christoph Hellwig, qemu-devel

On Wed, Jan 19, 2011 at 05:01:19PM +0100, Kevin Wolf wrote:
> Oh, okay, then it makes perfect sense. We should fix 'o' then to use
> int64_t. The patch below should do it.
> 
> strtosz (which is used by 'o') has the same problem in git master.
> There's a fix by Jes, so be sure to test this on the block branch.

The larger sizes work fine on the block branch.

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

* [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize
  2011-01-24 12:32 [Qemu-devel] [PATCH 0/3 v3] allow online resizing of block devices Christoph Hellwig
@ 2011-01-24 12:32 ` Christoph Hellwig
  0 siblings, 0 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-24 12:32 UTC (permalink / raw)
  To: qemu-devel

Extend the change_cb callback with a reason argument, and use it
to tell drivers about size changes.

Signed-off-by: Christoph Hellwig <hch@lst.de>

Index: qemu/block.c
===================================================================
--- qemu.orig/block.c	2011-01-24 11:56:20.899004129 +0100
+++ qemu/block.c	2011-01-24 11:56:39.796004269 +0100
@@ -645,7 +645,7 @@ int bdrv_open(BlockDriverState *bs, cons
         /* call the change callback */
         bs->media_changed = 1;
         if (bs->change_cb)
-            bs->change_cb(bs->change_opaque);
+            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
     }
 
     return 0;
@@ -684,7 +684,7 @@ void bdrv_close(BlockDriverState *bs)
         /* call the change callback */
         bs->media_changed = 1;
         if (bs->change_cb)
-            bs->change_cb(bs->change_opaque);
+            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
     }
 }
 
@@ -1135,6 +1135,9 @@ int bdrv_truncate(BlockDriverState *bs,
     ret = drv->bdrv_truncate(bs, offset);
     if (ret == 0) {
         ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
+        if (bs->change_cb) {
+            bs->change_cb(bs->change_opaque, CHANGE_SIZE);
+        }
     }
     return ret;
 }
@@ -1366,7 +1369,8 @@ int bdrv_enable_write_cache(BlockDriverS
 
 /* XXX: no longer used */
 void bdrv_set_change_cb(BlockDriverState *bs,
-                        void (*change_cb)(void *opaque), void *opaque)
+                        void (*change_cb)(void *opaque, int reason),
+                        void *opaque)
 {
     bs->change_cb = change_cb;
     bs->change_opaque = opaque;
@@ -1411,7 +1415,7 @@ int bdrv_set_key(BlockDriverState *bs, c
         /* call the change callback now, we skipped it on open */
         bs->media_changed = 1;
         if (bs->change_cb)
-            bs->change_cb(bs->change_opaque);
+            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
     }
     return ret;
 }
Index: qemu/block.h
===================================================================
--- qemu.orig/block.h	2011-01-24 11:52:25.248004200 +0100
+++ qemu/block.h	2011-01-24 11:56:39.797004269 +0100
@@ -182,7 +182,8 @@ int bdrv_is_locked(BlockDriverState *bs)
 void bdrv_set_locked(BlockDriverState *bs, int locked);
 int bdrv_eject(BlockDriverState *bs, int eject_flag);
 void bdrv_set_change_cb(BlockDriverState *bs,
-                        void (*change_cb)(void *opaque), void *opaque);
+                        void (*change_cb)(void *opaque, int reason),
+                        void *opaque);
 void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
 BlockDriverState *bdrv_find(const char *name);
 BlockDriverState *bdrv_next(BlockDriverState *bs);
Index: qemu/block_int.h
===================================================================
--- qemu.orig/block_int.h	2011-01-24 11:52:25.255004060 +0100
+++ qemu/block_int.h	2011-01-24 11:56:39.801004059 +0100
@@ -153,7 +153,7 @@ struct BlockDriverState {
     int valid_key; /* if true, a valid encryption key has been set */
     int sg;        /* if true, the device is a /dev/sg* */
     /* event callback when inserting/removing */
-    void (*change_cb)(void *opaque);
+    void (*change_cb)(void *opaque, int reason);
     void *change_opaque;
 
     BlockDriver *drv; /* NULL means no media */
@@ -203,6 +203,9 @@ struct BlockDriverState {
     void *private;
 };
 
+#define CHANGE_MEDIA	0x01
+#define CHANGE_SIZE	0x02
+
 struct BlockDriverAIOCB {
     AIOPool *pool;
     BlockDriverState *bs;
Index: qemu/hw/ide/core.c
===================================================================
--- qemu.orig/hw/ide/core.c	2011-01-24 11:56:20.904004339 +0100
+++ qemu/hw/ide/core.c	2011-01-24 11:56:39.807004199 +0100
@@ -1584,11 +1584,15 @@ static void ide_cfata_metadata_write(IDE
 }
 
 /* called when the inserted state of the media has changed */
-static void cdrom_change_cb(void *opaque)
+static void cdrom_change_cb(void *opaque, int reason)
 {
     IDEState *s = opaque;
     uint64_t nb_sectors;
 
+    if (!(reason & CHANGE_MEDIA)) {
+        return;
+    }
+
     bdrv_get_geometry(s->bs, &nb_sectors);
     s->nb_sectors = nb_sectors;
 
Index: qemu/hw/sd.c
===================================================================
--- qemu.orig/hw/sd.c	2011-01-24 11:52:25.281004130 +0100
+++ qemu/hw/sd.c	2011-01-24 11:56:39.813007971 +0100
@@ -422,9 +422,14 @@ static void sd_reset(SDState *sd, BlockD
     sd->pwd_len = 0;
 }
 
-static void sd_cardchange(void *opaque)
+static void sd_cardchange(void *opaque, int reason)
 {
     SDState *sd = opaque;
+
+    if (!(reason & CHANGE_MEDIA)) {
+        return;
+    }
+
     qemu_set_irq(sd->inserted_cb, bdrv_is_inserted(sd->bdrv));
     if (bdrv_is_inserted(sd->bdrv)) {
         sd_reset(sd, sd->bdrv);

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

* Re: [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize
  2011-01-19 17:02 ` [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize Christoph Hellwig
  2011-01-20  9:14   ` Stefan Hajnoczi
@ 2011-01-21 10:41   ` Kevin Wolf
  1 sibling, 0 replies; 23+ messages in thread
From: Kevin Wolf @ 2011-01-21 10:41 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel

Am 19.01.2011 18:02, schrieb Christoph Hellwig:
> Extend the change_cb callback with a reason argument, and use it
> to tell drivers about size changes.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> 
> Index: qemu/block.c
> ===================================================================
> --- qemu.orig/block.c	2011-01-18 20:54:45.246021572 +0100
> +++ qemu/block.c	2011-01-18 20:56:54.117255612 +0100
> @@ -645,7 +645,7 @@ int bdrv_open(BlockDriverState *bs, cons
>          /* call the change callback */
>          bs->media_changed = 1;
>          if (bs->change_cb)
> -            bs->change_cb(bs->change_opaque);
> +            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
>      }
>  
>      return 0;
> @@ -684,7 +684,7 @@ void bdrv_close(BlockDriverState *bs)
>          /* call the change callback */
>          bs->media_changed = 1;
>          if (bs->change_cb)
> -            bs->change_cb(bs->change_opaque);
> +            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
>      }
>  }
>  
> @@ -1135,6 +1135,8 @@ int bdrv_truncate(BlockDriverState *bs,
>      ret = drv->bdrv_truncate(bs, offset);
>      if (ret == 0) {
>          ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
> +        if (bs->change_cb)
> +            bs->change_cb(bs->change_opaque, CHANGE_SIZE);

Braces are missing here.

Apart from that and Stefan's s/id/device/ the series looks good to me.

Kevin

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

* Re: [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize
  2011-01-20  9:14   ` Stefan Hajnoczi
@ 2011-01-20  9:44     ` Christoph Hellwig
  0 siblings, 0 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-20  9:44 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: qemu-devel

On Thu, Jan 20, 2011 at 09:14:17AM +0000, Stefan Hajnoczi wrote:
> Cool, this is much nicer than stashing away state like
> bs->media_changed = 1.  I just took a peek to see if we can remove
> that field completely but IDE seems to use it internally.

I think we could get rid of it in generic code, but let's keep this
series simple.

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

* Re: [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize
  2011-01-19 17:02 ` [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize Christoph Hellwig
@ 2011-01-20  9:14   ` Stefan Hajnoczi
  2011-01-20  9:44     ` Christoph Hellwig
  2011-01-21 10:41   ` Kevin Wolf
  1 sibling, 1 reply; 23+ messages in thread
From: Stefan Hajnoczi @ 2011-01-20  9:14 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel

On Wed, Jan 19, 2011 at 5:02 PM, Christoph Hellwig <hch@lst.de> wrote:
> Extend the change_cb callback with a reason argument, and use it
> to tell drivers about size changes.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
>
> Index: qemu/block.c
> ===================================================================
> --- qemu.orig/block.c   2011-01-18 20:54:45.246021572 +0100
> +++ qemu/block.c        2011-01-18 20:56:54.117255612 +0100
> @@ -645,7 +645,7 @@ int bdrv_open(BlockDriverState *bs, cons
>         /* call the change callback */
>         bs->media_changed = 1;
>         if (bs->change_cb)
> -            bs->change_cb(bs->change_opaque);
> +            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);

Cool, this is much nicer than stashing away state like
bs->media_changed = 1.  I just took a peek to see if we can remove
that field completely but IDE seems to use it internally.

Stefan

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

* [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize
  2011-01-19 17:02 [Qemu-devel] [PATCH 0/3 v2] " Christoph Hellwig
@ 2011-01-19 17:02 ` Christoph Hellwig
  2011-01-20  9:14   ` Stefan Hajnoczi
  2011-01-21 10:41   ` Kevin Wolf
  0 siblings, 2 replies; 23+ messages in thread
From: Christoph Hellwig @ 2011-01-19 17:02 UTC (permalink / raw)
  To: qemu-devel

Extend the change_cb callback with a reason argument, and use it
to tell drivers about size changes.

Signed-off-by: Christoph Hellwig <hch@lst.de>

Index: qemu/block.c
===================================================================
--- qemu.orig/block.c	2011-01-18 20:54:45.246021572 +0100
+++ qemu/block.c	2011-01-18 20:56:54.117255612 +0100
@@ -645,7 +645,7 @@ int bdrv_open(BlockDriverState *bs, cons
         /* call the change callback */
         bs->media_changed = 1;
         if (bs->change_cb)
-            bs->change_cb(bs->change_opaque);
+            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
     }
 
     return 0;
@@ -684,7 +684,7 @@ void bdrv_close(BlockDriverState *bs)
         /* call the change callback */
         bs->media_changed = 1;
         if (bs->change_cb)
-            bs->change_cb(bs->change_opaque);
+            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
     }
 }
 
@@ -1135,6 +1135,8 @@ int bdrv_truncate(BlockDriverState *bs,
     ret = drv->bdrv_truncate(bs, offset);
     if (ret == 0) {
         ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
+        if (bs->change_cb)
+            bs->change_cb(bs->change_opaque, CHANGE_SIZE);
     }
     return ret;
 }
@@ -1366,7 +1368,8 @@ int bdrv_enable_write_cache(BlockDriverS
 
 /* XXX: no longer used */
 void bdrv_set_change_cb(BlockDriverState *bs,
-                        void (*change_cb)(void *opaque), void *opaque)
+                        void (*change_cb)(void *opaque, int reason),
+                        void *opaque)
 {
     bs->change_cb = change_cb;
     bs->change_opaque = opaque;
@@ -1411,7 +1414,7 @@ int bdrv_set_key(BlockDriverState *bs, c
         /* call the change callback now, we skipped it on open */
         bs->media_changed = 1;
         if (bs->change_cb)
-            bs->change_cb(bs->change_opaque);
+            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
     }
     return ret;
 }
Index: qemu/block.h
===================================================================
--- qemu.orig/block.h	2011-01-18 20:57:00.792253448 +0100
+++ qemu/block.h	2011-01-18 20:57:09.771282850 +0100
@@ -182,7 +182,8 @@ int bdrv_is_locked(BlockDriverState *bs)
 void bdrv_set_locked(BlockDriverState *bs, int locked);
 int bdrv_eject(BlockDriverState *bs, int eject_flag);
 void bdrv_set_change_cb(BlockDriverState *bs,
-                        void (*change_cb)(void *opaque), void *opaque);
+                        void (*change_cb)(void *opaque, int reason),
+                        void *opaque);
 void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
 BlockDriverState *bdrv_find(const char *name);
 BlockDriverState *bdrv_next(BlockDriverState *bs);
Index: qemu/block_int.h
===================================================================
--- qemu.orig/block_int.h	2011-01-18 20:55:43.783009908 +0100
+++ qemu/block_int.h	2011-01-18 20:56:58.912004806 +0100
@@ -153,7 +153,7 @@ struct BlockDriverState {
     int valid_key; /* if true, a valid encryption key has been set */
     int sg;        /* if true, the device is a /dev/sg* */
     /* event callback when inserting/removing */
-    void (*change_cb)(void *opaque);
+    void (*change_cb)(void *opaque, int reason);
     void *change_opaque;
 
     BlockDriver *drv; /* NULL means no media */
@@ -203,6 +203,9 @@ struct BlockDriverState {
     void *private;
 };
 
+#define CHANGE_MEDIA	0x01
+#define CHANGE_SIZE	0x02
+
 struct BlockDriverAIOCB {
     AIOPool *pool;
     BlockDriverState *bs;
Index: qemu/hw/ide/core.c
===================================================================
--- qemu.orig/hw/ide/core.c	2011-01-18 20:57:17.321260780 +0100
+++ qemu/hw/ide/core.c	2011-01-18 20:59:46.242256451 +0100
@@ -1625,11 +1625,15 @@ static void ide_cfata_metadata_write(IDE
 }
 
 /* called when the inserted state of the media has changed */
-static void cdrom_change_cb(void *opaque)
+static void cdrom_change_cb(void *opaque, int reason)
 {
     IDEState *s = opaque;
     uint64_t nb_sectors;
 
+    if (!(reason & CHANGE_MEDIA)) {
+        return;
+    }
+
     bdrv_get_geometry(s->bs, &nb_sectors);
     s->nb_sectors = nb_sectors;
 
Index: qemu/hw/sd.c
===================================================================
--- qemu.orig/hw/sd.c	2011-01-18 20:57:48.978261549 +0100
+++ qemu/hw/sd.c	2011-01-18 20:59:37.000000000 +0100
@@ -422,9 +422,14 @@ static void sd_reset(SDState *sd, BlockD
     sd->pwd_len = 0;
 }
 
-static void sd_cardchange(void *opaque)
+static void sd_cardchange(void *opaque, int reason)
 {
     SDState *sd = opaque;
+
+    if (!(reason & CHANGE_MEDIA)) {
+        return;
+    }
+
     qemu_set_irq(sd->inserted_cb, bdrv_is_inserted(sd->bdrv));
     if (bdrv_is_inserted(sd->bdrv)) {
         sd_reset(sd, sd->bdrv);

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

end of thread, other threads:[~2011-01-24 12:32 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-14 16:20 [Qemu-devel] [PATCH 0/3] allow online resizing of block devices Christoph Hellwig
2011-01-14 16:20 ` [Qemu-devel] [PATCH 1/3] block: add resize monitor command Christoph Hellwig
2011-01-17 11:28   ` Stefan Hajnoczi
2011-01-17 15:59     ` Christoph Hellwig
2011-01-17 17:36   ` Kevin Wolf
2011-01-18 12:28     ` Christoph Hellwig
2011-01-19 15:35     ` Christoph Hellwig
2011-01-19 15:49       ` Kevin Wolf
2011-01-19 15:52         ` Christoph Hellwig
2011-01-19 16:01           ` Kevin Wolf
2011-01-19 16:31             ` Christoph Hellwig
2011-01-14 16:21 ` [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize Christoph Hellwig
2011-01-14 21:06   ` Ryan Harper
2011-01-17  9:14     ` Christoph Hellwig
2011-01-14 16:21 ` [Qemu-devel] [PATCH 3/3] virtio-blk: tell the guest about size changes Christoph Hellwig
2011-01-18 12:35 ` [Qemu-devel] [PATCH 0/3] allow online resizing of block devices Luiz Capitulino
2011-01-18 12:48   ` Christoph Hellwig
2011-01-18 13:17     ` Luiz Capitulino
2011-01-19 17:02 [Qemu-devel] [PATCH 0/3 v2] " Christoph Hellwig
2011-01-19 17:02 ` [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize Christoph Hellwig
2011-01-20  9:14   ` Stefan Hajnoczi
2011-01-20  9:44     ` Christoph Hellwig
2011-01-21 10:41   ` Kevin Wolf
2011-01-24 12:32 [Qemu-devel] [PATCH 0/3 v3] allow online resizing of block devices Christoph Hellwig
2011-01-24 12:32 ` [Qemu-devel] [PATCH 2/3] block: tell drivers about an image resize Christoph Hellwig

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.