diff options
author | Hannes Reinecke <hare@suse.de> | 2017-06-30 19:18:07 +0200 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2017-08-07 20:04:00 +0200 |
commit | 25188423d4c90371a967a688c9bc511dbc5d5ae1 (patch) | |
tree | 0d211eb99b1c14edfce19042e7f80b487afdd785 /drivers/scsi/aacraid/linit.c | |
parent | scsi: aacraid: split off functions to generate reset FIB (diff) | |
download | linux-25188423d4c90371a967a688c9bc511dbc5d5ae1.tar.xz linux-25188423d4c90371a967a688c9bc511dbc5d5ae1.zip |
scsi: aacraid: split off host reset
Split off the host reset parts of aac_eh_reset() into a separate
host reset function.
Signed-off-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/aacraid/linit.c')
-rw-r--r-- | drivers/scsi/aacraid/linit.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 9a8a27f83731..bf21006257b3 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c @@ -874,10 +874,6 @@ static int aac_eh_reset(struct scsi_cmnd* cmd) u32 bus, cid; int ret = FAILED; int status = 0; - __le32 supported_options2 = 0; - bool is_mu_reset; - bool is_ignore_reset; - bool is_doorbell_reset; bus = aac_logical_to_phys(scmd_channel(cmd)); @@ -923,7 +919,7 @@ static int aac_eh_reset(struct scsi_cmnd* cmd) } if (ret == SUCCESS) - goto out; + return ret; } else { @@ -952,8 +948,24 @@ static int aac_eh_reset(struct scsi_cmnd* cmd) dev_err(&aac->pdev->dev, "Adapter health - %d\n", status); count = get_num_of_incomplete_fibs(aac); - if (count == 0) - return SUCCESS; + return (count == 0) ? SUCCESS : FAILED; +} + +/* + * aac_eh_host_reset - Host reset command handling + * @scsi_cmd: SCSI command block causing the reset + * + */ +int aac_eh_host_reset(struct scsi_cmnd *cmd) +{ + struct scsi_device * dev = cmd->device; + struct Scsi_Host * host = dev->host; + struct aac_dev * aac = (struct aac_dev *)host->hostdata; + int ret = FAILED; + __le32 supported_options2 = 0; + bool is_mu_reset; + bool is_ignore_reset; + bool is_doorbell_reset; /* * Check if reset is supported by the firmware @@ -972,10 +984,8 @@ static int aac_eh_reset(struct scsi_cmnd* cmd) && (aac_check_reset != -1 || !is_ignore_reset)) { /* Bypass wait for command quiesce */ aac_reset_adapter(aac, 2, IOP_HWSOFT_RESET); + ret = SUCCESS; } - ret = SUCCESS; - -out: return ret; } @@ -1399,7 +1409,8 @@ static struct scsi_host_template aac_driver_template = { .change_queue_depth = aac_change_queue_depth, .sdev_attrs = aac_dev_attrs, .eh_abort_handler = aac_eh_abort, - .eh_host_reset_handler = aac_eh_reset, + .eh_bus_reset_handler = aac_eh_reset, + .eh_host_reset_handler = aac_eh_host_reset, .can_queue = AAC_NUM_IO_FIB, .this_id = MAXIMUM_NUM_CONTAINERS, .sg_tablesize = 16, |