|
@@ -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);
|
|
|
|