From e5cae2d76b8d2f391cd7d727cda616ff3d442c74 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Wed, 23 Mar 2011 10:50:33 -0700 Subject: [PATCH] --- yaml --- r: 248929 b: refs/heads/master c: af3043c64a4a87bc0a4596f4952dc194ebc5af72 h: refs/heads/master i: 248927: c84c48c398455bb489fad3a04dbd8c652de85ce3 v: v3 --- [refs] | 2 +- trunk/drivers/staging/hv/storvsc.c | 56 ------------------------ trunk/drivers/staging/hv/storvsc_drv.c | 59 ++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 57 deletions(-) diff --git a/[refs] b/[refs] index 91c4f871fdc4..6b1ffb930adb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1604b1bda3c20534efad534f3fc77470f455d862 +refs/heads/master: af3043c64a4a87bc0a4596f4952dc194ebc5af72 diff --git a/trunk/drivers/staging/hv/storvsc.c b/trunk/drivers/staging/hv/storvsc.c index c576e7b1e250..6801e3738766 100644 --- a/trunk/drivers/staging/hv/storvsc.c +++ b/trunk/drivers/staging/hv/storvsc.c @@ -522,62 +522,6 @@ int stor_vsc_on_device_remove(struct hv_device *device) return 0; } -int stor_vsc_on_host_reset(struct hv_device *device) -{ - struct storvsc_device *stor_device; - struct storvsc_request_extension *request; - struct vstor_packet *vstor_packet; - int ret; - - DPRINT_INFO(STORVSC, "resetting host adapter..."); - - stor_device = get_stor_device(device); - if (!stor_device) { - DPRINT_ERR(STORVSC, "unable to get stor device..." - "device being destroyed?"); - return -1; - } - - request = &stor_device->reset_request; - vstor_packet = &request->vstor_packet; - - init_waitqueue_head(&request->wait_event); - - vstor_packet->operation = VSTOR_OPERATION_RESET_BUS; - vstor_packet->flags = REQUEST_COMPLETION_FLAG; - vstor_packet->vm_srb.path_id = stor_device->path_id; - - request->wait_condition = 0; - ret = vmbus_sendpacket(device->channel, vstor_packet, - sizeof(struct vstor_packet), - (unsigned long)&stor_device->reset_request, - VM_PKT_DATA_INBAND, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - if (ret != 0) { - DPRINT_ERR(STORVSC, "Unable to send reset packet %p ret %d", - vstor_packet, ret); - goto cleanup; - } - - wait_event_timeout(request->wait_event, request->wait_condition, - msecs_to_jiffies(1000)); - if (request->wait_condition == 0) { - ret = -ETIMEDOUT; - goto cleanup; - } - - DPRINT_INFO(STORVSC, "host adapter reset completed"); - - /* - * At this point, all outstanding requests in the adapter - * should have been flushed out and return to us - */ - -cleanup: - put_stor_device(device); - return ret; -} - /* * stor_vsc_on_io_request - Callback to initiate an I/O request */ diff --git a/trunk/drivers/staging/hv/storvsc_drv.c b/trunk/drivers/staging/hv/storvsc_drv.c index 2c51a0728cc1..e0a11958141c 100644 --- a/trunk/drivers/staging/hv/storvsc_drv.c +++ b/trunk/drivers/staging/hv/storvsc_drv.c @@ -36,6 +36,8 @@ #include "version_info.h" #include "vmbus.h" #include "storvsc_api.h" +#include "vstorage.h" +#include "channel.h" static const char *g_driver_name = "storvsc"; @@ -230,6 +232,63 @@ static int storvsc_drv_init(void) return ret; } + +int stor_vsc_on_host_reset(struct hv_device *device) +{ + struct storvsc_device *stor_device; + struct storvsc_request_extension *request; + struct vstor_packet *vstor_packet; + int ret; + + DPRINT_INFO(STORVSC, "resetting host adapter..."); + + stor_device = get_stor_device(device); + if (!stor_device) { + DPRINT_ERR(STORVSC, "unable to get stor device..." + "device being destroyed?"); + return -1; + } + + request = &stor_device->reset_request; + vstor_packet = &request->vstor_packet; + + init_waitqueue_head(&request->wait_event); + + vstor_packet->operation = VSTOR_OPERATION_RESET_BUS; + vstor_packet->flags = REQUEST_COMPLETION_FLAG; + vstor_packet->vm_srb.path_id = stor_device->path_id; + + request->wait_condition = 0; + ret = vmbus_sendpacket(device->channel, vstor_packet, + sizeof(struct vstor_packet), + (unsigned long)&stor_device->reset_request, + VM_PKT_DATA_INBAND, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + if (ret != 0) { + DPRINT_ERR(STORVSC, "Unable to send reset packet %p ret %d", + vstor_packet, ret); + goto cleanup; + } + + wait_event_timeout(request->wait_event, request->wait_condition, + msecs_to_jiffies(1000)); + if (request->wait_condition == 0) { + ret = -ETIMEDOUT; + goto cleanup; + } + + DPRINT_INFO(STORVSC, "host adapter reset completed"); + + /* + * At this point, all outstanding requests in the adapter + * should have been flushed out and return to us + */ + +cleanup: + put_stor_device(device); + return ret; +} + static int storvsc_drv_exit_cb(struct device *dev, void *data) { struct device **curr = (struct device **)data;