You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
hpsa: correct abort tmf for hba devices
Aborts were not being sent down to HBA devices Reviewed-by: Mahesh Rajashekhara <mahesh.rajashekhara@microsemi.com> Reviewed-by: Justin Lindley <justin.lindley@microsemi.com> Reviewed-by: Scott Teel <scott.teel@microsemi.com> Reviewed-by: Kevin Barnett <kevin.barnett@microsemi.com> Reviewed-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com> Signed-off-by: Don Brace <don.brace@microsemi.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
d9e52fb162
commit
39f3deb2be
+7
-5
@@ -5846,7 +5846,7 @@ static int hpsa_send_abort_ioaccel2(struct ctlr_info *h,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int hpsa_send_abort_both_ways(struct ctlr_info *h,
|
static int hpsa_send_abort_both_ways(struct ctlr_info *h,
|
||||||
unsigned char *scsi3addr, struct CommandList *abort, int reply_queue)
|
struct hpsa_scsi_dev_t *dev, struct CommandList *abort, int reply_queue)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* ioccelerator mode 2 commands should be aborted via the
|
* ioccelerator mode 2 commands should be aborted via the
|
||||||
@@ -5855,14 +5855,16 @@ static int hpsa_send_abort_both_ways(struct ctlr_info *h,
|
|||||||
* Change abort to physical device reset when abort TMF is unsupported.
|
* Change abort to physical device reset when abort TMF is unsupported.
|
||||||
*/
|
*/
|
||||||
if (abort->cmd_type == CMD_IOACCEL2) {
|
if (abort->cmd_type == CMD_IOACCEL2) {
|
||||||
if (HPSATMF_IOACCEL_ENABLED & h->TMFSupportFlags)
|
if ((HPSATMF_IOACCEL_ENABLED & h->TMFSupportFlags) ||
|
||||||
|
dev->physical_device)
|
||||||
return hpsa_send_abort_ioaccel2(h, abort,
|
return hpsa_send_abort_ioaccel2(h, abort,
|
||||||
reply_queue);
|
reply_queue);
|
||||||
else
|
else
|
||||||
return hpsa_send_reset_as_abort_ioaccel2(h, scsi3addr,
|
return hpsa_send_reset_as_abort_ioaccel2(h,
|
||||||
|
dev->scsi3addr,
|
||||||
abort, reply_queue);
|
abort, reply_queue);
|
||||||
}
|
}
|
||||||
return hpsa_send_abort(h, scsi3addr, abort, reply_queue);
|
return hpsa_send_abort(h, dev->scsi3addr, abort, reply_queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find out which reply queue a command was meant to return on */
|
/* Find out which reply queue a command was meant to return on */
|
||||||
@@ -6000,7 +6002,7 @@ static int hpsa_eh_abort_handler(struct scsi_cmnd *sc)
|
|||||||
cmd_free(h, abort);
|
cmd_free(h, abort);
|
||||||
return FAILED;
|
return FAILED;
|
||||||
}
|
}
|
||||||
rc = hpsa_send_abort_both_ways(h, dev->scsi3addr, abort, reply_queue);
|
rc = hpsa_send_abort_both_ways(h, dev, abort, reply_queue);
|
||||||
atomic_inc(&h->abort_cmds_available);
|
atomic_inc(&h->abort_cmds_available);
|
||||||
wake_up_all(&h->abort_cmd_wait_queue);
|
wake_up_all(&h->abort_cmd_wait_queue);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user