From 6dc3f0a7edf15fcaf90270b1ac6de501fe6a60c6 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Mon, 28 Mar 2011 09:33:42 -0700 Subject: [PATCH] Staging: hv: Get rid of the status field from struct hv_storvsc_request In preparation of consolidating all I/O request state, get rid of the status field from struct hv_storvsc_request and instead use the state in the struct vmscsi_request directly. Signed-off-by: K. Y. Srinivasan Signed-off-by: Haiyang Zhang Signed-off-by: Abhishek Kane Signed-off-by: Hank Janssen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/hv/blkvsc_drv.c | 23 ++++++++++++++++++----- drivers/staging/hv/storvsc.c | 8 +++----- drivers/staging/hv/storvsc_api.h | 3 --- drivers/staging/hv/storvsc_drv.c | 6 ++++-- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index 4974db85b521..d0bd6fa5bc1e 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -633,6 +633,7 @@ static int blkvsc_do_read_capacity(struct block_device_context *blkdev) struct page *page_buf; unsigned char *buf; struct scsi_sense_hdr sense_hdr; + struct vmscsi_request *vm_srb; DPRINT_DBG(BLKVSC_DRV, "blkvsc_do_read_capacity()\n"); @@ -651,6 +652,7 @@ static int blkvsc_do_read_capacity(struct block_device_context *blkdev) return -ENOMEM; } + vm_srb = &blkvsc_req->request.extension.vstor_packet.vm_srb; init_waitqueue_head(&blkvsc_req->wevent); blkvsc_req->dev = blkdev; blkvsc_req->req = NULL; @@ -677,7 +679,7 @@ static int blkvsc_do_read_capacity(struct block_device_context *blkdev) wait_event_interruptible(blkvsc_req->wevent, blkvsc_req->cond); /* check error */ - if (blkvsc_req->request.status) { + if (vm_srb->scsi_status) { scsi_normalize_sense(blkvsc_req->sense_buffer, SCSI_SENSE_BUFFERSIZE, &sense_hdr); @@ -710,6 +712,7 @@ static int blkvsc_do_read_capacity16(struct block_device_context *blkdev) struct page *page_buf; unsigned char *buf; struct scsi_sense_hdr sense_hdr; + struct vmscsi_request *vm_srb; DPRINT_DBG(BLKVSC_DRV, "blkvsc_do_read_capacity16()\n"); @@ -722,6 +725,7 @@ static int blkvsc_do_read_capacity16(struct block_device_context *blkdev) return -ENOMEM; memset(blkvsc_req, 0, sizeof(struct blkvsc_request)); + vm_srb = &blkvsc_req->request.extension.vstor_packet.vm_srb; page_buf = alloc_page(GFP_KERNEL); if (!page_buf) { kmem_cache_free(blkvsc_req->dev->request_pool, blkvsc_req); @@ -754,7 +758,7 @@ static int blkvsc_do_read_capacity16(struct block_device_context *blkdev) wait_event_interruptible(blkvsc_req->wevent, blkvsc_req->cond); /* check error */ - if (blkvsc_req->request.status) { + if (vm_srb->scsi_status) { scsi_normalize_sense(blkvsc_req->sense_buffer, SCSI_SENSE_BUFFERSIZE, &sense_hdr); if (sense_hdr.asc == 0x3A) { @@ -1142,13 +1146,15 @@ static void blkvsc_cmd_completion(struct hv_storvsc_request *request) struct block_device_context *blkdev = (struct block_device_context *)blkvsc_req->dev; struct scsi_sense_hdr sense_hdr; + struct vmscsi_request *vm_srb; DPRINT_DBG(BLKVSC_DRV, "blkvsc_cmd_completion() - req %p\n", blkvsc_req); + vm_srb = &blkvsc_req->request.extension.vstor_packet.vm_srb; blkdev->num_outstanding_reqs--; - if (blkvsc_req->request.status) + if (vm_srb->scsi_status) if (scsi_normalize_sense(blkvsc_req->sense_buffer, SCSI_SENSE_BUFFERSIZE, &sense_hdr)) scsi_print_sense_hdr("blkvsc", &sense_hdr); @@ -1165,6 +1171,7 @@ static void blkvsc_request_completion(struct hv_storvsc_request *request) (struct block_device_context *)blkvsc_req->dev; unsigned long flags; struct blkvsc_request *comp_req, *tmp; + struct vmscsi_request *vm_srb; /* ASSERT(blkvsc_req->group); */ @@ -1201,8 +1208,10 @@ static void blkvsc_request_completion(struct hv_storvsc_request *request) list_del(&comp_req->req_entry); + vm_srb = + &comp_req->request.extension.vstor_packet.vm_srb; if (!__blk_end_request(comp_req->req, - (!comp_req->request.status ? 0 : -EIO), + (!vm_srb->scsi_status ? 0 : -EIO), comp_req->sector_count * blkdev->sector_size)) { /* * All the sectors have been xferred ie the @@ -1231,6 +1240,7 @@ static int blkvsc_cancel_pending_reqs(struct block_device_context *blkdev) { struct blkvsc_request *pend_req, *tmp; struct blkvsc_request *comp_req, *tmp2; + struct vmscsi_request *vm_srb; int ret = 0; @@ -1259,8 +1269,11 @@ static int blkvsc_cancel_pending_reqs(struct block_device_context *blkdev) list_del(&comp_req->req_entry); if (comp_req->req) { + vm_srb = + &comp_req->request.extension.vstor_packet. + vm_srb; ret = __blk_end_request(comp_req->req, - (!comp_req->request.status ? 0 : -EIO), + (!vm_srb->scsi_status ? 0 : -EIO), comp_req->sector_count * blkdev->sector_size); diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c index d444cc9dfaf4..6a45d5752c08 100644 --- a/drivers/staging/hv/storvsc.c +++ b/drivers/staging/hv/storvsc.c @@ -296,9 +296,9 @@ static void stor_vsc_on_io_completion(struct hv_device *device, /* Copy over the status...etc */ - request->status = vstor_packet->vm_srb.scsi_status; - if (request->status != 0 || vstor_packet->vm_srb.srb_status != 1) { + if (vstor_packet->vm_srb.scsi_status != 0 || + vstor_packet->vm_srb.srb_status != 1) { DPRINT_WARN(STORVSC, "cmd 0x%x scsi status 0x%x srb status 0x%x\n", vstor_packet->vm_srb.cdb[0], @@ -306,7 +306,7 @@ static void stor_vsc_on_io_completion(struct hv_device *device, vstor_packet->vm_srb.srb_status); } - if ((request->status & 0xFF) == 0x02) { + if ((vstor_packet->vm_srb.scsi_status & 0xFF) == 0x02) { /* CHECK_CONDITION */ if (vstor_packet->vm_srb.srb_status & 0x80) { /* autosense data available */ @@ -321,8 +321,6 @@ static void stor_vsc_on_io_completion(struct hv_device *device, } } - /* TODO: */ - request->bytes_xfer = vstor_packet->vm_srb.data_transfer_length; request->extension.on_io_completion(request); diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h index 89fa15508779..1705b9f2d298 100644 --- a/drivers/staging/hv/storvsc_api.h +++ b/drivers/staging/hv/storvsc_api.h @@ -70,9 +70,6 @@ struct storvsc_request_extension { }; struct hv_storvsc_request { - u32 status; - u32 bytes_xfer; - struct storvsc_request_extension extension; diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index e3e0486df6dc..a2faaef9321d 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -454,6 +454,7 @@ static void storvsc_commmand_completion(struct hv_storvsc_request *request) (struct host_device_context *)scmnd->device->host->hostdata; void (*scsi_done_fn)(struct scsi_cmnd *); struct scsi_sense_hdr sense_hdr; + struct vmscsi_request *vm_srb; /* ASSERT(request == &cmd_request->request); */ /* ASSERT(scmnd); */ @@ -473,7 +474,8 @@ static void storvsc_commmand_completion(struct hv_storvsc_request *request) cmd_request->bounce_sgl_count); } - scmnd->result = request->status; + vm_srb = &request->extension.vstor_packet.vm_srb; + scmnd->result = vm_srb->scsi_status; if (scmnd->result) { if (scsi_normalize_sense(scmnd->sense_buffer, @@ -483,7 +485,7 @@ static void storvsc_commmand_completion(struct hv_storvsc_request *request) /* ASSERT(request->BytesXfer <= request->data_buffer.Length); */ scsi_set_resid(scmnd, - request->data_buffer.len - request->bytes_xfer); + request->data_buffer.len - vm_srb->data_transfer_length); scsi_done_fn = scmnd->scsi_done; -- 2.39.5