mirror of https://gitlab.com/qemu-project/qemu
block: add BlockLimits.max_iov field
The maximum number of struct iovec elements depends on the BlockDriverState. The raw-posix and iSCSI protocols have a maximum of IOV_MAX but others could have different values. Cc: Peter Lieven <pl@kamp.de> Suggested-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
49cffbc607
commit
bd44feb754
|
@ -166,9 +166,13 @@ void bdrv_refresh_limits(BlockDriverState *bs, Error **errp)
|
||||||
bs->bl.max_transfer_length = bs->file->bs->bl.max_transfer_length;
|
bs->bl.max_transfer_length = bs->file->bs->bl.max_transfer_length;
|
||||||
bs->bl.min_mem_alignment = bs->file->bs->bl.min_mem_alignment;
|
bs->bl.min_mem_alignment = bs->file->bs->bl.min_mem_alignment;
|
||||||
bs->bl.opt_mem_alignment = bs->file->bs->bl.opt_mem_alignment;
|
bs->bl.opt_mem_alignment = bs->file->bs->bl.opt_mem_alignment;
|
||||||
|
bs->bl.max_iov = bs->file->bs->bl.max_iov;
|
||||||
} else {
|
} else {
|
||||||
bs->bl.min_mem_alignment = 512;
|
bs->bl.min_mem_alignment = 512;
|
||||||
bs->bl.opt_mem_alignment = getpagesize();
|
bs->bl.opt_mem_alignment = getpagesize();
|
||||||
|
|
||||||
|
/* Safe default since most protocols use readv()/writev()/etc */
|
||||||
|
bs->bl.max_iov = IOV_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bs->backing) {
|
if (bs->backing) {
|
||||||
|
@ -189,6 +193,9 @@ void bdrv_refresh_limits(BlockDriverState *bs, Error **errp)
|
||||||
bs->bl.min_mem_alignment =
|
bs->bl.min_mem_alignment =
|
||||||
MAX(bs->bl.min_mem_alignment,
|
MAX(bs->bl.min_mem_alignment,
|
||||||
bs->backing->bs->bl.min_mem_alignment);
|
bs->backing->bs->bl.min_mem_alignment);
|
||||||
|
bs->bl.max_iov =
|
||||||
|
MIN(bs->bl.max_iov,
|
||||||
|
bs->backing->bs->bl.max_iov);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Then let the driver override it */
|
/* Then let the driver override it */
|
||||||
|
|
|
@ -330,6 +330,9 @@ typedef struct BlockLimits {
|
||||||
|
|
||||||
/* memory alignment for bounce buffer */
|
/* memory alignment for bounce buffer */
|
||||||
size_t opt_mem_alignment;
|
size_t opt_mem_alignment;
|
||||||
|
|
||||||
|
/* maximum number of iovec elements */
|
||||||
|
int max_iov;
|
||||||
} BlockLimits;
|
} BlockLimits;
|
||||||
|
|
||||||
typedef struct BdrvOpBlocker BdrvOpBlocker;
|
typedef struct BdrvOpBlocker BdrvOpBlocker;
|
||||||
|
|
Loading…
Reference in New Issue