Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 281036
b: refs/heads/master
c: 1267579
h: refs/heads/master
v: v3
  • Loading branch information
K. Y. Srinivasan authored and Greg Kroah-Hartman committed Nov 27, 2011
1 parent 4fa4fdc commit 6650dd1
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2b9525f511791758b394643b61754a9688e0707d
refs/heads/master: 126757998a50659f79a3f1ff23fccfc40ff1bf5c
38 changes: 38 additions & 0 deletions trunk/drivers/staging/hv/storvsc_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,30 @@ struct storvsc_cmd_request {
struct hv_storvsc_request request;
};

struct storvsc_scan_work {
struct work_struct work;
struct Scsi_Host *host;
uint lun;
};

static void storvsc_bus_scan(struct work_struct *work)
{
struct storvsc_scan_work *wrk;
int id, order_id;

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;

scsi_scan_target(&wrk->host->shost_gendev, 0,
order_id, SCAN_WILD_CARD, 1);
}
kfree(wrk);
}

static inline struct storvsc_device *get_out_stor_device(
struct hv_device *device)
{
Expand Down Expand Up @@ -551,11 +575,25 @@ static void storvsc_on_receive(struct hv_device *device,
struct vstor_packet *vstor_packet,
struct hv_storvsc_request *request)
{
struct storvsc_scan_work *work;
struct storvsc_device *stor_device;

switch (vstor_packet->operation) {
case VSTOR_OPERATION_COMPLETE_IO:
storvsc_on_io_completion(device, vstor_packet, request);
break;

case VSTOR_OPERATION_REMOVE_DEVICE:
case VSTOR_OPERATION_ENUMERATE_BUS:
stor_device = get_in_stor_device(device);
work = kmalloc(sizeof(struct storvsc_scan_work), GFP_ATOMIC);
if (!work)
return;

INIT_WORK(&work->work, storvsc_bus_scan);
work->host = stor_device->host;
schedule_work(&work->work);
break;

default:
break;
Expand Down

0 comments on commit 6650dd1

Please sign in to comment.