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) ...@@ -512,7 +512,7 @@ static int blkvsc_do_flush(struct block_device_context *blkdev)
if (blkdev->device_type != HARDDISK_TYPE) if (blkdev->device_type != HARDDISK_TYPE)
return 0; 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) if (!blkvsc_req)
return -ENOMEM; return -ENOMEM;
...@@ -553,7 +553,7 @@ static int blkvsc_do_inquiry(struct block_device_context *blkdev) ...@@ -553,7 +553,7 @@ static int blkvsc_do_inquiry(struct block_device_context *blkdev)
DPRINT_DBG(BLKVSC_DRV, "blkvsc_do_inquiry()\n"); 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) if (!blkvsc_req)
return -ENOMEM; return -ENOMEM;
...@@ -640,7 +640,7 @@ static int blkvsc_do_read_capacity(struct block_device_context *blkdev) ...@@ -640,7 +640,7 @@ static int blkvsc_do_read_capacity(struct block_device_context *blkdev)
blkdev->capacity = 0; blkdev->capacity = 0;
blkdev->media_not_present = 0; /* assume a disk is present */ 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) if (!blkvsc_req)
return -ENOMEM; return -ENOMEM;
...@@ -717,7 +717,7 @@ static int blkvsc_do_read_capacity16(struct block_device_context *blkdev) ...@@ -717,7 +717,7 @@ static int blkvsc_do_read_capacity16(struct block_device_context *blkdev)
blkdev->capacity = 0; blkdev->capacity = 0;
blkdev->media_not_present = 0; /* assume a disk is present */ 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) if (!blkvsc_req)
return -ENOMEM; return -ENOMEM;
...@@ -915,6 +915,7 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req, ...@@ -915,6 +915,7 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
struct storvsc_driver_object *storvsc_drv_obj = struct storvsc_driver_object *storvsc_drv_obj =
drv->priv; drv->priv;
struct hv_storvsc_request *storvsc_req; struct hv_storvsc_request *storvsc_req;
struct vmscsi_request *vm_srb;
int ret; int ret;
DPRINT_DBG(BLKVSC_DRV, "blkvsc_submit_request() - " DPRINT_DBG(BLKVSC_DRV, "blkvsc_submit_request() - "
...@@ -935,8 +936,9 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req, ...@@ -935,8 +936,9 @@ static int blkvsc_submit_request(struct blkvsc_request *blkvsc_req,
#endif #endif
storvsc_req = &blkvsc_req->request; 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->on_io_completion = request_completion;
storvsc_req->context = blkvsc_req; storvsc_req->context = blkvsc_req;
...@@ -985,7 +987,7 @@ static int blkvsc_do_request(struct block_device_context *blkdev, ...@@ -985,7 +987,7 @@ static int blkvsc_do_request(struct block_device_context *blkdev,
(unsigned long)blk_rq_pos(req)); (unsigned long)blk_rq_pos(req));
/* Create a group to tie req to list of blkvsc_reqs */ /* 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) if (!group)
return -ENOMEM; return -ENOMEM;
...@@ -1028,7 +1030,9 @@ static int blkvsc_do_request(struct block_device_context *blkdev, ...@@ -1028,7 +1030,9 @@ static int blkvsc_do_request(struct block_device_context *blkdev,
* Create new blkvsc_req to represent * Create new blkvsc_req to represent
* the current bvec * 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) { if (!blkvsc_req) {
/* free up everything */ /* free up everything */
list_for_each_entry_safe( list_for_each_entry_safe(
......
...@@ -545,8 +545,6 @@ int stor_vsc_on_io_request(struct hv_device *device, ...@@ -545,8 +545,6 @@ int stor_vsc_on_io_request(struct hv_device *device,
request_extension->request = request; request_extension->request = request;
request_extension->device = device; request_extension->device = device;
memset(vstor_packet, 0 , sizeof(struct vstor_packet));
vstor_packet->flags |= REQUEST_COMPLETION_FLAG; vstor_packet->flags |= REQUEST_COMPLETION_FLAG;
vstor_packet->vm_srb.length = sizeof(struct vmscsi_request); vstor_packet->vm_srb.length = sizeof(struct vmscsi_request);
...@@ -562,7 +560,6 @@ int stor_vsc_on_io_request(struct hv_device *device, ...@@ -562,7 +560,6 @@ int stor_vsc_on_io_request(struct hv_device *device,
vstor_packet->vm_srb.cdb_length = request->cdb_len; vstor_packet->vm_srb.cdb_length = request->cdb_len;
memcpy(&vstor_packet->vm_srb.cdb, request->cdb, 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->vm_srb.data_transfer_length = request->data_buffer.len;
vstor_packet->operation = VSTOR_OPERATION_EXECUTE_SRB; vstor_packet->operation = VSTOR_OPERATION_EXECUTE_SRB;
......
...@@ -66,7 +66,6 @@ struct storvsc_request_extension { ...@@ -66,7 +66,6 @@ struct storvsc_request_extension {
}; };
struct hv_storvsc_request { struct hv_storvsc_request {
enum storvsc_request_type type;
u32 host; u32 host;
u32 bus; u32 bus;
u32 target_id; u32 target_id;
......
...@@ -709,6 +709,7 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd, ...@@ -709,6 +709,7 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd,
int i; int i;
struct scatterlist *sgl; struct scatterlist *sgl;
unsigned int sg_count = 0; 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 " 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, "queue depth %d tagged %d", scmnd, scmnd->sc_data_direction,
...@@ -752,19 +753,20 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd, ...@@ -752,19 +753,20 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd,
scmnd->host_scribble = (unsigned char *)cmd_request; scmnd->host_scribble = (unsigned char *)cmd_request;
request = &cmd_request->request; request = &cmd_request->request;
vm_srb = &request->extension.vstor_packet.vm_srb;
DPRINT_DBG(STORVSC_DRV, "req %p size %d", request, request_size); DPRINT_DBG(STORVSC_DRV, "req %p size %d", request, request_size);
/* Build the SRB */ /* Build the SRB */
switch (scmnd->sc_data_direction) { switch (scmnd->sc_data_direction) {
case DMA_TO_DEVICE: case DMA_TO_DEVICE:
request->type = WRITE_TYPE; vm_srb->data_in = WRITE_TYPE;
break; break;
case DMA_FROM_DEVICE: case DMA_FROM_DEVICE:
request->type = READ_TYPE; vm_srb->data_in = READ_TYPE;
break; break;
default: default:
request->type = UNKNOWN_TYPE; vm_srb->data_in = UNKNOWN_TYPE;
break; 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