Commit 12fbd416 authored by K. Y. Srinivasan's avatar K. Y. Srinivasan Committed by Greg Kroah-Hartman

Staging: hv: Get rid of the type field from struct hv_storvsc_request

In preparation for consolidating all I/O request state, get rid of the
type field from struct hv_storvsc_request and instead use the
equivalent  state in struct vmscsi_request - data_in field.
In the current code there is a call to zero out the struct vstor_packet in
stor_vsc_on_io_request(). So, to be able to directly set the state in the
vstor_packet in blkvsc_drv.c and storvsc_drv.c, get rid of the call to
zero out the packet in stor_vsc_on_io_request() and instead allocate the
request structure that has been zeroed out.
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: default avatarHaiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: default avatarAbhishek Kane <v-abkane@microsoft.com>
Signed-off-by: default avatarHank Janssen <hjanssen@microsoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 93958465
......@@ -512,7 +512,7 @@ static int blkvsc_do_flush(struct block_device_context *blkdev)
if (blkdev->device_type != HARDDISK_TYPE)
return 0;
blkvsc_req = kmem_cache_alloc(blkdev->request_pool, GFP_KERNEL);
blkvsc_req = kmem_cache_zalloc(blkdev->request_pool, GFP_KERNEL);
if (!blkvsc_req)
return -ENOMEM;
......@@ -553,7 +553,7 @@ static int blkvsc_do_inquiry(struct block_device_context *blkdev)
DPRINT_DBG(BLKVSC_DRV, "blkvsc_do_inquiry()\n");
blkvsc_req = kmem_cache_alloc(blkdev->request_pool, GFP_KERNEL);
blkvsc_req = kmem_cache_zalloc(blkdev->request_pool, GFP_KERNEL);
if (!blkvsc_req)
return -ENOMEM;
......@@ -640,7 +640,7 @@ static int blkvsc_do_read_capacity(struct block_device_context *blkdev)
blkdev->capacity = 0;
blkdev->media_not_present = 0; /* assume a disk is present */
blkvsc_req = kmem_cache_alloc(blkdev->request_pool, GFP_KERNEL);
blkvsc_req = kmem_cache_zalloc(blkdev->request_pool, GFP_KERNEL);
if (!blkvsc_req)
return -ENOMEM;
......@@ -717,7 +717,7 @@ static int blkvsc_do_read_capacity16(struct block_device_context *blkdev)
blkdev->capacity = 0;
blkdev->media_not_present = 0; /* assume a disk is present */
blkvsc_req = kmem_cache_alloc(blkdev->request_pool, GFP_KERNEL);
blkvsc_req = kmem_cache_zalloc(blkdev->request_pool, GFP_KERNEL);
if (!blkvsc_req)
return -ENOMEM;
......@@ -915,6 +915,7 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
struct storvsc_driver_object *storvsc_drv_obj =
drv->priv;
struct hv_storvsc_request *storvsc_req;
struct vmscsi_request *vm_srb;
int ret;
DPRINT_DBG(BLKVSC_DRV, "blkvsc_submit_request() - "
......@@ -935,8 +936,9 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
#endif
storvsc_req = &blkvsc_req->request;
vm_srb = &storvsc_req->extension.vstor_packet.vm_srb;
storvsc_req->type = blkvsc_req->write ? WRITE_TYPE : READ_TYPE;
vm_srb->data_in = blkvsc_req->write ? WRITE_TYPE : READ_TYPE;
storvsc_req->on_io_completion = request_completion;
storvsc_req->context = blkvsc_req;
......@@ -985,7 +987,7 @@ static int blkvsc_do_request(struct block_device_context *blkdev,
(unsigned long)blk_rq_pos(req));
/* Create a group to tie req to list of blkvsc_reqs */
group = kmem_cache_alloc(blkdev->request_pool, GFP_ATOMIC);
group = kmem_cache_zalloc(blkdev->request_pool, GFP_ATOMIC);
if (!group)
return -ENOMEM;
......@@ -1028,7 +1030,9 @@ static int blkvsc_do_request(struct block_device_context *blkdev,
* Create new blkvsc_req to represent
* the current bvec
*/
blkvsc_req = kmem_cache_alloc(blkdev->request_pool, GFP_ATOMIC);
blkvsc_req =
kmem_cache_zalloc(
blkdev->request_pool, GFP_ATOMIC);
if (!blkvsc_req) {
/* free up everything */
list_for_each_entry_safe(
......
......@@ -545,8 +545,6 @@ int stor_vsc_on_io_request(struct hv_device *device,
request_extension->request = request;
request_extension->device = device;
memset(vstor_packet, 0 , sizeof(struct vstor_packet));
vstor_packet->flags |= REQUEST_COMPLETION_FLAG;
vstor_packet->vm_srb.length = sizeof(struct vmscsi_request);
......@@ -562,7 +560,6 @@ int stor_vsc_on_io_request(struct hv_device *device,
vstor_packet->vm_srb.cdb_length = request->cdb_len;
memcpy(&vstor_packet->vm_srb.cdb, request->cdb, request->cdb_len);
vstor_packet->vm_srb.data_in = request->type;
vstor_packet->vm_srb.data_transfer_length = request->data_buffer.len;
vstor_packet->operation = VSTOR_OPERATION_EXECUTE_SRB;
......
......@@ -66,7 +66,6 @@ struct storvsc_request_extension {
};
struct hv_storvsc_request {
enum storvsc_request_type type;
u32 host;
u32 bus;
u32 target_id;
......
......@@ -709,6 +709,7 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd,
int i;
struct scatterlist *sgl;
unsigned int sg_count = 0;
struct vmscsi_request *vm_srb;
DPRINT_DBG(STORVSC_DRV, "scmnd %p dir %d, use_sg %d buf %p len %d "
"queue depth %d tagged %d", scmnd, scmnd->sc_data_direction,
......@@ -752,19 +753,20 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd,
scmnd->host_scribble = (unsigned char *)cmd_request;
request = &cmd_request->request;
vm_srb = &request->extension.vstor_packet.vm_srb;
DPRINT_DBG(STORVSC_DRV, "req %p size %d", request, request_size);
/* Build the SRB */
switch (scmnd->sc_data_direction) {
case DMA_TO_DEVICE:
request->type = WRITE_TYPE;
vm_srb->data_in = WRITE_TYPE;
break;
case DMA_FROM_DEVICE:
request->type = READ_TYPE;
vm_srb->data_in = READ_TYPE;
break;
default:
request->type = UNKNOWN_TYPE;
vm_srb->data_in = UNKNOWN_TYPE;
break;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment