diff options
-rw-r--r-- | block.c | 4 | ||||
-rw-r--r-- | qemu-common.h | 4 |
2 files changed, 8 insertions, 0 deletions
@@ -1691,6 +1691,10 @@ static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs, merge = bs->drv->bdrv_merge_requests(bs, &reqs[outidx], &reqs[i]); } + if (reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1 > IOV_MAX) { + merge = 0; + } + if (merge) { size_t size; QEMUIOVector *qiov = qemu_mallocz(sizeof(*qiov)); diff --git a/qemu-common.h b/qemu-common.h index ae4f23b8e8..b09f71757a 100644 --- a/qemu-common.h +++ b/qemu-common.h @@ -54,6 +54,10 @@ struct iovec { void *iov_base; size_t iov_len; }; +/* + * Use the same value as Linux for now. + */ +#define IOV_MAX 1024 #else #include <sys/uio.h> #endif |