From: Dmitry Fomichev <dmitry.fomichev@wdc.com>
To: qemu-devel@nongnu.org, qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <fam@euphon.net>,
Stefano Stabellini <sstabellini@kernel.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
Max Reitz <mreitz@redhat.com>,
Keith Busch <keith.busch@intel.com>,
Paul Durrant <paul.durrant@citrix.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Anthony Perard <anthony.perard@citrix.com>,
Paolo Bonzini <pbonzini@redhat.com>, John Snow <jsnow@redhat.com>
Subject: [Qemu-devel] [PATCH v2 3/5] block/ide/scsi: Set BLK_PERM_SUPPORT_ZONED
Date: Wed, 17 Jul 2019 17:27:01 -0400 [thread overview]
Message-ID: <20190717212703.10205-4-dmitry.fomichev@wdc.com> (raw)
In-Reply-To: <20190717212703.10205-1-dmitry.fomichev@wdc.com>
Added a new boolean argument to blkconf_apply_backend_options()
to let the common block code know whether the chosen block
backend can handle zoned block devices or not.
blkconf_apply_backend_options() then sets BLK_PERM_SUPPORT_ZONED
permission accordingly. The raw code can then use this permission
to allow or deny opening a zone device by a particular block driver.
Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
---
hw/block/block.c | 8 ++++++--
hw/block/fdc.c | 4 ++--
hw/block/nvme.c | 2 +-
hw/block/virtio-blk.c | 2 +-
hw/block/xen-block.c | 2 +-
hw/ide/qdev.c | 2 +-
hw/scsi/scsi-disk.c | 13 +++++++------
hw/scsi/scsi-generic.c | 2 +-
hw/usb/dev-storage.c | 2 +-
include/hw/block/block.h | 3 ++-
10 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/hw/block/block.c b/hw/block/block.c
index bf56c7612b..23fbe4d567 100644
--- a/hw/block/block.c
+++ b/hw/block/block.c
@@ -86,7 +86,8 @@ void blkconf_blocksizes(BlockConf *conf)
}
bool blkconf_apply_backend_options(BlockConf *conf, bool readonly,
- bool resizable, Error **errp)
+ bool resizable, bool zoned_support,
+ Error **errp)
{
BlockBackend *blk = conf->blk;
BlockdevOnError rerror, werror;
@@ -98,9 +99,12 @@ bool blkconf_apply_backend_options(BlockConf *conf, bool readonly,
if (!readonly) {
perm |= BLK_PERM_WRITE;
}
+ if (zoned_support) {
+ perm |= BLK_PERM_SUPPORT_ZONED;
+ }
shared_perm = BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE_UNCHANGED |
- BLK_PERM_GRAPH_MOD;
+ BLK_PERM_GRAPH_MOD | BLK_PERM_SUPPORT_ZONED;
if (resizable) {
shared_perm |= BLK_PERM_RESIZE;
}
diff --git a/hw/block/fdc.c b/hw/block/fdc.c
index 77af9979de..85efc80992 100644
--- a/hw/block/fdc.c
+++ b/hw/block/fdc.c
@@ -474,7 +474,7 @@ static void fd_change_cb(void *opaque, bool load, Error **errp)
} else {
if (!blkconf_apply_backend_options(drive->conf,
blk_is_read_only(drive->blk), false,
- errp)) {
+ false, errp)) {
return;
}
}
@@ -561,7 +561,7 @@ static void floppy_drive_realize(DeviceState *qdev, Error **errp)
if (!blkconf_apply_backend_options(&dev->conf,
blk_is_read_only(dev->conf.blk),
- false, errp)) {
+ false, false, errp)) {
return;
}
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 36d6a8bb3a..71b35bf4e7 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -1333,7 +1333,7 @@ static void nvme_realize(PCIDevice *pci_dev, Error **errp)
}
blkconf_blocksizes(&n->conf);
if (!blkconf_apply_backend_options(&n->conf, blk_is_read_only(n->conf.blk),
- false, errp)) {
+ false, false, errp)) {
return;
}
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index cbb3729158..8894bdbb0c 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -1123,7 +1123,7 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp)
if (!blkconf_apply_backend_options(&conf->conf,
blk_is_read_only(conf->conf.blk), true,
- errp)) {
+ false, errp)) {
return;
}
s->original_wce = blk_enable_write_cache(conf->conf.blk);
diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
index 69d73196e2..8ed5e9d832 100644
--- a/hw/block/xen-block.c
+++ b/hw/block/xen-block.c
@@ -228,7 +228,7 @@ static void xen_block_realize(XenDevice *xendev, Error **errp)
}
if (!blkconf_apply_backend_options(conf, blockdev->info & VDISK_READONLY,
- true, errp)) {
+ true, false, errp)) {
return;
}
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index 9d8502785d..c0b4a445e4 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -197,7 +197,7 @@ static void ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind, Error **errp)
}
}
if (!blkconf_apply_backend_options(&dev->conf, kind == IDE_CD,
- kind != IDE_CD, errp)) {
+ kind != IDE_CD, false, errp)) {
return;
}
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index 8e95e3e38d..f20815b1d7 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -2315,7 +2315,7 @@ static void scsi_disk_unit_attention_reported(SCSIDevice *dev)
}
}
-static void scsi_realize(SCSIDevice *dev, Error **errp)
+static void scsi_realize(SCSIDevice *dev, bool zoned_support, Error **errp)
{
SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
@@ -2353,7 +2353,8 @@ static void scsi_realize(SCSIDevice *dev, Error **errp)
}
if (!blkconf_apply_backend_options(&dev->conf,
blk_is_read_only(s->qdev.conf.blk),
- dev->type == TYPE_DISK, errp)) {
+ dev->type == TYPE_DISK, zoned_support,
+ errp)) {
return;
}
@@ -2412,7 +2413,7 @@ static void scsi_hd_realize(SCSIDevice *dev, Error **errp)
if (!s->product) {
s->product = g_strdup("QEMU HARDDISK");
}
- scsi_realize(&s->qdev, errp);
+ scsi_realize(&s->qdev, false, errp);
if (ctx) {
aio_context_release(ctx);
}
@@ -2440,7 +2441,7 @@ static void scsi_cd_realize(SCSIDevice *dev, Error **errp)
if (!s->product) {
s->product = g_strdup("QEMU CD-ROM");
}
- scsi_realize(&s->qdev, errp);
+ scsi_realize(&s->qdev, false, errp);
aio_context_release(ctx);
}
@@ -2450,7 +2451,7 @@ static void scsi_disk_realize(SCSIDevice *dev, Error **errp)
Error *local_err = NULL;
if (!dev->conf.blk) {
- scsi_realize(dev, &local_err);
+ scsi_realize(dev, false, &local_err);
assert(local_err);
error_propagate(errp, local_err);
return;
@@ -2643,7 +2644,7 @@ static void scsi_block_realize(SCSIDevice *dev, Error **errp)
*/
s->features |= (1 << SCSI_DISK_F_NO_REMOVABLE_DEVOPS);
- scsi_realize(&s->qdev, errp);
+ scsi_realize(&s->qdev, true, errp);
scsi_generic_read_device_inquiry(&s->qdev);
out:
diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c
index f07891b3f6..a43efe39ec 100644
--- a/hw/scsi/scsi-generic.c
+++ b/hw/scsi/scsi-generic.c
@@ -686,7 +686,7 @@ static void scsi_generic_realize(SCSIDevice *s, Error **errp)
}
if (!blkconf_apply_backend_options(&s->conf,
blk_is_read_only(s->conf.blk),
- true, errp)) {
+ true, true, errp)) {
return;
}
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index 9ffb88ea5b..60d6a92ce1 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -601,7 +601,7 @@ static void usb_msd_storage_realize(USBDevice *dev, Error **errp)
blkconf_blocksizes(&s->conf);
if (!blkconf_apply_backend_options(&s->conf, blk_is_read_only(blk), true,
- errp)) {
+ false, errp)) {
return;
}
diff --git a/include/hw/block/block.h b/include/hw/block/block.h
index 607539057a..f988edc87e 100644
--- a/include/hw/block/block.h
+++ b/include/hw/block/block.h
@@ -85,7 +85,8 @@ bool blkconf_geometry(BlockConf *conf, int *trans,
Error **errp);
void blkconf_blocksizes(BlockConf *conf);
bool blkconf_apply_backend_options(BlockConf *conf, bool readonly,
- bool resizable, Error **errp);
+ bool resizable, bool zoned_support,
+ Error **errp);
/* Hard disk geometry */
--
2.21.0
next prev parent reply other threads:[~2019-07-17 21:28 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-17 21:26 [Qemu-devel] [PATCH v2 0/5] virtio/block: handle zoned backing devices Dmitry Fomichev
2019-07-17 21:26 ` [Qemu-devel] [PATCH v2 1/5] block: Add zoned device model property Dmitry Fomichev
2019-07-17 21:27 ` [Qemu-devel] [PATCH v2 2/5] raw: Recognize zoned backing devices Dmitry Fomichev
2019-07-17 21:27 ` Dmitry Fomichev [this message]
2019-07-18 7:47 ` [Qemu-devel] [PATCH v2 3/5] block/ide/scsi: Set BLK_PERM_SUPPORT_ZONED Paul Durrant
2019-07-17 21:27 ` [Qemu-devel] [PATCH v2 4/5] raw: Don't open ZBDs if backend can't handle them Dmitry Fomichev
2019-07-17 21:27 ` [Qemu-devel] [PATCH v2 5/5] hw/scsi: Check sense key before READ CAPACITY output snoop Dmitry Fomichev
2019-07-18 9:42 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190717212703.10205-4-dmitry.fomichev@wdc.com \
--to=dmitry.fomichev@wdc.com \
--cc=anthony.perard@citrix.com \
--cc=fam@euphon.net \
--cc=jsnow@redhat.com \
--cc=keith.busch@intel.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=mst@redhat.com \
--cc=paul.durrant@citrix.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=sstabellini@kernel.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).