From f9d047c505093badbe0459cd998f5fcfe6d41652 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 22 Feb 2012 14:11:26 +0100 Subject: [PATCH 010/109] scsi: push lun field to SCSIDevice RH-Author: Paolo Bonzini Message-id: <1329919979-20948-10-git-send-email-pbonzini@redhat.com> Patchwork-id: 37499 O-Subject: [RHEL 6.3 qemu-kvm PATCH v2 009/102] scsi: push lun field to SCSIDevice Bugzilla: 782029 RH-Acked-by: Gerd Hoffmann RH-Acked-by: Laszlo Ersek RH-Acked-by: Orit Wasserman This will let SCSIBus detect requests sent to an invalid LUN, and handle them itself. However, there will be still support for only one LUN per target Signed-off-by: Paolo Bonzini Signed-off-by: Anthony Liguori (cherry picked from 87dcd1b2c27e88a47be5036e9cf4c2767054eb31) --- hw/scsi-bus.c | 1 + hw/scsi-generic.c | 5 +---- hw/scsi.h | 1 + 3 files changed, 3 insertions(+), 4 deletions(-) Signed-off-by: Michal Novotny --- hw/scsi-bus.c | 1 + hw/scsi-generic.c | 5 +---- hw/scsi.h | 1 + 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index 6780d4d..fc51628 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -16,6 +16,7 @@ static struct BusInfo scsi_bus_info = { .get_fw_dev_path = scsibus_get_fw_dev_path, .props = (Property[]) { DEFINE_PROP_UINT32("scsi-id", SCSIDevice, id, -1), + DEFINE_PROP_UINT32("lun", SCSIDevice, lun, 0), DEFINE_PROP_END_OF_LIST(), }, }; diff --git a/hw/scsi-generic.c b/hw/scsi-generic.c index 2ba882d..f522bc5 100644 --- a/hw/scsi-generic.c +++ b/hw/scsi-generic.c @@ -60,7 +60,6 @@ struct SCSIGenericState { SCSIDevice qdev; BlockDriverState *bs; - int lun; }; static void scsi_free_request(SCSIRequest *req) @@ -292,7 +291,7 @@ static int32_t scsi_send_command(SCSIRequest *req, uint8_t *cmd) SCSIGenericReq *r = DO_UPCAST(SCSIGenericReq, req, req); int ret; - if (cmd[0] != REQUEST_SENSE && req->lun != s->lun) { + if (cmd[0] != REQUEST_SENSE && req->lun != s->qdev.lun) { DPRINTF("Unimplemented LUN %d\n", req->lun); scsi_req_build_sense(&r->req, SENSE_CODE(LUN_NOT_SUPPORTED)); scsi_req_complete(&r->req, CHECK_CONDITION); @@ -466,8 +465,6 @@ static int scsi_generic_initfn(SCSIDevice *dev) } /* define device state */ - s->lun = scsiid.lun; - DPRINTF("LUN %d\n", s->lun); s->qdev.type = scsiid.scsi_type; DPRINTF("device type %d\n", s->qdev.type); if (s->qdev.type == TYPE_TAPE) { diff --git a/hw/scsi.h b/hw/scsi.h index 399671f..1ab515a 100644 --- a/hw/scsi.h +++ b/hw/scsi.h @@ -65,6 +65,7 @@ struct SCSIDevice uint8_t sense[SCSI_SENSE_BUF_SIZE]; uint32_t sense_len; QTAILQ_HEAD(, SCSIRequest) requests; + uint32_t lun; int blocksize; int type; }; -- 1.7.7.6