Index: qemu/block.c =================================================================== --- qemu.orig/block.c 2010-01-26 10:59:39.757004445 +0100 +++ qemu/block.c 2010-01-26 11:01:38.056023231 +0100 @@ -1689,6 +1689,10 @@ static int multiwrite_merge(BlockDriverS 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)); Index: qemu/qemu-common.h =================================================================== --- qemu.orig/qemu-common.h 2010-01-26 14:41:40.894254285 +0100 +++ qemu/qemu-common.h 2010-01-26 14:42:27.267275698 +0100 @@ -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 #endif