mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
Pull request
Note that we're still discussing "block/blkio: Make driver nvme-io_uring take a "path" instead of a "filename"". I have sent the pull request now so everything is ready for the soft freeze tomorrow if we decide to go ahead with the patch. -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEhpWov9P5fNqsNXdanKSrs4Grc8gFAmNgGQkACgkQnKSrs4Gr c8hLFgf/dnszoHO02hjoJCN2LPAxDalyYKzog+ZU8U5VdzJn2gione1jVlf3Xb0l mhTgrioSbKLKXavGZTSwWUki/xRgCJMtG3m07EFmMsLX0QiSOIyzLr0DslQawYdZ FlXyCCyAVTUILz7oUXBqORlfTKsGPHms6nlXQYhitTOsDbPyqbT9nNPKAlfGkqfj Pwn+oWJmjLC0aARpcrB1bXCMbqQrtZGh4bBgfIXRUJmprWqk227bkFvXNCuXU16x PC4oH552+6nyQyRxGpHc3o1W/8gqlxU9DTBb5arDUQaDvsDTKVkuGe2HdDI7knAT /m57/BFVUnA35SYOxX+0piiEbawI6Q== =UWL7 -----END PGP SIGNATURE----- Merge tag 'block-pull-request' of https://gitlab.com/stefanha/qemu into staging Pull request Note that we're still discussing "block/blkio: Make driver nvme-io_uring take a "path" instead of a "filename"". I have sent the pull request now so everything is ready for the soft freeze tomorrow if we decide to go ahead with the patch. # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCAAdFiEEhpWov9P5fNqsNXdanKSrs4Grc8gFAmNgGQkACgkQnKSrs4Gr # c8hLFgf/dnszoHO02hjoJCN2LPAxDalyYKzog+ZU8U5VdzJn2gione1jVlf3Xb0l # mhTgrioSbKLKXavGZTSwWUki/xRgCJMtG3m07EFmMsLX0QiSOIyzLr0DslQawYdZ # FlXyCCyAVTUILz7oUXBqORlfTKsGPHms6nlXQYhitTOsDbPyqbT9nNPKAlfGkqfj # Pwn+oWJmjLC0aARpcrB1bXCMbqQrtZGh4bBgfIXRUJmprWqk227bkFvXNCuXU16x # PC4oH552+6nyQyRxGpHc3o1W/8gqlxU9DTBb5arDUQaDvsDTKVkuGe2HdDI7knAT # /m57/BFVUnA35SYOxX+0piiEbawI6Q== # =UWL7 # -----END PGP SIGNATURE----- # gpg: Signature made Mon 31 Oct 2022 14:50:49 EDT # gpg: using RSA key 8695A8BFD3F97CDAAC35775A9CA4ABB381AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" [ultimate] # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" [ultimate] # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8 * tag 'block-pull-request' of https://gitlab.com/stefanha/qemu: block/blkio: Make driver nvme-io_uring take a "path" instead of a "filename" block/blkio: Tolerate device size changes block/blkio: Add virtio-blk-vfio-pci BlockDriver Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
a11f65ec1b
2 changed files with 63 additions and 6 deletions
|
@ -25,6 +25,7 @@
|
|||
*/
|
||||
#define DRIVER_IO_URING "io_uring"
|
||||
#define DRIVER_NVME_IO_URING "nvme-io_uring"
|
||||
#define DRIVER_VIRTIO_BLK_VFIO_PCI "virtio-blk-vfio-pci"
|
||||
#define DRIVER_VIRTIO_BLK_VHOST_USER "virtio-blk-vhost-user"
|
||||
#define DRIVER_VIRTIO_BLK_VHOST_VDPA "virtio-blk-vhost-vdpa"
|
||||
|
||||
|
@ -639,12 +640,17 @@ static int blkio_io_uring_open(BlockDriverState *bs, QDict *options, int flags,
|
|||
static int blkio_nvme_io_uring(BlockDriverState *bs, QDict *options, int flags,
|
||||
Error **errp)
|
||||
{
|
||||
const char *filename = qdict_get_str(options, "filename");
|
||||
const char *path = qdict_get_try_str(options, "path");
|
||||
BDRVBlkioState *s = bs->opaque;
|
||||
int ret;
|
||||
|
||||
ret = blkio_set_str(s->blkio, "path", filename);
|
||||
qdict_del(options, "filename");
|
||||
if (!path) {
|
||||
error_setg(errp, "missing 'path' option");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = blkio_set_str(s->blkio, "path", path);
|
||||
qdict_del(options, "path");
|
||||
if (ret < 0) {
|
||||
error_setg_errno(errp, -ret, "failed to set path: %s",
|
||||
blkio_get_error_msg());
|
||||
|
@ -704,6 +710,8 @@ static int blkio_file_open(BlockDriverState *bs, QDict *options, int flags,
|
|||
ret = blkio_io_uring_open(bs, options, flags, errp);
|
||||
} else if (strcmp(blkio_driver, DRIVER_NVME_IO_URING) == 0) {
|
||||
ret = blkio_nvme_io_uring(bs, options, flags, errp);
|
||||
} else if (strcmp(blkio_driver, DRIVER_VIRTIO_BLK_VFIO_PCI) == 0) {
|
||||
ret = blkio_virtio_blk_common_open(bs, options, flags, errp);
|
||||
} else if (strcmp(blkio_driver, DRIVER_VIRTIO_BLK_VHOST_USER) == 0) {
|
||||
ret = blkio_virtio_blk_common_open(bs, options, flags, errp);
|
||||
} else if (strcmp(blkio_driver, DRIVER_VIRTIO_BLK_VHOST_VDPA) == 0) {
|
||||
|
@ -845,6 +853,31 @@ static int64_t blkio_getlength(BlockDriverState *bs)
|
|||
return capacity;
|
||||
}
|
||||
|
||||
static int coroutine_fn blkio_truncate(BlockDriverState *bs, int64_t offset,
|
||||
bool exact, PreallocMode prealloc,
|
||||
BdrvRequestFlags flags, Error **errp)
|
||||
{
|
||||
int64_t current_length;
|
||||
|
||||
if (prealloc != PREALLOC_MODE_OFF) {
|
||||
error_setg(errp, "Unsupported preallocation mode '%s'",
|
||||
PreallocMode_str(prealloc));
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
current_length = blkio_getlength(bs);
|
||||
|
||||
if (offset > current_length) {
|
||||
error_setg(errp, "Cannot grow device");
|
||||
return -EINVAL;
|
||||
} else if (exact && offset != current_length) {
|
||||
error_setg(errp, "Cannot resize device");
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int blkio_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
|
||||
{
|
||||
return 0;
|
||||
|
@ -960,10 +993,12 @@ static void blkio_refresh_limits(BlockDriverState *bs, Error **errp)
|
|||
{ \
|
||||
.format_name = name, \
|
||||
.protocol_name = name, \
|
||||
.has_variable_length = true, \
|
||||
.instance_size = sizeof(BDRVBlkioState), \
|
||||
.bdrv_file_open = blkio_file_open, \
|
||||
.bdrv_close = blkio_close, \
|
||||
.bdrv_getlength = blkio_getlength, \
|
||||
.bdrv_co_truncate = blkio_truncate, \
|
||||
.bdrv_get_info = blkio_get_info, \
|
||||
.bdrv_attach_aio_context = blkio_attach_aio_context, \
|
||||
.bdrv_detach_aio_context = blkio_detach_aio_context, \
|
||||
|
@ -986,7 +1021,10 @@ static BlockDriver bdrv_io_uring = BLKIO_DRIVER(
|
|||
|
||||
static BlockDriver bdrv_nvme_io_uring = BLKIO_DRIVER(
|
||||
DRIVER_NVME_IO_URING,
|
||||
.bdrv_needs_filename = true,
|
||||
);
|
||||
|
||||
static BlockDriver bdrv_virtio_blk_vfio_pci = BLKIO_DRIVER(
|
||||
DRIVER_VIRTIO_BLK_VFIO_PCI
|
||||
);
|
||||
|
||||
static BlockDriver bdrv_virtio_blk_vhost_user = BLKIO_DRIVER(
|
||||
|
@ -1001,6 +1039,7 @@ static void bdrv_blkio_init(void)
|
|||
{
|
||||
bdrv_register(&bdrv_io_uring);
|
||||
bdrv_register(&bdrv_nvme_io_uring);
|
||||
bdrv_register(&bdrv_virtio_blk_vfio_pci);
|
||||
bdrv_register(&bdrv_virtio_blk_vhost_user);
|
||||
bdrv_register(&bdrv_virtio_blk_vhost_vdpa);
|
||||
}
|
||||
|
|
|
@ -2960,6 +2960,7 @@
|
|||
'raw', 'rbd',
|
||||
{ 'name': 'replication', 'if': 'CONFIG_REPLICATION' },
|
||||
'ssh', 'throttle', 'vdi', 'vhdx',
|
||||
{ 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' },
|
||||
{ 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' },
|
||||
{ 'name': 'virtio-blk-vhost-vdpa', 'if': 'CONFIG_BLKIO' },
|
||||
'vmdk', 'vpc', 'vvfat' ] }
|
||||
|
@ -3703,12 +3704,26 @@
|
|||
#
|
||||
# Driver specific block device options for the nvme-io_uring backend.
|
||||
#
|
||||
# @filename: path to the image file
|
||||
# @path: path to the image file
|
||||
#
|
||||
# Since: 7.2
|
||||
##
|
||||
{ 'struct': 'BlockdevOptionsNvmeIoUring',
|
||||
'data': { 'filename': 'str' },
|
||||
'data': { 'path': 'str' },
|
||||
'if': 'CONFIG_BLKIO' }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsVirtioBlkVfioPci:
|
||||
#
|
||||
# Driver specific block device options for the virtio-blk-vfio-pci backend.
|
||||
#
|
||||
# @path: path to the PCI device's sysfs directory (e.g.
|
||||
# /sys/bus/pci/devices/0000:00:01.0).
|
||||
#
|
||||
# Since: 7.2
|
||||
##
|
||||
{ 'struct': 'BlockdevOptionsVirtioBlkVfioPci',
|
||||
'data': { 'path': 'str' },
|
||||
'if': 'CONFIG_BLKIO' }
|
||||
|
||||
##
|
||||
|
@ -4390,6 +4405,9 @@
|
|||
'throttle': 'BlockdevOptionsThrottle',
|
||||
'vdi': 'BlockdevOptionsGenericFormat',
|
||||
'vhdx': 'BlockdevOptionsGenericFormat',
|
||||
'virtio-blk-vfio-pci':
|
||||
{ 'type': 'BlockdevOptionsVirtioBlkVfioPci',
|
||||
'if': 'CONFIG_BLKIO' },
|
||||
'virtio-blk-vhost-user':
|
||||
{ 'type': 'BlockdevOptionsVirtioBlkVhostUser',
|
||||
'if': 'CONFIG_BLKIO' },
|
||||
|
|
Loading…
Reference in a new issue