* Re: various vmbus review comments
From: Christoph Hellwig @ 2011-05-09 14:33 UTC (permalink / raw)
To: KY Srinivasan
Cc: virtualization@lists.osdl.org, gregkh@suse.de,
linux-kernel@vger.kernel.org, devel@linuxdriverproject.org
In-Reply-To: <6E21E5352C11B742B20C142EB499E0481E0694@TK5EX14MBXC124.redmond.corp.microsoft.com>
On Fri, May 06, 2011 at 01:10:38PM +0000, KY Srinivasan wrote:
> I audited the block and the net drivers. As part of their exit routine,
> they invoke vmbus_child_driver_unregister() after properly cleaning
> up all the devices they are managing. Do you still see an issue with
> regards to module reference counting.
Which is not the correct thing to do as explained in my last round
of reviews. Take a look at the PCI code - the functional driver only
does a foo_untegister_driver (which maps almost directly to
driver_unregister), which then causes the device core to unbind the
devices. The function driver must never call device_unregister
directly as the device continues to exist even if no driver is bound to
it.
^ permalink raw reply
* RE: various vmbus review comments
From: KY Srinivasan @ 2011-05-09 14:56 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Greg KH, gregkh@suse.de, linux-kernel@vger.kernel.org,
devel@linuxdriverproject.org, virtualization@lists.osdl.org
In-Reply-To: <20110509143352.GB29635@infradead.org>
> -----Original Message-----
> From: Christoph Hellwig [mailto:hch@infradead.org]
> Sent: Monday, May 09, 2011 10:34 AM
> To: KY Srinivasan
> Cc: Greg KH; gregkh@suse.de; linux-kernel@vger.kernel.org;
> devel@linuxdriverproject.org; virtualization@lists.osdl.org
> Subject: Re: various vmbus review comments
>
> On Fri, May 06, 2011 at 01:10:38PM +0000, KY Srinivasan wrote:
> > I audited the block and the net drivers. As part of their exit routine,
> > they invoke vmbus_child_driver_unregister() after properly cleaning
> > up all the devices they are managing. Do you still see an issue with
> > regards to module reference counting.
>
> Which is not the correct thing to do as explained in my last round
> of reviews. Take a look at the PCI code - the functional driver only
> does a foo_untegister_driver (which maps almost directly to
> driver_unregister), which then causes the device core to unbind the
> devices. The function driver must never call device_unregister
> directly as the device continues to exist even if no driver is bound to
> it.
I will address this. Greg had a concern about module reference counting
and looking at the current code, it did not appear to be an issue. The
change you are suggesting will not affect the vmbus core which is what I want
to focus on. I will however, fix this issue in the current round of patches I will
send out this week.
Regards,
K. Y
^ permalink raw reply
* [PATCH 001/206] Staging: hv: Get rid of blkvsc_mutex
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978242-22958-1-git-send-email-kys@microsoft.com>
The blkvsc_mutex is unnecessary as the state it is protecting
(blkdev->users) is already protected by the spin lock.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 5 -----
1 files changed, 0 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index db44cf6..cfef1c0 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -27,7 +27,6 @@
#include <linux/major.h>
#include <linux/delay.h>
#include <linux/hdreg.h>
-#include <linux/mutex.h>
#include <linux/slab.h>
#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
@@ -113,8 +112,6 @@ struct block_device_context {
int users;
};
-static DEFINE_MUTEX(blkvsc_mutex);
-
static const char *g_blk_driver_name = "blkvsc";
/* {32412632-86cb-44a2-9b5c-50d1417354f5} */
@@ -620,7 +617,6 @@ static int blkvsc_release(struct gendisk *disk, fmode_t mode)
{
struct block_device_context *blkdev = disk->private_data;
- mutex_lock(&blkvsc_mutex);
spin_lock(&blkdev->lock);
if (blkdev->users == 1) {
spin_unlock(&blkdev->lock);
@@ -631,7 +627,6 @@ static int blkvsc_release(struct gendisk *disk, fmode_t mode)
blkdev->users--;
spin_unlock(&blkdev->lock);
- mutex_unlock(&blkvsc_mutex);
return 0;
}
--
1.7.4.1
^ permalink raw reply related
* [PATCH 002/206] Staging: hv: Cleanup spin lock usage
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
This spin lock is potentially acquired from interrupt context.
Ensure that the interrupts are blocked whenever the lock is held.
The current code was not consistent with regards to blocking
interrupts - the same lock would be acquired without blocking
interrupts in some instance while the interrupts would be blocked
in other instances. Fix this potential deadlock problem.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index cfef1c0..74d51bb 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -249,12 +249,13 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
static int blkvsc_open(struct block_device *bdev, fmode_t mode)
{
struct block_device_context *blkdev = bdev->bd_disk->private_data;
+ unsigned long flags;
- spin_lock(&blkdev->lock);
+ spin_lock_irqsave(&blkdev->lock, flags);
blkdev->users++;
- spin_unlock(&blkdev->lock);
+ spin_unlock_irqrestore(&blkdev->lock, flags);
return 0;
}
@@ -616,17 +617,18 @@ static void blkvsc_shutdown(struct hv_device *dev)
static int blkvsc_release(struct gendisk *disk, fmode_t mode)
{
struct block_device_context *blkdev = disk->private_data;
+ unsigned long flags;
- spin_lock(&blkdev->lock);
+ spin_lock_irqsave(&blkdev->lock, flags);
if (blkdev->users == 1) {
- spin_unlock(&blkdev->lock);
+ spin_unlock_irqrestore(&blkdev->lock, flags);
blkvsc_do_operation(blkdev, DO_FLUSH);
- spin_lock(&blkdev->lock);
+ spin_lock_irqsave(&blkdev->lock, flags);
}
blkdev->users--;
- spin_unlock(&blkdev->lock);
+ spin_unlock_irqrestore(&blkdev->lock, flags);
return 0;
}
--
1.7.4.1
^ permalink raw reply related
* [PATCH 003/206] Staging: hv: Fix some locking issues
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Additional lock related cleanup. Properly serialize access to
state even for command related operations.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 31 +++++++++++++++----------------
1 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 74d51bb..8a577bc 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -331,10 +331,14 @@ static void blkvsc_cmd_completion(struct hv_storvsc_request *request)
(struct block_device_context *)blkvsc_req->dev;
struct scsi_sense_hdr sense_hdr;
struct vmscsi_request *vm_srb;
+ unsigned long flags;
vm_srb = &blkvsc_req->request.vstor_packet.vm_srb;
+
+ spin_lock_irqsave(&blkdev->lock, flags);
blkdev->num_outstanding_reqs--;
+ spin_unlock_irqrestore(&blkdev->lock, flags);
if (vm_srb->scsi_status)
if (scsi_normalize_sense(blkvsc_req->sense_buffer,
@@ -354,6 +358,7 @@ static int blkvsc_do_operation(struct block_device_context *blkdev,
unsigned char device_type;
struct scsi_sense_hdr sense_hdr;
struct vmscsi_request *vm_srb;
+ unsigned long flags;
int ret = 0;
@@ -407,7 +412,9 @@ static int blkvsc_do_operation(struct block_device_context *blkdev,
goto cleanup;
}
+ spin_lock_irqsave(&blkdev->lock, flags);
blkvsc_submit_request(blkvsc_req, blkvsc_cmd_completion);
+ spin_unlock_irqrestore(&blkdev->lock, flags);
wait_for_completion_interruptible(&blkvsc_req->request.wait_event);
@@ -555,6 +562,8 @@ static int blkvsc_remove(struct hv_device *dev)
blk_stop_queue(blkdev->gd->queue);
+ blkvsc_cancel_pending_reqs(blkdev);
+
spin_unlock_irqrestore(&blkdev->lock, flags);
while (blkdev->num_outstanding_reqs) {
@@ -563,13 +572,8 @@ static int blkvsc_remove(struct hv_device *dev)
udelay(100);
}
- blkvsc_do_operation(blkdev, DO_FLUSH);
-
- spin_lock_irqsave(&blkdev->lock, flags);
- blkvsc_cancel_pending_reqs(blkdev);
-
- spin_unlock_irqrestore(&blkdev->lock, flags);
+ blkvsc_do_operation(blkdev, DO_FLUSH);
blk_cleanup_queue(blkdev->gd->queue);
@@ -597,6 +601,8 @@ static void blkvsc_shutdown(struct hv_device *dev)
blk_stop_queue(blkdev->gd->queue);
+ blkvsc_cancel_pending_reqs(blkdev);
+
spin_unlock_irqrestore(&blkdev->lock, flags);
while (blkdev->num_outstanding_reqs) {
@@ -605,13 +611,9 @@ static void blkvsc_shutdown(struct hv_device *dev)
udelay(100);
}
- blkvsc_do_operation(blkdev, DO_FLUSH);
- spin_lock_irqsave(&blkdev->lock, flags);
-
- blkvsc_cancel_pending_reqs(blkdev);
+ blkvsc_do_operation(blkdev, DO_FLUSH);
- spin_unlock_irqrestore(&blkdev->lock, flags);
}
static int blkvsc_release(struct gendisk *disk, fmode_t mode)
@@ -619,16 +621,14 @@ static int blkvsc_release(struct gendisk *disk, fmode_t mode)
struct block_device_context *blkdev = disk->private_data;
unsigned long flags;
- spin_lock_irqsave(&blkdev->lock, flags);
if (blkdev->users == 1) {
- spin_unlock_irqrestore(&blkdev->lock, flags);
blkvsc_do_operation(blkdev, DO_FLUSH);
- spin_lock_irqsave(&blkdev->lock, flags);
}
+ spin_lock_irqsave(&blkdev->lock, flags);
blkdev->users--;
-
spin_unlock_irqrestore(&blkdev->lock, flags);
+
return 0;
}
@@ -943,7 +943,6 @@ static int blkvsc_probe(struct hv_device *dev)
struct storvsc_major_info major_info;
int ret = 0;
-
blkdev = kzalloc(sizeof(struct block_device_context), GFP_KERNEL);
if (!blkdev) {
ret = -ENOMEM;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 004/206] Staging: hv: Rename driver name variable
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Rename the variable g_blk_driver_name.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 8a577bc..b54130b 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -112,7 +112,7 @@ struct block_device_context {
int users;
};
-static const char *g_blk_driver_name = "blkvsc";
+static const char *drv_name = "blkvsc";
/* {32412632-86cb-44a2-9b5c-50d1417354f5} */
static const struct hv_guid g_blk_device_type = {
@@ -177,7 +177,7 @@ static int blk_vsc_initialize(struct hv_driver *driver)
/* Make sure we are at least 2 pages since 1 page is used for control */
- driver->name = g_blk_driver_name;
+ driver->name = drv_name;
memcpy(&driver->dev_type, &g_blk_device_type, sizeof(struct hv_guid));
--
1.7.4.1
^ permalink raw reply related
* [PATCH 005/206] Staging: hv: Rename the device type variable
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Rename the variable g_blk_device_type.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index b54130b..51d1265 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -115,7 +115,7 @@ struct block_device_context {
static const char *drv_name = "blkvsc";
/* {32412632-86cb-44a2-9b5c-50d1417354f5} */
-static const struct hv_guid g_blk_device_type = {
+static const struct hv_guid dev_type = {
.data = {
0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44,
0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5
@@ -178,7 +178,7 @@ static int blk_vsc_initialize(struct hv_driver *driver)
/* Make sure we are at least 2 pages since 1 page is used for control */
driver->name = drv_name;
- memcpy(&driver->dev_type, &g_blk_device_type, sizeof(struct hv_guid));
+ memcpy(&driver->dev_type, &dev_type, sizeof(struct hv_guid));
/*
--
1.7.4.1
^ permalink raw reply related
* [PATCH 006/206] Staging: hv: Change the name of struct storvsc_driver_object
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Rename the struct storvsc_driver_object.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 14 +++++++-------
drivers/staging/hv/storvsc.c | 2 +-
drivers/staging/hv/storvsc_api.h | 8 ++++----
drivers/staging/hv/storvsc_drv.c | 14 +++++++-------
4 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 51d1265..a80e7c1 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -170,7 +170,7 @@ static int blk_vsc_on_device_add(struct hv_device *device,
static int blk_vsc_initialize(struct hv_driver *driver)
{
- struct storvsc_driver_object *stor_driver;
+ struct storvsc_driver *stor_driver;
int ret = 0;
stor_driver = hvdr_to_stordr(driver);
@@ -211,7 +211,7 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
{
struct block_device_context *blkdev = blkvsc_req->dev;
struct hv_device *device_ctx = blkdev->device_ctx;
- struct storvsc_driver_object *storvsc_drv_obj =
+ struct storvsc_driver *storvsc_drv_obj =
drv_to_stordrv(device_ctx->device.driver);
struct hv_storvsc_request *storvsc_req;
struct vmscsi_request *vm_srb;
@@ -544,7 +544,7 @@ out:
*/
static int blkvsc_remove(struct hv_device *dev)
{
- struct storvsc_driver_object *storvsc_drv_obj =
+ struct storvsc_driver *storvsc_drv_obj =
drv_to_stordrv(dev->device.driver);
struct block_device_context *blkdev = dev_get_drvdata(&dev->device);
unsigned long flags;
@@ -852,7 +852,7 @@ static void blkvsc_request(struct request_queue *queue)
/* The one and only one */
-static struct storvsc_driver_object g_blkvsc_drv;
+static struct storvsc_driver g_blkvsc_drv;
static const struct block_device_operations block_ops = {
.owner = THIS_MODULE,
@@ -867,7 +867,7 @@ static const struct block_device_operations block_ops = {
*/
static int blkvsc_drv_init(void)
{
- struct storvsc_driver_object *storvsc_drv_obj = &g_blkvsc_drv;
+ struct storvsc_driver *storvsc_drv_obj = &g_blkvsc_drv;
struct hv_driver *drv = &g_blkvsc_drv.base;
int ret;
@@ -897,7 +897,7 @@ static int blkvsc_drv_exit_cb(struct device *dev, void *data)
static void blkvsc_drv_exit(void)
{
- struct storvsc_driver_object *storvsc_drv_obj = &g_blkvsc_drv;
+ struct storvsc_driver *storvsc_drv_obj = &g_blkvsc_drv;
struct hv_driver *drv = &g_blkvsc_drv.base;
struct device *current_dev;
int ret;
@@ -935,7 +935,7 @@ static void blkvsc_drv_exit(void)
*/
static int blkvsc_probe(struct hv_device *dev)
{
- struct storvsc_driver_object *storvsc_drv_obj =
+ struct storvsc_driver *storvsc_drv_obj =
drv_to_stordrv(dev->device.driver);
struct block_device_context *blkdev = NULL;
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index d53aa97..6be504b 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -411,7 +411,7 @@ static void stor_vsc_on_channel_callback(void *context)
static int stor_vsc_connect_to_vsp(struct hv_device *device)
{
struct vmstorage_channel_properties props;
- struct storvsc_driver_object *stor_driver;
+ struct storvsc_driver *stor_driver;
int ret;
stor_driver = drv_to_stordrv(device->device.driver);
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index b60a058..4ebf50a 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -73,7 +73,7 @@ struct hv_storvsc_request {
/* Represents the block vsc driver */
-struct storvsc_driver_object {
+struct storvsc_driver {
struct hv_driver base;
/* Set by caller (in bytes) */
@@ -149,13 +149,13 @@ static inline void put_stor_device(struct hv_device *device)
atomic_dec(&stor_device->ref_count);
}
-static inline struct storvsc_driver_object *hvdr_to_stordr(struct hv_driver *d)
+static inline struct storvsc_driver *hvdr_to_stordr(struct hv_driver *d)
{
- return container_of(d, struct storvsc_driver_object, base);
+ return container_of(d, struct storvsc_driver, base);
}
static inline
-struct storvsc_driver_object *drv_to_stordrv(struct device_driver *d)
+struct storvsc_driver *drv_to_stordrv(struct device_driver *d)
{
struct hv_driver *hvdrv = drv_to_hv_drv(d);
return hvdr_to_stordr(hvdrv);
diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
index e449481..1fce10e 100644
--- a/drivers/staging/hv/storvsc_drv.c
+++ b/drivers/staging/hv/storvsc_drv.c
@@ -77,7 +77,7 @@ struct storvsc_cmd_request {
*/
static int stor_vsc_initialize(struct hv_driver *driver)
{
- struct storvsc_driver_object *stor_driver;
+ struct storvsc_driver *stor_driver;
stor_driver = hvdr_to_stordr(driver);
@@ -152,7 +152,7 @@ module_param(storvsc_ringbuffer_size, int, S_IRUGO);
MODULE_PARM_DESC(storvsc_ringbuffer_size, "Ring buffer size (bytes)");
/* The one and only one */
-static struct storvsc_driver_object g_storvsc_drv;
+static struct storvsc_driver g_storvsc_drv;
/* Scsi driver */
static struct scsi_host_template scsi_driver = {
@@ -189,7 +189,7 @@ static struct scsi_host_template scsi_driver = {
static int storvsc_drv_init(void)
{
int ret;
- struct storvsc_driver_object *storvsc_drv_obj = &g_storvsc_drv;
+ struct storvsc_driver *storvsc_drv_obj = &g_storvsc_drv;
struct hv_driver *drv = &g_storvsc_drv.base;
storvsc_drv_obj->ring_buffer_size = storvsc_ringbuffer_size;
@@ -286,7 +286,7 @@ static int storvsc_drv_exit_cb(struct device *dev, void *data)
static void storvsc_drv_exit(void)
{
- struct storvsc_driver_object *storvsc_drv_obj = &g_storvsc_drv;
+ struct storvsc_driver *storvsc_drv_obj = &g_storvsc_drv;
struct hv_driver *drv = &g_storvsc_drv.base;
struct device *current_dev = NULL;
int ret;
@@ -323,7 +323,7 @@ static void storvsc_drv_exit(void)
static int storvsc_probe(struct hv_device *device)
{
int ret;
- struct storvsc_driver_object *storvsc_drv_obj =
+ struct storvsc_driver *storvsc_drv_obj =
drv_to_stordrv(device->device.driver);
struct Scsi_Host *host;
struct host_device_context *host_device_ctx;
@@ -400,7 +400,7 @@ static int storvsc_probe(struct hv_device *device)
*/
static int storvsc_remove(struct hv_device *dev)
{
- struct storvsc_driver_object *storvsc_drv_obj =
+ struct storvsc_driver *storvsc_drv_obj =
drv_to_stordrv(dev->device.driver);
struct Scsi_Host *host = dev_get_drvdata(&dev->device);
struct host_device_context *host_device_ctx =
@@ -686,7 +686,7 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd,
struct host_device_context *host_device_ctx =
(struct host_device_context *)scmnd->device->host->hostdata;
struct hv_device *device_ctx = host_device_ctx->device_ctx;
- struct storvsc_driver_object *storvsc_drv_obj =
+ struct storvsc_driver *storvsc_drv_obj =
drv_to_stordrv(device_ctx->device.driver);
struct hv_storvsc_request *request;
struct storvsc_cmd_request *cmd_request;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 007/206] Staging: hv: Change the name of blkvsc driver variable
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Rename the variable g_blkvsc_drv.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index a80e7c1..a0e08de 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -852,7 +852,7 @@ static void blkvsc_request(struct request_queue *queue)
/* The one and only one */
-static struct storvsc_driver g_blkvsc_drv;
+static struct storvsc_driver blkvsc_drv;
static const struct block_device_operations block_ops = {
.owner = THIS_MODULE,
@@ -867,8 +867,8 @@ static const struct block_device_operations block_ops = {
*/
static int blkvsc_drv_init(void)
{
- struct storvsc_driver *storvsc_drv_obj = &g_blkvsc_drv;
- struct hv_driver *drv = &g_blkvsc_drv.base;
+ struct storvsc_driver *storvsc_drv_obj = &blkvsc_drv;
+ struct hv_driver *drv = &blkvsc_drv.base;
int ret;
storvsc_drv_obj->ring_buffer_size = blkvsc_ringbuffer_size;
@@ -897,8 +897,8 @@ static int blkvsc_drv_exit_cb(struct device *dev, void *data)
static void blkvsc_drv_exit(void)
{
- struct storvsc_driver *storvsc_drv_obj = &g_blkvsc_drv;
- struct hv_driver *drv = &g_blkvsc_drv.base;
+ struct storvsc_driver *storvsc_drv_obj = &blkvsc_drv;
+ struct hv_driver *drv = &blkvsc_drv.base;
struct device *current_dev;
int ret;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 008/206] Staging: hv: Rename variables of type struct storvsc_driver *
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization
Cc: K. Y. Srinivasan, Haiyang Zhang, Abhishek Kane, Hank Janssen
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Rename the variables pointing to variables of type struct storvsc_driver *.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 28 ++++++++++++++--------------
1 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index a0e08de..391666e 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -211,7 +211,7 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
{
struct block_device_context *blkdev = blkvsc_req->dev;
struct hv_device *device_ctx = blkdev->device_ctx;
- struct storvsc_driver *storvsc_drv_obj =
+ struct storvsc_driver *storvsc_drv =
drv_to_stordrv(device_ctx->device.driver);
struct hv_storvsc_request *storvsc_req;
struct vmscsi_request *vm_srb;
@@ -237,7 +237,7 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
storvsc_req->sense_buffer = blkvsc_req->sense_buffer;
- ret = storvsc_drv_obj->on_io_request(blkdev->device_ctx,
+ ret = storvsc_drv->on_io_request(blkdev->device_ctx,
&blkvsc_req->request);
if (ret == 0)
blkdev->num_outstanding_reqs++;
@@ -544,7 +544,7 @@ out:
*/
static int blkvsc_remove(struct hv_device *dev)
{
- struct storvsc_driver *storvsc_drv_obj =
+ struct storvsc_driver *storvsc_drv =
drv_to_stordrv(dev->device.driver);
struct block_device_context *blkdev = dev_get_drvdata(&dev->device);
unsigned long flags;
@@ -553,7 +553,7 @@ static int blkvsc_remove(struct hv_device *dev)
* Call to the vsc driver to let it know that the device is being
* removed
*/
- storvsc_drv_obj->base.dev_rm(dev);
+ storvsc_drv->base.dev_rm(dev);
/* Get to a known state */
spin_lock_irqsave(&blkdev->lock, flags);
@@ -867,16 +867,16 @@ static const struct block_device_operations block_ops = {
*/
static int blkvsc_drv_init(void)
{
- struct storvsc_driver *storvsc_drv_obj = &blkvsc_drv;
+ struct storvsc_driver *storvsc_drv = &blkvsc_drv;
struct hv_driver *drv = &blkvsc_drv.base;
int ret;
- storvsc_drv_obj->ring_buffer_size = blkvsc_ringbuffer_size;
+ storvsc_drv->ring_buffer_size = blkvsc_ringbuffer_size;
/* Callback to client driver to complete the initialization */
- blk_vsc_initialize(&storvsc_drv_obj->base);
+ blk_vsc_initialize(&storvsc_drv->base);
- drv->driver.name = storvsc_drv_obj->base.name;
+ drv->driver.name = storvsc_drv->base.name;
drv->probe = blkvsc_probe;
drv->remove = blkvsc_remove;
@@ -897,7 +897,7 @@ static int blkvsc_drv_exit_cb(struct device *dev, void *data)
static void blkvsc_drv_exit(void)
{
- struct storvsc_driver *storvsc_drv_obj = &blkvsc_drv;
+ struct storvsc_driver *storvsc_drv = &blkvsc_drv;
struct hv_driver *drv = &blkvsc_drv.base;
struct device *current_dev;
int ret;
@@ -922,8 +922,8 @@ static void blkvsc_drv_exit(void)
device_unregister(current_dev);
}
- if (storvsc_drv_obj->base.cleanup)
- storvsc_drv_obj->base.cleanup(&storvsc_drv_obj->base);
+ if (storvsc_drv->base.cleanup)
+ storvsc_drv->base.cleanup(&storvsc_drv->base);
vmbus_child_driver_unregister(&drv->driver);
@@ -935,7 +935,7 @@ static void blkvsc_drv_exit(void)
*/
static int blkvsc_probe(struct hv_device *dev)
{
- struct storvsc_driver *storvsc_drv_obj =
+ struct storvsc_driver *storvsc_drv =
drv_to_stordrv(dev->device.driver);
struct block_device_context *blkdev = NULL;
@@ -965,7 +965,7 @@ static int blkvsc_probe(struct hv_device *dev)
/* Call to the vsc driver to add the device */
- ret = storvsc_drv_obj->base.dev_add(dev, &device_info);
+ ret = storvsc_drv->base.dev_add(dev, &device_info);
if (ret != 0)
goto cleanup;
@@ -1035,7 +1035,7 @@ static int blkvsc_probe(struct hv_device *dev)
return ret;
remove:
- storvsc_drv_obj->base.dev_rm(dev);
+ storvsc_drv->base.dev_rm(dev);
cleanup:
if (blkdev) {
--
1.7.4.1
^ permalink raw reply related
* [PATCH 009/206] Staging: hv: Rename the function blk_vsc_on_device_add
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization
Cc: K. Y. Srinivasan, Haiyang Zhang, Abhishek Kane, Hank Janssen
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Rename the function blk_vsc_on_device_add.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 391666e..0005e33 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -139,7 +139,7 @@ MODULE_PARM_DESC(ring_size, "Ring buffer size (in bytes)");
*/
static int blkvsc_probe(struct hv_device *dev);
-static int blk_vsc_on_device_add(struct hv_device *device,
+static int blkvsc_device_add(struct hv_device *device,
void *additional_info)
{
struct storvsc_device_info *device_info;
@@ -197,7 +197,7 @@ static int blk_vsc_initialize(struct hv_driver *driver)
stor_driver->max_outstanding_req_per_channel);
/* Setup the dispatch table */
- stor_driver->base.dev_add = blk_vsc_on_device_add;
+ stor_driver->base.dev_add = blkvsc_device_add;
stor_driver->base.dev_rm = stor_vsc_on_device_remove;
stor_driver->base.cleanup = stor_vsc_on_cleanup;
stor_driver->on_io_request = stor_vsc_on_io_request;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 010/206] Staging: hv: Get rid of the indirection for invoking device_add
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Get rid of the indirection for invoking device_add.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 0005e33..434c2a9 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -197,7 +197,6 @@ static int blk_vsc_initialize(struct hv_driver *driver)
stor_driver->max_outstanding_req_per_channel);
/* Setup the dispatch table */
- stor_driver->base.dev_add = blkvsc_device_add;
stor_driver->base.dev_rm = stor_vsc_on_device_remove;
stor_driver->base.cleanup = stor_vsc_on_cleanup;
stor_driver->on_io_request = stor_vsc_on_io_request;
@@ -964,8 +963,7 @@ static int blkvsc_probe(struct hv_device *dev)
}
- /* Call to the vsc driver to add the device */
- ret = storvsc_drv->base.dev_add(dev, &device_info);
+ ret = blkvsc_device_add(dev, &device_info);
if (ret != 0)
goto cleanup;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 011/206] Staging: hv: Rename the function stor_vsc_device_add
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The subject says it all.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 2 +-
drivers/staging/hv/storvsc.c | 2 +-
drivers/staging/hv/storvsc_api.h | 2 +-
drivers/staging/hv/storvsc_drv.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 434c2a9..908c169 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -147,7 +147,7 @@ static int blkvsc_device_add(struct hv_device *device,
device_info = (struct storvsc_device_info *)additional_info;
- ret = stor_vsc_on_device_add(device, additional_info);
+ ret = storvsc_dev_add(device, additional_info);
if (ret != 0)
return ret;
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index 6be504b..503c6bf 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -442,7 +442,7 @@ static int stor_vsc_connect_to_vsp(struct hv_device *device)
* stor_vsc_on_device_add - Callback when the device belonging to this driver
* is added
*/
-int stor_vsc_on_device_add(struct hv_device *device,
+int storvsc_dev_add(struct hv_device *device,
void *additional_info)
{
struct storvsc_device *stor_device;
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index 4ebf50a..0200154 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -163,7 +163,7 @@ struct storvsc_driver *drv_to_stordrv(struct device_driver *d)
/* Interface */
-int stor_vsc_on_device_add(struct hv_device *device,
+int storvsc_dev_add(struct hv_device *device,
void *additional_info);
int stor_vsc_on_device_remove(struct hv_device *device);
diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
index 1fce10e..5168eb7 100644
--- a/drivers/staging/hv/storvsc_drv.c
+++ b/drivers/staging/hv/storvsc_drv.c
@@ -113,7 +113,7 @@ static int stor_vsc_initialize(struct hv_driver *driver)
STORVSC_MAX_IO_REQUESTS);
/* Setup the dispatch table */
- stor_driver->base.dev_add = stor_vsc_on_device_add;
+ stor_driver->base.dev_add = storvsc_dev_add;
stor_driver->base.dev_rm = stor_vsc_on_device_remove;
stor_driver->base.cleanup = stor_vsc_on_cleanup;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 012/206] Staging: hv: Rename the function stor_vsc_on_device_remove
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization
Cc: K. Y. Srinivasan, Haiyang Zhang, Abhishek Kane, Hank Janssen
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The subject line says it all.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 2 +-
drivers/staging/hv/storvsc.c | 2 +-
drivers/staging/hv/storvsc_api.h | 2 +-
drivers/staging/hv/storvsc_drv.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 908c169..830f257 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -197,7 +197,7 @@ static int blk_vsc_initialize(struct hv_driver *driver)
stor_driver->max_outstanding_req_per_channel);
/* Setup the dispatch table */
- stor_driver->base.dev_rm = stor_vsc_on_device_remove;
+ stor_driver->base.dev_rm = storvsc_dev_remove;
stor_driver->base.cleanup = stor_vsc_on_cleanup;
stor_driver->on_io_request = stor_vsc_on_io_request;
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index 503c6bf..976f382 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -483,7 +483,7 @@ cleanup:
/*
* stor_vsc_on_device_remove - Callback when the our device is being removed
*/
-int stor_vsc_on_device_remove(struct hv_device *device)
+int storvsc_dev_remove(struct hv_device *device)
{
struct storvsc_device *stor_device;
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index 0200154..b3207a0 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -165,7 +165,7 @@ struct storvsc_driver *drv_to_stordrv(struct device_driver *d)
int storvsc_dev_add(struct hv_device *device,
void *additional_info);
-int stor_vsc_on_device_remove(struct hv_device *device);
+int storvsc_dev_remove(struct hv_device *device);
int stor_vsc_on_io_request(struct hv_device *device,
struct hv_storvsc_request *request);
diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
index 5168eb7..903ecbe 100644
--- a/drivers/staging/hv/storvsc_drv.c
+++ b/drivers/staging/hv/storvsc_drv.c
@@ -114,7 +114,7 @@ static int stor_vsc_initialize(struct hv_driver *driver)
/* Setup the dispatch table */
stor_driver->base.dev_add = storvsc_dev_add;
- stor_driver->base.dev_rm = stor_vsc_on_device_remove;
+ stor_driver->base.dev_rm = storvsc_dev_remove;
stor_driver->base.cleanup = stor_vsc_on_cleanup;
stor_driver->on_io_request = stor_vsc_on_io_request;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 013/206] Staging: hv: Get rid of the indirection for removing stor device
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The subject line says it all.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 10 ++--------
1 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 830f257..8b8d960 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -197,7 +197,6 @@ static int blk_vsc_initialize(struct hv_driver *driver)
stor_driver->max_outstanding_req_per_channel);
/* Setup the dispatch table */
- stor_driver->base.dev_rm = storvsc_dev_remove;
stor_driver->base.cleanup = stor_vsc_on_cleanup;
stor_driver->on_io_request = stor_vsc_on_io_request;
@@ -543,8 +542,6 @@ out:
*/
static int blkvsc_remove(struct hv_device *dev)
{
- struct storvsc_driver *storvsc_drv =
- drv_to_stordrv(dev->device.driver);
struct block_device_context *blkdev = dev_get_drvdata(&dev->device);
unsigned long flags;
@@ -552,7 +549,7 @@ static int blkvsc_remove(struct hv_device *dev)
* Call to the vsc driver to let it know that the device is being
* removed
*/
- storvsc_drv->base.dev_rm(dev);
+ storvsc_dev_remove(dev);
/* Get to a known state */
spin_lock_irqsave(&blkdev->lock, flags);
@@ -934,9 +931,6 @@ static void blkvsc_drv_exit(void)
*/
static int blkvsc_probe(struct hv_device *dev)
{
- struct storvsc_driver *storvsc_drv =
- drv_to_stordrv(dev->device.driver);
-
struct block_device_context *blkdev = NULL;
struct storvsc_device_info device_info;
struct storvsc_major_info major_info;
@@ -1033,7 +1027,7 @@ static int blkvsc_probe(struct hv_device *dev)
return ret;
remove:
- storvsc_drv->base.dev_rm(dev);
+ storvsc_dev_remove(dev);
cleanup:
if (blkdev) {
--
1.7.4.1
^ permalink raw reply related
* [PATCH 014/206] Staging: hv: Rename the function stor_vsc_on_cleanup
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The subject line says it all.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 5 ++---
drivers/staging/hv/storvsc.c | 2 +-
drivers/staging/hv/storvsc_api.h | 2 +-
drivers/staging/hv/storvsc_drv.c | 2 +-
4 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 8b8d960..1d0b6ed 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -17,8 +17,7 @@
* Authors:
* Haiyang Zhang <haiyangz@microsoft.com>
* Hank Janssen <hjanssen@microsoft.com>
- *
- * 4/3/2011: K. Y. Srinivasan - Significant restructuring and cleanup.
+ * K. Y. Srinivasan <kys@microsoft.com>
*/
#include <linux/init.h>
#include <linux/module.h>
@@ -197,7 +196,7 @@ static int blk_vsc_initialize(struct hv_driver *driver)
stor_driver->max_outstanding_req_per_channel);
/* Setup the dispatch table */
- stor_driver->base.cleanup = stor_vsc_on_cleanup;
+ stor_driver->base.cleanup = storvsc_cleanup;
stor_driver->on_io_request = stor_vsc_on_io_request;
return ret;
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index 976f382..2e276b4 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -663,7 +663,7 @@ int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
/*
* stor_vsc_on_cleanup - Perform any cleanup when the driver is removed
*/
-void stor_vsc_on_cleanup(struct hv_driver *driver)
+void storvsc_cleanup(struct hv_driver *driver)
{
}
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index b3207a0..3168161 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -169,7 +169,7 @@ int storvsc_dev_remove(struct hv_device *device);
int stor_vsc_on_io_request(struct hv_device *device,
struct hv_storvsc_request *request);
-void stor_vsc_on_cleanup(struct hv_driver *driver);
+void storvsc_cleanup(struct hv_driver *driver);
int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
struct storvsc_major_info *major_info);
diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
index 903ecbe..86f2bab 100644
--- a/drivers/staging/hv/storvsc_drv.c
+++ b/drivers/staging/hv/storvsc_drv.c
@@ -115,7 +115,7 @@ static int stor_vsc_initialize(struct hv_driver *driver)
/* Setup the dispatch table */
stor_driver->base.dev_add = storvsc_dev_add;
stor_driver->base.dev_rm = storvsc_dev_remove;
- stor_driver->base.cleanup = stor_vsc_on_cleanup;
+ stor_driver->base.cleanup = storvsc_cleanup;
stor_driver->on_io_request = stor_vsc_on_io_request;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 015/206] Staging: hv: Get rid of the indirection for invoking cleanup function
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The subject line says it all.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 1d0b6ed..ec00a16 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -196,7 +196,6 @@ static int blk_vsc_initialize(struct hv_driver *driver)
stor_driver->max_outstanding_req_per_channel);
/* Setup the dispatch table */
- stor_driver->base.cleanup = storvsc_cleanup;
stor_driver->on_io_request = stor_vsc_on_io_request;
return ret;
@@ -917,8 +916,7 @@ static void blkvsc_drv_exit(void)
device_unregister(current_dev);
}
- if (storvsc_drv->base.cleanup)
- storvsc_drv->base.cleanup(&storvsc_drv->base);
+ storvsc_cleanup(&storvsc_drv->base);
vmbus_child_driver_unregister(&drv->driver);
--
1.7.4.1
^ permalink raw reply related
* [PATCH 016/206] Staging: hv: Rename the function stor_vsc_on_io_request
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The subject line says it all.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 2 +-
drivers/staging/hv/storvsc.c | 2 +-
drivers/staging/hv/storvsc_api.h | 2 +-
drivers/staging/hv/storvsc_drv.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index ec00a16..bfec15c 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -196,7 +196,7 @@ static int blk_vsc_initialize(struct hv_driver *driver)
stor_driver->max_outstanding_req_per_channel);
/* Setup the dispatch table */
- stor_driver->on_io_request = stor_vsc_on_io_request;
+ stor_driver->on_io_request = storvsc_do_io;
return ret;
}
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index 2e276b4..867eba1 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -520,7 +520,7 @@ int storvsc_dev_remove(struct hv_device *device)
/*
* stor_vsc_on_io_request - Callback to initiate an I/O request
*/
-int stor_vsc_on_io_request(struct hv_device *device,
+int storvsc_do_io(struct hv_device *device,
struct hv_storvsc_request *request)
{
struct storvsc_device *stor_device;
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index 3168161..f8c724b 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -167,7 +167,7 @@ int storvsc_dev_add(struct hv_device *device,
void *additional_info);
int storvsc_dev_remove(struct hv_device *device);
-int stor_vsc_on_io_request(struct hv_device *device,
+int storvsc_do_io(struct hv_device *device,
struct hv_storvsc_request *request);
void storvsc_cleanup(struct hv_driver *driver);
diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
index 86f2bab..799231c 100644
--- a/drivers/staging/hv/storvsc_drv.c
+++ b/drivers/staging/hv/storvsc_drv.c
@@ -117,7 +117,7 @@ static int stor_vsc_initialize(struct hv_driver *driver)
stor_driver->base.dev_rm = storvsc_dev_remove;
stor_driver->base.cleanup = storvsc_cleanup;
- stor_driver->on_io_request = stor_vsc_on_io_request;
+ stor_driver->on_io_request = storvsc_do_io;
return 0;
}
--
1.7.4.1
^ permalink raw reply related
* [PATCH 017/206] Staging: hv: Get rid of the indirection for invoking io request
From: K. Y. Srinivasan @ 2011-05-09 21:54 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The subject line says it all.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 7 +------
1 files changed, 1 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index bfec15c..9de7df7a 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -195,8 +195,6 @@ static int blk_vsc_initialize(struct hv_driver *driver)
DPRINT_INFO(BLKVSC, "max io outstd %u",
stor_driver->max_outstanding_req_per_channel);
- /* Setup the dispatch table */
- stor_driver->on_io_request = storvsc_do_io;
return ret;
}
@@ -206,9 +204,6 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
void (*request_completion)(struct hv_storvsc_request *))
{
struct block_device_context *blkdev = blkvsc_req->dev;
- struct hv_device *device_ctx = blkdev->device_ctx;
- struct storvsc_driver *storvsc_drv =
- drv_to_stordrv(device_ctx->device.driver);
struct hv_storvsc_request *storvsc_req;
struct vmscsi_request *vm_srb;
int ret;
@@ -233,7 +228,7 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
storvsc_req->sense_buffer = blkvsc_req->sense_buffer;
- ret = storvsc_drv->on_io_request(blkdev->device_ctx,
+ ret = storvsc_do_io(blkdev->device_ctx,
&blkvsc_req->request);
if (ret == 0)
blkdev->num_outstanding_reqs++;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 018/206] Staging: hv: Statically initialize pointers for probe etc
From: K. Y. Srinivasan @ 2011-05-09 21:55 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The subject line says it all.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 9de7df7a..bca36b5 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -841,7 +841,11 @@ static void blkvsc_request(struct request_queue *queue)
/* The one and only one */
-static struct storvsc_driver blkvsc_drv;
+static struct storvsc_driver blkvsc_drv = {
+ .base.probe = blkvsc_probe,
+ .base.remove = blkvsc_remove,
+ .base.shutdown = blkvsc_shutdown,
+};
static const struct block_device_operations block_ops = {
.owner = THIS_MODULE,
@@ -867,10 +871,6 @@ static int blkvsc_drv_init(void)
drv->driver.name = storvsc_drv->base.name;
- drv->probe = blkvsc_probe;
- drv->remove = blkvsc_remove;
- drv->shutdown = blkvsc_shutdown;
-
/* The driver belongs to vmbus */
ret = vmbus_child_driver_register(&drv->driver);
--
1.7.4.1
^ permalink raw reply related
* [PATCH 019/206] Staging: hv: Get rid of the calls to storvsc_cleanup
From: K. Y. Srinivasan @ 2011-05-09 21:55 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The storvsc_cleanup() is an empty function; get rid of it.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 3 ---
drivers/staging/hv/storvsc.c | 7 -------
drivers/staging/hv/storvsc_api.h | 1 -
drivers/staging/hv/storvsc_drv.c | 1 -
4 files changed, 0 insertions(+), 12 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index bca36b5..2e69af0 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -886,7 +886,6 @@ static int blkvsc_drv_exit_cb(struct device *dev, void *data)
static void blkvsc_drv_exit(void)
{
- struct storvsc_driver *storvsc_drv = &blkvsc_drv;
struct hv_driver *drv = &blkvsc_drv.base;
struct device *current_dev;
int ret;
@@ -911,8 +910,6 @@ static void blkvsc_drv_exit(void)
device_unregister(current_dev);
}
- storvsc_cleanup(&storvsc_drv->base);
-
vmbus_child_driver_unregister(&drv->driver);
return;
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index 867eba1..7074520 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -660,10 +660,3 @@ int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
return -ENODEV;
}
-/*
- * stor_vsc_on_cleanup - Perform any cleanup when the driver is removed
- */
-void storvsc_cleanup(struct hv_driver *driver)
-{
-}
-
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index f8c724b..84ee5a9 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -169,7 +169,6 @@ int storvsc_dev_remove(struct hv_device *device);
int storvsc_do_io(struct hv_device *device,
struct hv_storvsc_request *request);
-void storvsc_cleanup(struct hv_driver *driver);
int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
struct storvsc_major_info *major_info);
diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
index 799231c..c54a5fe 100644
--- a/drivers/staging/hv/storvsc_drv.c
+++ b/drivers/staging/hv/storvsc_drv.c
@@ -115,7 +115,6 @@ static int stor_vsc_initialize(struct hv_driver *driver)
/* Setup the dispatch table */
stor_driver->base.dev_add = storvsc_dev_add;
stor_driver->base.dev_rm = storvsc_dev_remove;
- stor_driver->base.cleanup = storvsc_cleanup;
stor_driver->on_io_request = storvsc_do_io;
--
1.7.4.1
^ permalink raw reply related
* [PATCH 020/206] Staging: hv: Rename the function stor_vsc_get_major_info()
From: K. Y. Srinivasan @ 2011-05-09 21:55 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The subject line says it all.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 2 +-
drivers/staging/hv/storvsc.c | 2 +-
drivers/staging/hv/storvsc_api.h | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 2e69af0..457d0bb 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -958,7 +958,7 @@ static int blkvsc_probe(struct hv_device *dev)
dev_set_drvdata(&dev->device, blkdev);
- ret = stor_vsc_get_major_info(&device_info, &major_info);
+ ret = storvsc_get_major_info(&device_info, &major_info);
if (ret)
goto cleanup;
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index 7074520..8ee1ad0 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -615,7 +615,7 @@ int storvsc_do_io(struct hv_device *device,
*
*/
-int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
+int storvsc_get_major_info(struct storvsc_device_info *device_info,
struct storvsc_major_info *major_info)
{
static bool ide0_registered;
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index 84ee5a9..32228c0 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -170,7 +170,7 @@ int storvsc_dev_remove(struct hv_device *device);
int storvsc_do_io(struct hv_device *device,
struct hv_storvsc_request *request);
-int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
+int storvsc_get_major_info(struct storvsc_device_info *device_info,
struct storvsc_major_info *major_info);
#endif /* _STORVSC_API_H_ */
--
1.7.4.1
^ permalink raw reply related
* [PATCH 021/206] Staging: hv: Introduce a function to wait to drain outgoing I/O
From: K. Y. Srinivasan @ 2011-05-09 21:55 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Rather than busy loop waiting to drain I/O, introduce a function
that does not burn CPU cycles waiting.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/storvsc.c | 6 +++++-
drivers/staging/hv/storvsc_api.h | 12 ++++++++++++
2 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index 8ee1ad0..36458b8 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -47,6 +47,7 @@ static inline struct storvsc_device *alloc_stor_device(struct hv_device *device)
/* (ie get_stor_device() and must_get_stor_device()) to proceed. */
atomic_cmpxchg(&stor_device->ref_count, 0, 2);
+ init_waitqueue_head(&stor_device->waiting_to_drain);
stor_device->device = device;
device->ext = stor_device;
@@ -332,7 +333,10 @@ static void stor_vsc_on_io_completion(struct hv_device *device,
request->on_io_completion(request);
- atomic_dec(&stor_device->num_outstanding_req);
+ if (atomic_dec_and_test(&stor_device->num_outstanding_req) &&
+ stor_device->drain_notify)
+ wake_up(&stor_device->waiting_to_drain);
+
put_stor_device(device);
}
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index 32228c0..1887940 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -26,6 +26,7 @@
#define _STORVSC_API_H_
#include <linux/kernel.h>
+#include <linux/wait.h>
#include "vstorage.h"
#include "vmbus_api.h"
#include "vmbus.h"
@@ -108,8 +109,11 @@ struct storvsc_device {
/* 0 indicates the device is being destroyed */
atomic_t ref_count;
+ bool drain_notify;
atomic_t num_outstanding_req;
+ wait_queue_head_t waiting_to_drain;
+
/*
* Each unique Port/Path/Target represents 1 channel ie scsi
* controller. In reality, the pathid, targetid is always 0
@@ -161,6 +165,14 @@ struct storvsc_driver *drv_to_stordrv(struct device_driver *d)
return hvdr_to_stordr(hvdrv);
}
+static inline void storvsc_wait_to_drain(struct storvsc_device *dev)
+{
+ dev->drain_notify = true;
+ wait_event(dev->waiting_to_drain,
+ atomic_read(&dev->num_outstanding_req) == 0);
+ dev->drain_notify = false;
+}
+
/* Interface */
int storvsc_dev_add(struct hv_device *device,
--
1.7.4.1
^ permalink raw reply related
* [PATCH 022/206] Staging: hv: Use the newly introduced I/O drain synch method
From: K. Y. Srinivasan @ 2011-05-09 21:55 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
Use the newly introduced I/O drain synch method.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/storvsc.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index 36458b8..8e529d5 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -501,11 +501,8 @@ int storvsc_dev_remove(struct hv_device *device)
* only allow inbound traffic (responses) to proceed so that
* outstanding requests can be completed.
*/
- while (atomic_read(&stor_device->num_outstanding_req)) {
- DPRINT_INFO(STORVSC, "waiting for %d requests to complete...",
- atomic_read(&stor_device->num_outstanding_req));
- udelay(100);
- }
+
+ storvsc_wait_to_drain(stor_device);
DPRINT_INFO(STORVSC, "removing storage device (%p)...",
device->ext);
--
1.7.4.1
^ permalink raw reply related
* [PATCH 023/206] Staging: hv: Cleanup blkvsc_remove()
From: K. Y. Srinivasan @ 2011-05-09 21:55 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization; +Cc: Haiyang Zhang, Abhishek Kane
In-Reply-To: <1304978288-22999-1-git-send-email-kys@microsoft.com>
The function storvsc_dev_remove() already deals with draining of
the outstanding I/O. Cleanup blkvsc_remove() keeping this in mind.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/blkvsc_drv.c | 18 ++++++------------
1 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 457d0bb..217676a 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -538,11 +538,6 @@ static int blkvsc_remove(struct hv_device *dev)
struct block_device_context *blkdev = dev_get_drvdata(&dev->device);
unsigned long flags;
- /*
- * Call to the vsc driver to let it know that the device is being
- * removed
- */
- storvsc_dev_remove(dev);
/* Get to a known state */
spin_lock_irqsave(&blkdev->lock, flags);
@@ -555,17 +550,16 @@ static int blkvsc_remove(struct hv_device *dev)
spin_unlock_irqrestore(&blkdev->lock, flags);
- while (blkdev->num_outstanding_reqs) {
- DPRINT_INFO(STORVSC, "waiting for %d requests to complete...",
- blkdev->num_outstanding_reqs);
- udelay(100);
- }
-
-
blkvsc_do_operation(blkdev, DO_FLUSH);
blk_cleanup_queue(blkdev->gd->queue);
+ /*
+ * Call to the vsc driver to let it know that the device is being
+ * removed
+ */
+ storvsc_dev_remove(dev);
+
del_gendisk(blkdev->gd);
kmem_cache_destroy(blkdev->request_pool);
--
1.7.4.1
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox