* [Qemu-devel] [PATCH V4] introduce .bdrv_needs_filename
@ 2013-09-24 15:07 Benoît Canet
2013-09-24 15:07 ` [Qemu-devel] [PATCH V4] block: introduce BlockDriver.bdrv_needs_filename to enable some drivers Benoît Canet
0 siblings, 1 reply; 4+ messages in thread
From: Benoît Canet @ 2013-09-24 15:07 UTC (permalink / raw)
To: qemu-devel; +Cc: kwolf, Benoît Canet, stefanha
v4:
Fix comment [Eric]
Simplify if like the assertion [Kevin]
v3:
Add comment [Eric]
v1-2:
simplify assertion [Kevin]
add .bdrv_needs_filename only to driver to having .bdrv_parse_filename nor
.bdrv_open [Kevin]
Tested that raw, qed and ssh protocols works fine.
Benoît Canet (1):
block: introduce BlockDriver.bdrv_needs_filename to enable some
drivers.
block.c | 5 +++--
block/gluster.c | 4 ++++
block/iscsi.c | 1 +
block/raw-posix.c | 5 +++++
block/raw-win32.c | 2 ++
block/rbd.c | 1 +
block/sheepdog.c | 3 +++
include/block/block_int.h | 6 ++++++
8 files changed, 25 insertions(+), 2 deletions(-)
--
1.8.1.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH V4] block: introduce BlockDriver.bdrv_needs_filename to enable some drivers.
2013-09-24 15:07 [Qemu-devel] [PATCH V4] introduce .bdrv_needs_filename Benoît Canet
@ 2013-09-24 15:07 ` Benoît Canet
2013-09-24 15:21 ` Eric Blake
0 siblings, 1 reply; 4+ messages in thread
From: Benoît Canet @ 2013-09-24 15:07 UTC (permalink / raw)
To: qemu-devel; +Cc: kwolf, Benoît Canet, stefanha
Some drivers will have driver specifics options but no filename.
This new bool allow the block layer to treat them correctly.
The .bdrv_needs_filename is set in drivers not having .bdrv_parse_filename and
not having .bdrv_open.
The first exception to this rule will be the quorum driver.
Signed-off-by: Benoit Canet <benoit@irqsave.net>
---
block.c | 5 +++--
block/gluster.c | 4 ++++
block/iscsi.c | 1 +
block/raw-posix.c | 5 +++++
block/raw-win32.c | 2 ++
block/rbd.c | 1 +
block/sheepdog.c | 3 +++
include/block/block_int.h | 6 ++++++
8 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/block.c b/block.c
index 827549c..989f908 100644
--- a/block.c
+++ b/block.c
@@ -760,7 +760,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,
/* Open the image, either directly or using a protocol */
if (drv->bdrv_file_open) {
assert(file == NULL);
- assert(drv->bdrv_parse_filename || filename != NULL);
+ assert(!drv->bdrv_needs_filename || filename != NULL);
ret = drv->bdrv_file_open(bs, options, open_flags);
} else {
if (file == NULL) {
@@ -870,7 +870,8 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename,
goto fail;
}
qdict_del(options, "filename");
- } else if (!drv->bdrv_parse_filename && !filename) {
+ } else if (drv->bdrv_needs_filename &&
+ !filename) {
qerror_report(ERROR_CLASS_GENERIC_ERROR,
"The '%s' block driver requires a file name",
drv->format_name);
diff --git a/block/gluster.c b/block/gluster.c
index dbb03f4..c124400 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -611,6 +611,7 @@ static BlockDriver bdrv_gluster = {
.format_name = "gluster",
.protocol_name = "gluster",
.instance_size = sizeof(BDRVGlusterState),
+ .bdrv_needs_filename = true,
.bdrv_file_open = qemu_gluster_open,
.bdrv_close = qemu_gluster_close,
.bdrv_create = qemu_gluster_create,
@@ -631,6 +632,7 @@ static BlockDriver bdrv_gluster_tcp = {
.format_name = "gluster",
.protocol_name = "gluster+tcp",
.instance_size = sizeof(BDRVGlusterState),
+ .bdrv_needs_filename = true,
.bdrv_file_open = qemu_gluster_open,
.bdrv_close = qemu_gluster_close,
.bdrv_create = qemu_gluster_create,
@@ -651,6 +653,7 @@ static BlockDriver bdrv_gluster_unix = {
.format_name = "gluster",
.protocol_name = "gluster+unix",
.instance_size = sizeof(BDRVGlusterState),
+ .bdrv_needs_filename = true,
.bdrv_file_open = qemu_gluster_open,
.bdrv_close = qemu_gluster_close,
.bdrv_create = qemu_gluster_create,
@@ -671,6 +674,7 @@ static BlockDriver bdrv_gluster_rdma = {
.format_name = "gluster",
.protocol_name = "gluster+rdma",
.instance_size = sizeof(BDRVGlusterState),
+ .bdrv_needs_filename = true,
.bdrv_file_open = qemu_gluster_open,
.bdrv_close = qemu_gluster_close,
.bdrv_create = qemu_gluster_create,
diff --git a/block/iscsi.c b/block/iscsi.c
index 813abd8..cbe0c84 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -1304,6 +1304,7 @@ static BlockDriver bdrv_iscsi = {
.protocol_name = "iscsi",
.instance_size = sizeof(IscsiLun),
+ .bdrv_needs_filename = true,
.bdrv_file_open = iscsi_open,
.bdrv_close = iscsi_close,
.bdrv_create = iscsi_create,
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 1b41ea3..7ac6b97 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -1198,6 +1198,7 @@ static BlockDriver bdrv_file = {
.format_name = "file",
.protocol_name = "file",
.instance_size = sizeof(BDRVRawState),
+ .bdrv_needs_filename = true,
.bdrv_probe = NULL, /* no probe for protocols */
.bdrv_file_open = raw_open,
.bdrv_reopen_prepare = raw_reopen_prepare,
@@ -1538,6 +1539,7 @@ static BlockDriver bdrv_host_device = {
.format_name = "host_device",
.protocol_name = "host_device",
.instance_size = sizeof(BDRVRawState),
+ .bdrv_needs_filename = true,
.bdrv_probe_device = hdev_probe_device,
.bdrv_file_open = hdev_open,
.bdrv_close = raw_close,
@@ -1662,6 +1664,7 @@ static BlockDriver bdrv_host_floppy = {
.format_name = "host_floppy",
.protocol_name = "host_floppy",
.instance_size = sizeof(BDRVRawState),
+ .bdrv_needs_filename = true,
.bdrv_probe_device = floppy_probe_device,
.bdrv_file_open = floppy_open,
.bdrv_close = raw_close,
@@ -1763,6 +1766,7 @@ static BlockDriver bdrv_host_cdrom = {
.format_name = "host_cdrom",
.protocol_name = "host_cdrom",
.instance_size = sizeof(BDRVRawState),
+ .bdrv_needs_filename = true,
.bdrv_probe_device = cdrom_probe_device,
.bdrv_file_open = cdrom_open,
.bdrv_close = raw_close,
@@ -1884,6 +1888,7 @@ static BlockDriver bdrv_host_cdrom = {
.format_name = "host_cdrom",
.protocol_name = "host_cdrom",
.instance_size = sizeof(BDRVRawState),
+ .bdrv_needs_filename = true,
.bdrv_probe_device = cdrom_probe_device,
.bdrv_file_open = cdrom_open,
.bdrv_close = raw_close,
diff --git a/block/raw-win32.c b/block/raw-win32.c
index d2d2d9f..ac38cf9 100644
--- a/block/raw-win32.c
+++ b/block/raw-win32.c
@@ -456,6 +456,7 @@ static BlockDriver bdrv_file = {
.format_name = "file",
.protocol_name = "file",
.instance_size = sizeof(BDRVRawState),
+ .bdrv_needs_filename = true,
.bdrv_file_open = raw_open,
.bdrv_close = raw_close,
.bdrv_create = raw_create,
@@ -597,6 +598,7 @@ static BlockDriver bdrv_host_device = {
.format_name = "host_device",
.protocol_name = "host_device",
.instance_size = sizeof(BDRVRawState),
+ .bdrv_needs_filename = true,
.bdrv_probe_device = hdev_probe_device,
.bdrv_file_open = hdev_open,
.bdrv_close = raw_close,
diff --git a/block/rbd.c b/block/rbd.c
index e798e19..7c42744 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -981,6 +981,7 @@ static QEMUOptionParameter qemu_rbd_create_options[] = {
static BlockDriver bdrv_rbd = {
.format_name = "rbd",
.instance_size = sizeof(BDRVRBDState),
+ .bdrv_needs_filename = true,
.bdrv_file_open = qemu_rbd_open,
.bdrv_close = qemu_rbd_close,
.bdrv_create = qemu_rbd_create,
diff --git a/block/sheepdog.c b/block/sheepdog.c
index f9988d3..26b0f23 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -2327,6 +2327,7 @@ static BlockDriver bdrv_sheepdog = {
.format_name = "sheepdog",
.protocol_name = "sheepdog",
.instance_size = sizeof(BDRVSheepdogState),
+ .bdrv_needs_filename = true,
.bdrv_file_open = sd_open,
.bdrv_close = sd_close,
.bdrv_create = sd_create,
@@ -2355,6 +2356,7 @@ static BlockDriver bdrv_sheepdog_tcp = {
.format_name = "sheepdog",
.protocol_name = "sheepdog+tcp",
.instance_size = sizeof(BDRVSheepdogState),
+ .bdrv_needs_filename = true,
.bdrv_file_open = sd_open,
.bdrv_close = sd_close,
.bdrv_create = sd_create,
@@ -2383,6 +2385,7 @@ static BlockDriver bdrv_sheepdog_unix = {
.format_name = "sheepdog",
.protocol_name = "sheepdog+unix",
.instance_size = sizeof(BDRVSheepdogState),
+ .bdrv_needs_filename = true,
.bdrv_file_open = sd_open,
.bdrv_close = sd_close,
.bdrv_create = sd_create,
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 7c35198..4b85780 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -73,6 +73,12 @@ struct BlockDriver {
/* Any driver implementing this callback is expected to be able to handle
* NULL file names in its .bdrv_open() implementation */
void (*bdrv_parse_filename)(const char *filename, QDict *options, Error **errp);
+ /* Drivers not implementing bdrv_parse_filename nor bdrv_open should have
+ * this field set to true, except ones that are defined only by their
+ * child's bs.
+ * An example of the last type will be the quorum block driver.
+ */
+ bool bdrv_needs_filename;
/* For handling image reopen for split or non-split files */
int (*bdrv_reopen_prepare)(BDRVReopenState *reopen_state,
--
1.8.1.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH V4] block: introduce BlockDriver.bdrv_needs_filename to enable some drivers.
2013-09-24 15:07 ` [Qemu-devel] [PATCH V4] block: introduce BlockDriver.bdrv_needs_filename to enable some drivers Benoît Canet
@ 2013-09-24 15:21 ` Eric Blake
2013-09-25 11:25 ` Kevin Wolf
0 siblings, 1 reply; 4+ messages in thread
From: Eric Blake @ 2013-09-24 15:21 UTC (permalink / raw)
To: Benoît Canet; +Cc: kwolf, qemu-devel, stefanha
[-- Attachment #1: Type: text/plain, Size: 939 bytes --]
On 09/24/2013 09:07 AM, Benoît Canet wrote:
> Some drivers will have driver specifics options but no filename.
> This new bool allow the block layer to treat them correctly.
>
> The .bdrv_needs_filename is set in drivers not having .bdrv_parse_filename and
> not having .bdrv_open.
>
> The first exception to this rule will be the quorum driver.
>
> Signed-off-by: Benoit Canet <benoit@irqsave.net>
> ---
> block.c | 5 +++--
> block/gluster.c | 4 ++++
> block/iscsi.c | 1 +
> block/raw-posix.c | 5 +++++
> block/raw-win32.c | 2 ++
> block/rbd.c | 1 +
> block/sheepdog.c | 3 +++
> include/block/block_int.h | 6 ++++++
> 8 files changed, 25 insertions(+), 2 deletions(-)
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 621 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH V4] block: introduce BlockDriver.bdrv_needs_filename to enable some drivers.
2013-09-24 15:21 ` Eric Blake
@ 2013-09-25 11:25 ` Kevin Wolf
0 siblings, 0 replies; 4+ messages in thread
From: Kevin Wolf @ 2013-09-25 11:25 UTC (permalink / raw)
To: Eric Blake; +Cc: Benoît Canet, stefanha, qemu-devel
Am 24.09.2013 um 17:21 hat Eric Blake geschrieben:
> On 09/24/2013 09:07 AM, Benoît Canet wrote:
> > Some drivers will have driver specifics options but no filename.
> > This new bool allow the block layer to treat them correctly.
> >
> > The .bdrv_needs_filename is set in drivers not having .bdrv_parse_filename and
> > not having .bdrv_open.
> >
> > The first exception to this rule will be the quorum driver.
> >
> > Signed-off-by: Benoit Canet <benoit@irqsave.net>
> > ---
> > block.c | 5 +++--
> > block/gluster.c | 4 ++++
> > block/iscsi.c | 1 +
> > block/raw-posix.c | 5 +++++
> > block/raw-win32.c | 2 ++
> > block/rbd.c | 1 +
> > block/sheepdog.c | 3 +++
> > include/block/block_int.h | 6 ++++++
> > 8 files changed, 25 insertions(+), 2 deletions(-)
>
> Reviewed-by: Eric Blake <eblake@redhat.com>
Thanks, applied to the block branch (with manual conflict resolution)
Kevin
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-09-25 11:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-24 15:07 [Qemu-devel] [PATCH V4] introduce .bdrv_needs_filename Benoît Canet
2013-09-24 15:07 ` [Qemu-devel] [PATCH V4] block: introduce BlockDriver.bdrv_needs_filename to enable some drivers Benoît Canet
2013-09-24 15:21 ` Eric Blake
2013-09-25 11:25 ` 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).