mirror of https://github.com/xqemu/xqemu.git
scsi-disk: Fix assertion failure on WRITE SAME
The last portion of an unaligned WRITE SAME command could fail the assertion in bdrv_aligned_pwritev: assert(!qiov || bytes == qiov->size); Because we updated data->iov.iov_len right above this if block, but data->qiov still has the old size. Reinitialize the qiov to make them equal and keep block layer happy. Cc: qemu-stable@nongnu.org Signed-off-by: Fam Zheng <famz@redhat.com> Message-Id: <1438159512-3871-2-git-send-email-famz@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
4bb7b0daf8
commit
a56537a127
|
@ -1683,6 +1683,10 @@ static void scsi_write_same_complete(void *opaque, int ret)
|
|||
if (data->iov.iov_len) {
|
||||
block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct,
|
||||
data->iov.iov_len, BLOCK_ACCT_WRITE);
|
||||
/* blk_aio_write doesn't like the qiov size being different from
|
||||
* nb_sectors, make sure they match.
|
||||
*/
|
||||
qemu_iovec_init_external(&data->qiov, &data->iov, 1);
|
||||
r->req.aiocb = blk_aio_writev(s->qdev.conf.blk, data->sector,
|
||||
&data->qiov, data->iov.iov_len / 512,
|
||||
scsi_write_same_complete, data);
|
||||
|
|
Loading…
Reference in New Issue