storvsc: in responce to a scan event, scan the host

The virtual HBA that storvsc implements can support multiple channels and
targets. So, scan the host when the host notifies that a scan is needed.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Long Li <longli@microsoft.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
K. Y. Srinivasan 2014-12-16 13:21:42 -08:00 committed by Christoph Hellwig
parent ead3700d89
commit 2a09ed3d97
1 changed files with 6 additions and 11 deletions

View File

@ -410,21 +410,16 @@ static void storvsc_device_scan(struct work_struct *work)
kfree(wrk);
}
static void storvsc_bus_scan(struct work_struct *work)
static void storvsc_host_scan(struct work_struct *work)
{
struct storvsc_scan_work *wrk;
int id, order_id;
struct Scsi_Host *host;
wrk = container_of(work, struct storvsc_scan_work, work);
for (id = 0; id < wrk->host->max_id; ++id) {
if (wrk->host->reverse_ordering)
order_id = wrk->host->max_id - id - 1;
else
order_id = id;
host = wrk->host;
scsi_scan_host(host);
scsi_scan_target(&wrk->host->shost_gendev, 0,
order_id, SCAN_WILD_CARD, 1);
}
kfree(wrk);
}
@ -1173,7 +1168,7 @@ static void storvsc_on_receive(struct hv_device *device,
if (!work)
return;
INIT_WORK(&work->work, storvsc_bus_scan);
INIT_WORK(&work->work, storvsc_host_scan);
work->host = stor_device->host;
schedule_work(&work->work);
break;