diff options
| -rw-r--r-- | drivers/xen/xen-scsiback.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c index 61653a03a8f5..9faca6a60bb0 100644 --- a/drivers/xen/xen-scsiback.c +++ b/drivers/xen/xen-scsiback.c | |||
| @@ -709,12 +709,11 @@ static int prepare_pending_reqs(struct vscsibk_info *info, | |||
| 709 | static int scsiback_do_cmd_fn(struct vscsibk_info *info) | 709 | static int scsiback_do_cmd_fn(struct vscsibk_info *info) |
| 710 | { | 710 | { |
| 711 | struct vscsiif_back_ring *ring = &info->ring; | 711 | struct vscsiif_back_ring *ring = &info->ring; |
| 712 | struct vscsiif_request *ring_req; | 712 | struct vscsiif_request ring_req; |
| 713 | struct vscsibk_pend *pending_req; | 713 | struct vscsibk_pend *pending_req; |
| 714 | RING_IDX rc, rp; | 714 | RING_IDX rc, rp; |
| 715 | int err, more_to_do; | 715 | int err, more_to_do; |
| 716 | uint32_t result; | 716 | uint32_t result; |
| 717 | uint8_t act; | ||
| 718 | 717 | ||
| 719 | rc = ring->req_cons; | 718 | rc = ring->req_cons; |
| 720 | rp = ring->sring->req_prod; | 719 | rp = ring->sring->req_prod; |
| @@ -735,11 +734,10 @@ static int scsiback_do_cmd_fn(struct vscsibk_info *info) | |||
| 735 | if (!pending_req) | 734 | if (!pending_req) |
| 736 | return 1; | 735 | return 1; |
| 737 | 736 | ||
| 738 | ring_req = RING_GET_REQUEST(ring, rc); | 737 | ring_req = *RING_GET_REQUEST(ring, rc); |
| 739 | ring->req_cons = ++rc; | 738 | ring->req_cons = ++rc; |
| 740 | 739 | ||
| 741 | act = ring_req->act; | 740 | err = prepare_pending_reqs(info, &ring_req, pending_req); |
| 742 | err = prepare_pending_reqs(info, ring_req, pending_req); | ||
| 743 | if (err) { | 741 | if (err) { |
| 744 | switch (err) { | 742 | switch (err) { |
| 745 | case -ENODEV: | 743 | case -ENODEV: |
| @@ -755,9 +753,9 @@ static int scsiback_do_cmd_fn(struct vscsibk_info *info) | |||
| 755 | return 1; | 753 | return 1; |
| 756 | } | 754 | } |
| 757 | 755 | ||
| 758 | switch (act) { | 756 | switch (ring_req.act) { |
| 759 | case VSCSIIF_ACT_SCSI_CDB: | 757 | case VSCSIIF_ACT_SCSI_CDB: |
| 760 | if (scsiback_gnttab_data_map(ring_req, pending_req)) { | 758 | if (scsiback_gnttab_data_map(&ring_req, pending_req)) { |
| 761 | scsiback_fast_flush_area(pending_req); | 759 | scsiback_fast_flush_area(pending_req); |
| 762 | scsiback_do_resp_with_sense(NULL, | 760 | scsiback_do_resp_with_sense(NULL, |
| 763 | DRIVER_ERROR << 24, 0, pending_req); | 761 | DRIVER_ERROR << 24, 0, pending_req); |
| @@ -768,7 +766,7 @@ static int scsiback_do_cmd_fn(struct vscsibk_info *info) | |||
| 768 | break; | 766 | break; |
| 769 | case VSCSIIF_ACT_SCSI_ABORT: | 767 | case VSCSIIF_ACT_SCSI_ABORT: |
| 770 | scsiback_device_action(pending_req, TMR_ABORT_TASK, | 768 | scsiback_device_action(pending_req, TMR_ABORT_TASK, |
| 771 | ring_req->ref_rqid); | 769 | ring_req.ref_rqid); |
| 772 | break; | 770 | break; |
| 773 | case VSCSIIF_ACT_SCSI_RESET: | 771 | case VSCSIIF_ACT_SCSI_RESET: |
| 774 | scsiback_device_action(pending_req, TMR_LUN_RESET, 0); | 772 | scsiback_device_action(pending_req, TMR_LUN_RESET, 0); |
