From f97bfb7f39145b7985fc5e8aec27120450002847 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Sat, 27 Aug 2011 11:31:05 -0700 Subject: [PATCH] --- yaml --- r: 268036 b: refs/heads/master c: f6c17484eb386014ee52d9edc8b3e8263d57c640 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/staging/hv/hyperv_storage.h | 2 +- trunk/drivers/staging/hv/storvsc.c | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 028b7849a993..dc3cb1c70fa3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: df977d6c90632b3868055862262529007019d4ef +refs/heads/master: f6c17484eb386014ee52d9edc8b3e8263d57c640 diff --git a/trunk/drivers/staging/hv/hyperv_storage.h b/trunk/drivers/staging/hv/hyperv_storage.h index a22441386379..d93bf93eb243 100644 --- a/trunk/drivers/staging/hv/hyperv_storage.h +++ b/trunk/drivers/staging/hv/hyperv_storage.h @@ -266,7 +266,7 @@ struct storvsc_device { /* 0 indicates the device is being destroyed */ atomic_t ref_count; - + bool destroy; bool drain_notify; atomic_t num_outstanding_req; diff --git a/trunk/drivers/staging/hv/storvsc.c b/trunk/drivers/staging/hv/storvsc.c index 48bd8dae02e3..0f8c60961ec1 100644 --- a/trunk/drivers/staging/hv/storvsc.c +++ b/trunk/drivers/staging/hv/storvsc.c @@ -43,7 +43,7 @@ static inline struct storvsc_device *alloc_stor_device(struct hv_device *device) /* Set to 2 to allow both inbound and outbound traffics */ /* (ie get_out_stor_device() and get_in_stor_device()) to proceed. */ atomic_set(&stor_device->ref_count, 2); - + stor_device->destroy = false; init_waitqueue_head(&stor_device->waiting_to_drain); stor_device->device = device; device->ext = stor_device; @@ -399,9 +399,15 @@ int storvsc_dev_add(struct hv_device *device, int storvsc_dev_remove(struct hv_device *device) { struct storvsc_device *stor_device; + unsigned long flags; + stor_device = release_stor_device(device); + spin_lock_irqsave(&device->channel->inbound_lock, flags); + stor_device->destroy = true; + spin_unlock_irqrestore(&device->channel->inbound_lock, flags); + /* * At this point, all outbound traffic should be disable. We * only allow inbound traffic (responses) to proceed so that