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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Fam Zheng
						Fam Zheng