virtio-scsi: fix cdb/sense size
Commit "virtio-scsi: use standard-headers" added cdb and sense into req/rep structures, which breaks uses of sizeof for these structures, since qemu adds its own arrays on top. To fix, redefine CDB/sense field size to 0. Reported-by: Fam Zheng <famz@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
		
							parent
							
								
									2106ba3010
								
							
						
					
					
						commit
						03325525c3
					
				| @ -476,7 +476,7 @@ static int virtio_scsi_parse_cdb(SCSIDevice *dev, SCSICommand *cmd, | ||||
|     VirtIOSCSIReq *req = hba_private; | ||||
| 
 | ||||
|     if (cmd->len == 0) { | ||||
|         cmd->len = MIN(VIRTIO_SCSI_CDB_SIZE, SCSI_CMD_BUF_SIZE); | ||||
|         cmd->len = MIN(VIRTIO_SCSI_CDB_DEFAULT_SIZE, SCSI_CMD_BUF_SIZE); | ||||
|         memcpy(cmd->buf, buf, cmd->len); | ||||
|     } | ||||
| 
 | ||||
| @ -642,8 +642,8 @@ static void virtio_scsi_reset(VirtIODevice *vdev) | ||||
|     qbus_reset_all(&s->bus.qbus); | ||||
|     s->resetting--; | ||||
| 
 | ||||
|     vs->sense_size = VIRTIO_SCSI_SENSE_SIZE; | ||||
|     vs->cdb_size = VIRTIO_SCSI_CDB_SIZE; | ||||
|     vs->sense_size = VIRTIO_SCSI_SENSE_DEFAULT_SIZE; | ||||
|     vs->cdb_size = VIRTIO_SCSI_CDB_DEFAULT_SIZE; | ||||
|     s->events_dropped = false; | ||||
| } | ||||
| 
 | ||||
| @ -830,8 +830,8 @@ void virtio_scsi_common_realize(DeviceState *dev, Error **errp, | ||||
|         return; | ||||
|     } | ||||
|     s->cmd_vqs = g_new0(VirtQueue *, s->conf.num_queues); | ||||
|     s->sense_size = VIRTIO_SCSI_SENSE_SIZE; | ||||
|     s->cdb_size = VIRTIO_SCSI_CDB_SIZE; | ||||
|     s->sense_size = VIRTIO_SCSI_SENSE_DEFAULT_SIZE; | ||||
|     s->cdb_size = VIRTIO_SCSI_CDB_DEFAULT_SIZE; | ||||
| 
 | ||||
|     s->ctrl_vq = virtio_add_queue(vdev, VIRTIO_SCSI_VQ_SIZE, | ||||
|                                   ctrl); | ||||
|  | ||||
| @ -14,6 +14,9 @@ | ||||
| #ifndef _QEMU_VIRTIO_SCSI_H | ||||
| #define _QEMU_VIRTIO_SCSI_H | ||||
| 
 | ||||
| /* Override CDB/sense data size: they are dynamic (guest controlled) in QEMU */ | ||||
| #define VIRTIO_SCSI_CDB_SIZE 0 | ||||
| #define VIRTIO_SCSI_SENSE_SIZE 0 | ||||
| #include "standard-headers/linux/virtio_scsi.h" | ||||
| #include "hw/virtio/virtio.h" | ||||
| #include "hw/pci/pci.h" | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Michael S. Tsirkin
						Michael S. Tsirkin