Skip to content

Commit

Permalink
Staging: hv: Move the definition of the function stor_vsc_on_host_res…
Browse files Browse the repository at this point in the history
…et()

stor_vsc_on_host_reset() function is only used in storvsc_drv.c.
Move this function from storvsc.c to storvsc_drv.c

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
K. Y. Srinivasan authored and Greg Kroah-Hartman committed Apr 5, 2011
1 parent 1604b1b commit af3043c
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 56 deletions.
56 changes: 0 additions & 56 deletions drivers/staging/hv/storvsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down
59 changes: 59 additions & 0 deletions drivers/staging/hv/storvsc_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit af3043c

Please sign in to comment.