Commit 98441221 authored by K. Y. Srinivasan's avatar K. Y. Srinivasan Committed by Martin K. Petersen

storvsc: Use the specified target ID in device lookup

The current code assumes that there is only one target in device lookup.
Fix this bug. This will alow us to correctly handle hot reomoval of
LUNs.
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: default avatarAlex Ng <alexng@microsoft.com>
Tested-by: default avatarVivek Yadav <vyadav@microsoft.com>
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent d791a8c6
...@@ -478,19 +478,18 @@ struct hv_host_device { ...@@ -478,19 +478,18 @@ struct hv_host_device {
struct storvsc_scan_work { struct storvsc_scan_work {
struct work_struct work; struct work_struct work;
struct Scsi_Host *host; struct Scsi_Host *host;
uint lun; u8 lun;
u8 tgt_id;
}; };
static void storvsc_device_scan(struct work_struct *work) static void storvsc_device_scan(struct work_struct *work)
{ {
struct storvsc_scan_work *wrk; struct storvsc_scan_work *wrk;
uint lun;
struct scsi_device *sdev; struct scsi_device *sdev;
wrk = container_of(work, struct storvsc_scan_work, work); wrk = container_of(work, struct storvsc_scan_work, work);
lun = wrk->lun;
sdev = scsi_device_lookup(wrk->host, 0, 0, lun); sdev = scsi_device_lookup(wrk->host, 0, wrk->tgt_id, wrk->lun);
if (!sdev) if (!sdev)
goto done; goto done;
scsi_rescan_device(&sdev->sdev_gendev); scsi_rescan_device(&sdev->sdev_gendev);
...@@ -541,7 +540,7 @@ static void storvsc_remove_lun(struct work_struct *work) ...@@ -541,7 +540,7 @@ static void storvsc_remove_lun(struct work_struct *work)
if (!scsi_host_get(wrk->host)) if (!scsi_host_get(wrk->host))
goto done; goto done;
sdev = scsi_device_lookup(wrk->host, 0, 0, wrk->lun); sdev = scsi_device_lookup(wrk->host, 0, wrk->tgt_id, wrk->lun);
if (sdev) { if (sdev) {
scsi_remove_device(sdev); scsi_remove_device(sdev);
...@@ -941,6 +940,7 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb, ...@@ -941,6 +940,7 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb,
wrk->host = host; wrk->host = host;
wrk->lun = vm_srb->lun; wrk->lun = vm_srb->lun;
wrk->tgt_id = vm_srb->target_id;
INIT_WORK(&wrk->work, process_err_fn); INIT_WORK(&wrk->work, process_err_fn);
schedule_work(&wrk->work); schedule_work(&wrk->work);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment