* [Qemu-devel] New option for snapshot_blkdev to avoid image creation @ 2011-10-03 16:09 Federico Simoncelli 2011-10-03 16:09 ` [Qemu-devel] [PATCH] qemu: new " Federico Simoncelli ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Federico Simoncelli @ 2011-10-03 16:09 UTC (permalink / raw) To: qemu-devel; +Cc: abaron, dlaor In some situations might be useful to let qemu use an image that was prepared for a live snapshot. The advantage is that creating the snapshot file outside of the qemu process we can use the whole range of options provided by the format (eg for qcow2: encryption, cluster_size and preallocation). It is also possible to pre-set a relative path to the backing file (now it is created by default as absolute path). In the long run it can also avoid the danger of reimplementing qemu-img inside qemu (if we wanted to expose such options when a snapshot is requested). -- Federico. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH] qemu: new option for snapshot_blkdev to avoid image creation 2011-10-03 16:09 [Qemu-devel] New option for snapshot_blkdev to avoid image creation Federico Simoncelli @ 2011-10-03 16:09 ` Federico Simoncelli 2011-10-06 22:45 ` Dor Laor 2011-10-04 7:33 ` [Qemu-devel] New " Stefan Hajnoczi 2011-10-11 12:30 ` Kevin Wolf 2 siblings, 1 reply; 9+ messages in thread From: Federico Simoncelli @ 2011-10-03 16:09 UTC (permalink / raw) To: qemu-devel; +Cc: abaron, Federico Simoncelli, dlaor Add the new option [-n] for snapshot_blkdev to avoid the image creation. The file provided as [new-image-file] is considered as already initialized and will be used after passing a check for the backing file. Signed-off-by: Federico Simoncelli <fsimonce@redhat.com> --- blockdev.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- hmp-commands.hx | 7 ++++--- qmp-commands.hx | 4 ++-- 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/blockdev.c b/blockdev.c index 0827bf7..bd46808 100644 --- a/blockdev.c +++ b/blockdev.c @@ -550,8 +550,53 @@ void do_commit(Monitor *mon, const QDict *qdict) } } +static int check_snapshot_file(const char *filename, const char *oldfilename, + int flags, BlockDriver *drv) +{ + BlockDriverState *bs; + char bak_filename[1024], *abs_filename; + int ret = 0; + + bs = bdrv_new(""); + if (!bs) { + return -1; + } + + ret = bdrv_open(bs, filename, flags, drv); + if (ret) { + qerror_report(QERR_OPEN_FILE_FAILED, filename); + goto err0; + } + + if (bs->backing_file) { + path_combine(bak_filename, sizeof(bak_filename), + filename, bs->backing_file); + + abs_filename = realpath(bak_filename, NULL); + if (!abs_filename) { + ret = -1; + goto err1; + } + + if (strcmp(abs_filename, oldfilename)) { + qerror_report(QERR_OPEN_FILE_FAILED, filename); + ret = -1; + } + + free(abs_filename); + } + +err1: + bdrv_close(bs); + +err0: + bdrv_delete(bs); + return ret; +} + int do_snapshot_blkdev(Monitor *mon, const QDict *qdict, QObject **ret_data) { + const int nocreate = qdict_get_try_bool(qdict, "nocreate", 0); const char *device = qdict_get_str(qdict, "device"); const char *filename = qdict_get_try_str(qdict, "snapshot-file"); const char *format = qdict_get_try_str(qdict, "format"); @@ -597,8 +642,13 @@ int do_snapshot_blkdev(Monitor *mon, const QDict *qdict, QObject **ret_data) goto out; } - ret = bdrv_img_create(filename, format, bs->filename, - bs->drv->format_name, NULL, -1, flags); + if (nocreate) { + ret = check_snapshot_file(filename, bs->filename, flags, drv); + } else { + ret = bdrv_img_create(filename, format, bs->filename, + bs->drv->format_name, NULL, -1, flags); + } + if (ret) { goto out; } diff --git a/hmp-commands.hx b/hmp-commands.hx index 9e1cca8..eb9fcd4 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -840,11 +840,12 @@ ETEXI { .name = "snapshot_blkdev", - .args_type = "device:B,snapshot-file:s?,format:s?", - .params = "device [new-image-file] [format]", + .args_type = "nocreate:-n,device:B,snapshot-file:s?,format:s?", + .params = "[-n] device [new-image-file] [format]", .help = "initiates a live snapshot\n\t\t\t" "of device. If a new image file is specified, the\n\t\t\t" - "new image file will become the new root image.\n\t\t\t" + "new image file will be created (unless -n is\n\t\t\t" + "specified) and will become the new root image.\n\t\t\t" "If format is specified, the snapshot file will\n\t\t\t" "be created in that format. Otherwise the\n\t\t\t" "snapshot will be internal! (currently unsupported)", diff --git a/qmp-commands.hx b/qmp-commands.hx index d83bce5..7af36d8 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -695,8 +695,8 @@ EQMP { .name = "blockdev-snapshot-sync", - .args_type = "device:B,snapshot-file:s?,format:s?", - .params = "device [new-image-file] [format]", + .args_type = "nocreate:-n,device:B,snapshot-file:s?,format:s?", + .params = "[-n] device [new-image-file] [format]", .user_print = monitor_user_noop, .mhandler.cmd_new = do_snapshot_blkdev, }, -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu: new option for snapshot_blkdev to avoid image creation 2011-10-03 16:09 ` [Qemu-devel] [PATCH] qemu: new " Federico Simoncelli @ 2011-10-06 22:45 ` Dor Laor 2011-10-11 11:56 ` Federico Simoncelli 0 siblings, 1 reply; 9+ messages in thread From: Dor Laor @ 2011-10-06 22:45 UTC (permalink / raw) To: Federico Simoncelli; +Cc: Kevin Wolf, abaron, qemu-devel On 10/03/2011 06:09 PM, Federico Simoncelli wrote: > Add the new option [-n] for snapshot_blkdev to avoid the image creation. > The file provided as [new-image-file] is considered as already initialized > and will be used after passing a check for the backing file. Seems ok to me as a way to go around fdget and still have selinux gain. Worth to get Kevin's view too. Federico, would you like to ack or extend the design: http://wiki.qemu.org/Features/Snapshots > > Signed-off-by: Federico Simoncelli<fsimonce@redhat.com> > --- > blockdev.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- > hmp-commands.hx | 7 ++++--- > qmp-commands.hx | 4 ++-- > 3 files changed, 58 insertions(+), 7 deletions(-) > > diff --git a/blockdev.c b/blockdev.c > index 0827bf7..bd46808 100644 > --- a/blockdev.c > +++ b/blockdev.c > @@ -550,8 +550,53 @@ void do_commit(Monitor *mon, const QDict *qdict) > } > } > > +static int check_snapshot_file(const char *filename, const char *oldfilename, > + int flags, BlockDriver *drv) > +{ > + BlockDriverState *bs; > + char bak_filename[1024], *abs_filename; > + int ret = 0; > + > + bs = bdrv_new(""); > + if (!bs) { > + return -1; > + } > + > + ret = bdrv_open(bs, filename, flags, drv); > + if (ret) { > + qerror_report(QERR_OPEN_FILE_FAILED, filename); > + goto err0; > + } > + > + if (bs->backing_file) { > + path_combine(bak_filename, sizeof(bak_filename), > + filename, bs->backing_file); > + > + abs_filename = realpath(bak_filename, NULL); > + if (!abs_filename) { > + ret = -1; > + goto err1; > + } > + > + if (strcmp(abs_filename, oldfilename)) { > + qerror_report(QERR_OPEN_FILE_FAILED, filename); > + ret = -1; > + } > + > + free(abs_filename); > + } > + > +err1: > + bdrv_close(bs); > + > +err0: > + bdrv_delete(bs); > + return ret; > +} > + > int do_snapshot_blkdev(Monitor *mon, const QDict *qdict, QObject **ret_data) > { > + const int nocreate = qdict_get_try_bool(qdict, "nocreate", 0); > const char *device = qdict_get_str(qdict, "device"); > const char *filename = qdict_get_try_str(qdict, "snapshot-file"); > const char *format = qdict_get_try_str(qdict, "format"); > @@ -597,8 +642,13 @@ int do_snapshot_blkdev(Monitor *mon, const QDict *qdict, QObject **ret_data) > goto out; > } > > - ret = bdrv_img_create(filename, format, bs->filename, > - bs->drv->format_name, NULL, -1, flags); > + if (nocreate) { > + ret = check_snapshot_file(filename, bs->filename, flags, drv); > + } else { > + ret = bdrv_img_create(filename, format, bs->filename, > + bs->drv->format_name, NULL, -1, flags); > + } > + > if (ret) { > goto out; > } > diff --git a/hmp-commands.hx b/hmp-commands.hx > index 9e1cca8..eb9fcd4 100644 > --- a/hmp-commands.hx > +++ b/hmp-commands.hx > @@ -840,11 +840,12 @@ ETEXI > > { > .name = "snapshot_blkdev", > - .args_type = "device:B,snapshot-file:s?,format:s?", > - .params = "device [new-image-file] [format]", > + .args_type = "nocreate:-n,device:B,snapshot-file:s?,format:s?", > + .params = "[-n] device [new-image-file] [format]", > .help = "initiates a live snapshot\n\t\t\t" > "of device. If a new image file is specified, the\n\t\t\t" > - "new image file will become the new root image.\n\t\t\t" > + "new image file will be created (unless -n is\n\t\t\t" > + "specified) and will become the new root image.\n\t\t\t" > "If format is specified, the snapshot file will\n\t\t\t" > "be created in that format. Otherwise the\n\t\t\t" > "snapshot will be internal! (currently unsupported)", > diff --git a/qmp-commands.hx b/qmp-commands.hx > index d83bce5..7af36d8 100644 > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -695,8 +695,8 @@ EQMP > > { > .name = "blockdev-snapshot-sync", > - .args_type = "device:B,snapshot-file:s?,format:s?", > - .params = "device [new-image-file] [format]", > + .args_type = "nocreate:-n,device:B,snapshot-file:s?,format:s?", > + .params = "[-n] device [new-image-file] [format]", > .user_print = monitor_user_noop, > .mhandler.cmd_new = do_snapshot_blkdev, > }, ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu: new option for snapshot_blkdev to avoid image creation 2011-10-06 22:45 ` Dor Laor @ 2011-10-11 11:56 ` Federico Simoncelli 2011-10-11 12:00 ` Dor Laor 0 siblings, 1 reply; 9+ messages in thread From: Federico Simoncelli @ 2011-10-11 11:56 UTC (permalink / raw) To: dlaor; +Cc: Kevin Wolf, abaron, qemu-devel ----- Original Message ----- > From: "Dor Laor" <dlaor@redhat.com> > To: "Federico Simoncelli" <fsimonce@redhat.com> > Cc: qemu-devel@nongnu.org, abaron@redhat.com, "Kevin Wolf" <kwolf@redhat.com> > Sent: Friday, October 7, 2011 12:45:06 AM > Subject: Re: [Qemu-devel] [PATCH] qemu: new option for snapshot_blkdev to avoid image creation > > On 10/03/2011 06:09 PM, Federico Simoncelli wrote: > > Add the new option [-n] for snapshot_blkdev to avoid the image > > creation. > > The file provided as [new-image-file] is considered as already > > initialized > > and will be used after passing a check for the backing file. > > Seems ok to me as a way to go around fdget and still have selinux > gain. > Worth to get Kevin's view too. Hi Kevin, any news on this? > Federico, would you like to ack or extend the design: > http://wiki.qemu.org/Features/Snapshots Dor, should I do it now or only after my patch is acked? -- Federico ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu: new option for snapshot_blkdev to avoid image creation 2011-10-11 11:56 ` Federico Simoncelli @ 2011-10-11 12:00 ` Dor Laor 0 siblings, 0 replies; 9+ messages in thread From: Dor Laor @ 2011-10-11 12:00 UTC (permalink / raw) To: Federico Simoncelli; +Cc: Kevin Wolf, abaron, qemu-devel On 10/11/2011 01:56 PM, Federico Simoncelli wrote: > ----- Original Message ----- >> From: "Dor Laor"<dlaor@redhat.com> >> To: "Federico Simoncelli"<fsimonce@redhat.com> >> Cc: qemu-devel@nongnu.org, abaron@redhat.com, "Kevin Wolf"<kwolf@redhat.com> >> Sent: Friday, October 7, 2011 12:45:06 AM >> Subject: Re: [Qemu-devel] [PATCH] qemu: new option for snapshot_blkdev to avoid image creation >> >> On 10/03/2011 06:09 PM, Federico Simoncelli wrote: >>> Add the new option [-n] for snapshot_blkdev to avoid the image >>> creation. >>> The file provided as [new-image-file] is considered as already >>> initialized >>> and will be used after passing a check for the backing file. >> >> Seems ok to me as a way to go around fdget and still have selinux >> gain. >> Worth to get Kevin's view too. > > Hi Kevin, any news on this? > >> Federico, would you like to ack or extend the design: >> http://wiki.qemu.org/Features/Snapshots > > Dor, should I do it now or only after my patch is acked? We're not that strict in the OSS world ;) you can do it before and mark as a pending request. btw: Kevin is back so he will probably drain his queue soon. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] New option for snapshot_blkdev to avoid image creation 2011-10-03 16:09 [Qemu-devel] New option for snapshot_blkdev to avoid image creation Federico Simoncelli 2011-10-03 16:09 ` [Qemu-devel] [PATCH] qemu: new " Federico Simoncelli @ 2011-10-04 7:33 ` Stefan Hajnoczi 2011-10-04 8:27 ` Federico Simoncelli 2011-10-11 12:30 ` Kevin Wolf 2 siblings, 1 reply; 9+ messages in thread From: Stefan Hajnoczi @ 2011-10-04 7:33 UTC (permalink / raw) To: Federico Simoncelli; +Cc: abaron, dlaor, qemu-devel On Mon, Oct 03, 2011 at 04:09:01PM +0000, Federico Simoncelli wrote: > In some situations might be useful to let qemu use an image that was > prepared for a live snapshot. > The advantage is that creating the snapshot file outside of the qemu > process we can use the whole range of options provided by the format > (eg for qcow2: encryption, cluster_size and preallocation). > It is also possible to pre-set a relative path to the backing file > (now it is created by default as absolute path). > In the long run it can also avoid the danger of reimplementing qemu-img > inside qemu (if we wanted to expose such options when a snapshot is > requested). When the image file is created based on the backing file size: $ qemu-img create -f qcow2 -o backing_file=master.img vm001.qcow2 It turns out that bdrv_img_create() opens the backing file with read/write permissions. This is generally a bad idea but especially dangerous when the VM currently has the image file open already since image formats are not designed for multiple initiators (clustering). We wouldn't want any caches being written out or startup fsck-style operations to be performed on the backing file while the VM has it open. Please make sure to use read-only before applying this patch. Stefan ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] New option for snapshot_blkdev to avoid image creation 2011-10-04 7:33 ` [Qemu-devel] New " Stefan Hajnoczi @ 2011-10-04 8:27 ` Federico Simoncelli 2011-10-04 10:33 ` Stefan Hajnoczi 0 siblings, 1 reply; 9+ messages in thread From: Federico Simoncelli @ 2011-10-04 8:27 UTC (permalink / raw) To: Stefan Hajnoczi; +Cc: abaron, dlaor, qemu-devel ----- Original Message ----- > From: "Stefan Hajnoczi" <stefanha@gmail.com> > To: "Federico Simoncelli" <fsimonce@redhat.com> > Cc: qemu-devel@nongnu.org, abaron@redhat.com, dlaor@redhat.com > Sent: Tuesday, October 4, 2011 9:33:48 AM > Subject: Re: [Qemu-devel] New option for snapshot_blkdev to avoid image creation > > On Mon, Oct 03, 2011 at 04:09:01PM +0000, Federico Simoncelli wrote: > > In some situations might be useful to let qemu use an image that > > was > > prepared for a live snapshot. > > The advantage is that creating the snapshot file outside of the > > qemu > > process we can use the whole range of options provided by the > > format > > (eg for qcow2: encryption, cluster_size and preallocation). > > It is also possible to pre-set a relative path to the backing file > > (now it is created by default as absolute path). > > In the long run it can also avoid the danger of reimplementing > > qemu-img > > inside qemu (if we wanted to expose such options when a snapshot is > > requested). > > When the image file is created based on the backing file size: > > $ qemu-img create -f qcow2 -o backing_file=master.img vm001.qcow2 > > It turns out that bdrv_img_create() opens the backing file with > read/write permissions. This is generally a bad idea but especially > dangerous when the VM currently has the image file open already since > image formats are not designed for multiple initiators (clustering). Hi Stefan, are you sure that bdrv_img_create opens the backing file with read/write permissions? After a quick check I can't see that happening: $ ./qemu-img create -f qcow2 /tmp/master.img 1G Formatting '/tmp/master.img', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 $ strace -e trace=open ./qemu-img create -f qcow2 -o backing_file=/tmp/master.img /tmp/vm001.qcow2 [...] open("/tmp/vm001.qcow2", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory) open("/tmp/vm001.qcow2", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory) open("/tmp/master.img", O_RDONLY|O_NONBLOCK) = 3 open("/tmp/master.img", O_RDONLY|O_NONBLOCK) = 3 open("/tmp/master.img", O_RDONLY|O_DSYNC|O_CLOEXEC) = 3 open("/tmp/master.img", O_RDONLY|O_NONBLOCK) = 3 open("/tmp/master.img", O_RDONLY|O_NONBLOCK) = 3 open("/tmp/master.img", O_RDONLY|O_CLOEXEC) = 3 Formatting '/tmp/vm001.qcow2', fmt=qcow2 size=1073741824 backing_file='/tmp/master.img' encryption=off cluster_size=65536 open("/tmp/vm001.qcow2", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory) open("/tmp/vm001.qcow2", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory) open("/tmp/vm001.qcow2", O_WRONLY|O_CREAT|O_TRUNC, 0644) = 6 open("/tmp/vm001.qcow2", O_RDONLY|O_NONBLOCK) = 6 open("/tmp/vm001.qcow2", O_RDONLY|O_NONBLOCK) = 6 open("/tmp/vm001.qcow2", O_RDWR|O_DSYNC|O_CLOEXEC) = 6 open("/tmp/vm001.qcow2", O_RDONLY|O_NONBLOCK) = 6 open("/tmp/vm001.qcow2", O_RDONLY|O_NONBLOCK) = 6 open("/tmp/vm001.qcow2", O_RDWR|O_CLOEXEC) = 6 -- Federico ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] New option for snapshot_blkdev to avoid image creation 2011-10-04 8:27 ` Federico Simoncelli @ 2011-10-04 10:33 ` Stefan Hajnoczi 0 siblings, 0 replies; 9+ messages in thread From: Stefan Hajnoczi @ 2011-10-04 10:33 UTC (permalink / raw) To: Federico Simoncelli; +Cc: abaron, dlaor, qemu-devel On Tue, Oct 04, 2011 at 04:27:42AM -0400, Federico Simoncelli wrote: > ----- Original Message ----- > > From: "Stefan Hajnoczi" <stefanha@gmail.com> > > To: "Federico Simoncelli" <fsimonce@redhat.com> > > Cc: qemu-devel@nongnu.org, abaron@redhat.com, dlaor@redhat.com > > Sent: Tuesday, October 4, 2011 9:33:48 AM > > Subject: Re: [Qemu-devel] New option for snapshot_blkdev to avoid image creation > > > > On Mon, Oct 03, 2011 at 04:09:01PM +0000, Federico Simoncelli wrote: > > > In some situations might be useful to let qemu use an image that > > > was > > > prepared for a live snapshot. > > > The advantage is that creating the snapshot file outside of the > > > qemu > > > process we can use the whole range of options provided by the > > > format > > > (eg for qcow2: encryption, cluster_size and preallocation). > > > It is also possible to pre-set a relative path to the backing file > > > (now it is created by default as absolute path). > > > In the long run it can also avoid the danger of reimplementing > > > qemu-img > > > inside qemu (if we wanted to expose such options when a snapshot is > > > requested). > > > > When the image file is created based on the backing file size: > > > > $ qemu-img create -f qcow2 -o backing_file=master.img vm001.qcow2 > > > > It turns out that bdrv_img_create() opens the backing file with > > read/write permissions. This is generally a bad idea but especially > > dangerous when the VM currently has the image file open already since > > image formats are not designed for multiple initiators (clustering). > > Hi Stefan, are you sure that bdrv_img_create opens the backing file > with read/write permissions? You are absolutely right. BDRV_O_FLAGS does not have BDRV_O_RDWR so it is opening read-only. I missed this when reading the code earlier today. Stefan ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] New option for snapshot_blkdev to avoid image creation 2011-10-03 16:09 [Qemu-devel] New option for snapshot_blkdev to avoid image creation Federico Simoncelli 2011-10-03 16:09 ` [Qemu-devel] [PATCH] qemu: new " Federico Simoncelli 2011-10-04 7:33 ` [Qemu-devel] New " Stefan Hajnoczi @ 2011-10-11 12:30 ` Kevin Wolf 2 siblings, 0 replies; 9+ messages in thread From: Kevin Wolf @ 2011-10-11 12:30 UTC (permalink / raw) To: Federico Simoncelli; +Cc: abaron, dlaor, qemu-devel Am 03.10.2011 18:09, schrieb Federico Simoncelli: > In some situations might be useful to let qemu use an image that was > prepared for a live snapshot. > The advantage is that creating the snapshot file outside of the qemu > process we can use the whole range of options provided by the format > (eg for qcow2: encryption, cluster_size and preallocation). In fact, I don't think encryption works, nor does preallocation work with a backing file. I think you would have to check that the new image file isn't encrypted, doesn't have any clusters allocated, etc. I'm not sure that it makes sense to put the logic into an external program (i.e. make it not available for users not using management tools) when at the same you have to implement the same amount of checks in qemu that verify that the management tool actually did what it is supposed to. > It is also possible to pre-set a relative path to the backing file > (now it is created by default as absolute path). Your code performs a literal string comparison with the old file name used to open the image. So if it was relative on the qemu command line, the backing file link must be relative as well, and if it was absolute on the command line, it must be absolute. > In the long run it can also avoid the danger of reimplementing qemu-img > inside qemu (if we wanted to expose such options when a snapshot is > requested). This is not reimplementing, it is reusing. bdrv_image_create() can do everything that qemu-img create can do. qemu-img has only a thin wrapper around it. The only thing you need to do is exposing the existing options in the monitor. Kevin ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-10-11 12:27 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-10-03 16:09 [Qemu-devel] New option for snapshot_blkdev to avoid image creation Federico Simoncelli 2011-10-03 16:09 ` [Qemu-devel] [PATCH] qemu: new " Federico Simoncelli 2011-10-06 22:45 ` Dor Laor 2011-10-11 11:56 ` Federico Simoncelli 2011-10-11 12:00 ` Dor Laor 2011-10-04 7:33 ` [Qemu-devel] New " Stefan Hajnoczi 2011-10-04 8:27 ` Federico Simoncelli 2011-10-04 10:33 ` Stefan Hajnoczi 2011-10-11 12:30 ` Kevin Wolf
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).