All of lore.kernel.org
 help / color / mirror / Atom feed
From: "K. Y. Srinivasan" <kys@microsoft.com>
To: gregkh@suse.de, linux-kernel@vger.kernel.org,
	devel@linuxdriverproject.org, virtualization@lists.osdl.org
Cc: "K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Abhishek Kane <v-abkane@microsoft.com>,
	Hank Janssen <hjanssen@microsoft.com>
Subject: [PATCH 18/22] Staging: hv: Get rid of the status field from struct hv_storvsc_request
Date: Tue,  5 Apr 2011 07:05:02 -0700	[thread overview]
Message-ID: <1302012306-21277-18-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1302012306-21277-1-git-send-email-kys@microsoft.com>

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 <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
 drivers/staging/hv/blkvsc_drv.c  |   23 ++++++++++++++++++-----
 drivers/staging/hv/storvsc.c     |   14 ++++++++++----
 drivers/staging/hv/storvsc_api.h |    2 --
 drivers/staging/hv/storvsc_drv.c |    4 +++-
 4 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 0e3b193..c05a242 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -631,6 +631,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");
 
@@ -649,6 +650,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;
@@ -675,7 +677,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);
 
@@ -708,6 +710,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");
 
@@ -720,6 +723,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);
@@ -752,7 +756,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) {
@@ -1140,13 +1144,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);
@@ -1163,6 +1169,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); */
 
@@ -1199,8 +1206,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
@@ -1229,6 +1238,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;
 
@@ -1257,8 +1267,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 8649044..cee1fe9 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -280,6 +280,7 @@ static void stor_vsc_on_io_completion(struct hv_device *device,
 {
 	struct hv_storvsc_request *request;
 	struct storvsc_device *stor_device;
+	struct vstor_packet *stor_pkt;
 
 	stor_device = must_get_stor_device(device);
 	if (!stor_device) {
@@ -293,20 +294,25 @@ static void stor_vsc_on_io_completion(struct hv_device *device,
 		   vstor_packet->vm_srb.data_transfer_length);
 
 	request = request_ext->request;
+	stor_pkt = &request_ext->vstor_packet;
 
 
 	/* Copy over the status...etc */
-	request->status = vstor_packet->vm_srb.scsi_status;
+	stor_pkt->vm_srb.scsi_status = vstor_packet->vm_srb.scsi_status;
+	stor_pkt->vm_srb.srb_status = vstor_packet->vm_srb.srb_status;
+	stor_pkt->vm_srb.sense_info_length =
+	vstor_packet->vm_srb.sense_info_length;
 
-	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],
+			    stor_pkt->vm_srb.cdb[0],
 			    vstor_packet->vm_srb.scsi_status,
 			    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 */
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index 89fa155..3cfae2d 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -70,10 +70,8 @@ struct storvsc_request_extension {
 };
 
 struct hv_storvsc_request {
-	u32 status;
 	u32 bytes_xfer;
 
-
 	struct storvsc_request_extension extension;
 
 	struct hv_multipage_buffer data_buffer;
diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
index 25b25b3..05ff110 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,
-- 
1.7.4.1

  parent reply	other threads:[~2011-04-05 14:05 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-05 14:04 [RESEND PATCH 00/22] Staging: hv: Cleanup-storage-drivers-phase-II K. Y. Srinivasan
2011-04-05 14:04 ` [PATCH 01/22] Staging: hv: Move the definition of struct storvsc_request_extension K. Y. Srinivasan
2011-04-05 14:04   ` K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 02/22] Staging: hv: Embed struct storvsc_request_extension into hv_storvsc_request K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 03/22] Staging: hv: Get rid of request_ext_size from struct storvsc_driver_object K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 04/22] Staging: hv: Add a function to map a hv_driver pointer to storvsc driver K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 05/22] Staging: hv: Use struct completion in struct storvsc_request_extension K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 06/22] Staging: hv: Allocate request structures zeroed out K. Y. Srinivasan
2011-04-05 14:04     ` K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 07/22] Staging: hv: Get rid of the type field from struct hv_storvsc_request K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 08/22] Staging: hv: Get rid of the host " K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 09/22] Staging: hv: Get rid of the bus " K. Y. Srinivasan
2011-04-05 14:04     ` K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 10/22] Staging: hv: Get rid of the target_id " K. Y. Srinivasan
2011-04-05 14:04     ` K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 11/22] Staging: hv: Get rid of lun_id " K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 12/22] Staging: hv: Get rid of the cdb_len " K. Y. Srinivasan
2011-04-05 14:04     ` K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 13/22] Staging: hv: Get rid of cdb " K. Y. Srinivasan
2011-04-05 14:04     ` K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 14/22] Staging: hv: Get rid of sense_buffer_size " K. Y. Srinivasan
2011-04-05 14:04     ` K. Y. Srinivasan
2011-04-05 14:04   ` [PATCH 15/22] Staging: hv: Move sense_buffer field K. Y. Srinivasan
2011-04-05 14:04     ` K. Y. Srinivasan
2011-04-05 14:05   ` [PATCH 16/22] Staging: hv: Move the context field from struct hv_storvsc_request K. Y. Srinivasan
2011-04-05 14:05   ` [PATCH 17/22] Staging: hv: Move on_io_completion() " K. Y. Srinivasan
2011-04-05 14:05     ` K. Y. Srinivasan
2011-04-05 14:05   ` K. Y. Srinivasan [this message]
2011-04-05 14:05   ` [PATCH 19/22] Staging: hv: Get rid of the bytes_xfer field " K. Y. Srinivasan
2011-04-05 14:05     ` K. Y. Srinivasan
2011-04-05 14:05   ` [PATCH 20/22] Staging: hv: Move the data_buffer " K. Y. Srinivasan
2011-04-05 14:05     ` K. Y. Srinivasan
2011-04-05 14:05   ` [PATCH 21/22] Staging: hv: Rename struct storvsc_request_extension K. Y. Srinivasan
2011-04-05 14:05     ` K. Y. Srinivasan
2011-04-05 14:05   ` [PATCH 22/22] Staging: hv: Get rid of synch primitive in struct blkvsc_request K. Y. Srinivasan
2011-04-05 14:05     ` K. Y. Srinivasan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1302012306-21277-18-git-send-email-kys@microsoft.com \
    --to=kys@microsoft.com \
    --cc=devel@linuxdriverproject.org \
    --cc=gregkh@suse.de \
    --cc=haiyangz@microsoft.com \
    --cc=hjanssen@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=v-abkane@microsoft.com \
    --cc=virtualization@lists.osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.