LCOV - code coverage report
Current view: top level - drivers/scsi - scsi_error.c (source / functions) Hit Total Coverage
Test: landlock.info Lines: 0 911 0.0 %
Date: 2021-04-22 12:43:58 Functions: 0 54 0.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-only
       2             : /*
       3             :  *  scsi_error.c Copyright (C) 1997 Eric Youngdale
       4             :  *
       5             :  *  SCSI error/timeout handling
       6             :  *      Initial versions: Eric Youngdale.  Based upon conversations with
       7             :  *                        Leonard Zubkoff and David Miller at Linux Expo,
       8             :  *                        ideas originating from all over the place.
       9             :  *
      10             :  *      Restructured scsi_unjam_host and associated functions.
      11             :  *      September 04, 2002 Mike Anderson (andmike@us.ibm.com)
      12             :  *
      13             :  *      Forward port of Russell King's (rmk@arm.linux.org.uk) changes and
      14             :  *      minor cleanups.
      15             :  *      September 30, 2002 Mike Anderson (andmike@us.ibm.com)
      16             :  */
      17             : 
      18             : #include <linux/module.h>
      19             : #include <linux/sched.h>
      20             : #include <linux/gfp.h>
      21             : #include <linux/timer.h>
      22             : #include <linux/string.h>
      23             : #include <linux/kernel.h>
      24             : #include <linux/freezer.h>
      25             : #include <linux/kthread.h>
      26             : #include <linux/interrupt.h>
      27             : #include <linux/blkdev.h>
      28             : #include <linux/delay.h>
      29             : #include <linux/jiffies.h>
      30             : 
      31             : #include <scsi/scsi.h>
      32             : #include <scsi/scsi_cmnd.h>
      33             : #include <scsi/scsi_dbg.h>
      34             : #include <scsi/scsi_device.h>
      35             : #include <scsi/scsi_driver.h>
      36             : #include <scsi/scsi_eh.h>
      37             : #include <scsi/scsi_common.h>
      38             : #include <scsi/scsi_transport.h>
      39             : #include <scsi/scsi_host.h>
      40             : #include <scsi/scsi_ioctl.h>
      41             : #include <scsi/scsi_dh.h>
      42             : #include <scsi/scsi_devinfo.h>
      43             : #include <scsi/sg.h>
      44             : 
      45             : #include "scsi_priv.h"
      46             : #include "scsi_logging.h"
      47             : #include "scsi_transport_api.h"
      48             : 
      49             : #include <trace/events/scsi.h>
      50             : 
      51             : #include <asm/unaligned.h>
      52             : 
      53             : static void scsi_eh_done(struct scsi_cmnd *scmd);
      54             : 
      55             : /*
      56             :  * These should *probably* be handled by the host itself.
      57             :  * Since it is allowed to sleep, it probably should.
      58             :  */
      59             : #define BUS_RESET_SETTLE_TIME   (10)
      60             : #define HOST_RESET_SETTLE_TIME  (10)
      61             : 
      62             : static int scsi_eh_try_stu(struct scsi_cmnd *scmd);
      63             : static int scsi_try_to_abort_cmd(struct scsi_host_template *,
      64             :                                  struct scsi_cmnd *);
      65             : 
      66           0 : void scsi_eh_wakeup(struct Scsi_Host *shost)
      67             : {
      68           0 :         lockdep_assert_held(shost->host_lock);
      69             : 
      70           0 :         if (scsi_host_busy(shost) == shost->host_failed) {
      71           0 :                 trace_scsi_eh_wakeup(shost);
      72           0 :                 wake_up_process(shost->ehandler);
      73           0 :                 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost,
      74           0 :                         "Waking error handler thread\n"));
      75             :         }
      76           0 : }
      77             : 
      78             : /**
      79             :  * scsi_schedule_eh - schedule EH for SCSI host
      80             :  * @shost:      SCSI host to invoke error handling on.
      81             :  *
      82             :  * Schedule SCSI EH without scmd.
      83             :  */
      84           0 : void scsi_schedule_eh(struct Scsi_Host *shost)
      85             : {
      86           0 :         unsigned long flags;
      87             : 
      88           0 :         spin_lock_irqsave(shost->host_lock, flags);
      89             : 
      90           0 :         if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 ||
      91           0 :             scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) {
      92           0 :                 shost->host_eh_scheduled++;
      93           0 :                 scsi_eh_wakeup(shost);
      94             :         }
      95             : 
      96           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
      97           0 : }
      98             : EXPORT_SYMBOL_GPL(scsi_schedule_eh);
      99             : 
     100           0 : static int scsi_host_eh_past_deadline(struct Scsi_Host *shost)
     101             : {
     102           0 :         if (!shost->last_reset || shost->eh_deadline == -1)
     103             :                 return 0;
     104             : 
     105             :         /*
     106             :          * 32bit accesses are guaranteed to be atomic
     107             :          * (on all supported architectures), so instead
     108             :          * of using a spinlock we can as well double check
     109             :          * if eh_deadline has been set to 'off' during the
     110             :          * time_before call.
     111             :          */
     112           0 :         if (time_before(jiffies, shost->last_reset + shost->eh_deadline) &&
     113             :             shost->eh_deadline > -1)
     114           0 :                 return 0;
     115             : 
     116             :         return 1;
     117             : }
     118             : 
     119           0 : static bool scsi_cmd_retry_allowed(struct scsi_cmnd *cmd)
     120             : {
     121           0 :         if (cmd->allowed == SCSI_CMD_RETRIES_NO_LIMIT)
     122             :                 return true;
     123             : 
     124           0 :         return ++cmd->retries <= cmd->allowed;
     125             : }
     126             : 
     127           0 : static bool scsi_eh_should_retry_cmd(struct scsi_cmnd *cmd)
     128             : {
     129           0 :         struct scsi_device *sdev = cmd->device;
     130           0 :         struct Scsi_Host *host = sdev->host;
     131             : 
     132           0 :         if (host->hostt->eh_should_retry_cmd)
     133           0 :                 return  host->hostt->eh_should_retry_cmd(cmd);
     134             : 
     135             :         return true;
     136             : }
     137             : 
     138             : /**
     139             :  * scmd_eh_abort_handler - Handle command aborts
     140             :  * @work:       command to be aborted.
     141             :  *
     142             :  * Note: this function must be called only for a command that has timed out.
     143             :  * Because the block layer marks a request as complete before it calls
     144             :  * scsi_times_out(), a .scsi_done() call from the LLD for a command that has
     145             :  * timed out do not have any effect. Hence it is safe to call
     146             :  * scsi_finish_command() from this function.
     147             :  */
     148             : void
     149           0 : scmd_eh_abort_handler(struct work_struct *work)
     150             : {
     151           0 :         struct scsi_cmnd *scmd =
     152           0 :                 container_of(work, struct scsi_cmnd, abort_work.work);
     153           0 :         struct scsi_device *sdev = scmd->device;
     154           0 :         int rtn;
     155             : 
     156           0 :         if (scsi_host_eh_past_deadline(sdev->host)) {
     157             :                 SCSI_LOG_ERROR_RECOVERY(3,
     158             :                         scmd_printk(KERN_INFO, scmd,
     159             :                                     "eh timeout, not aborting\n"));
     160             :         } else {
     161           0 :                 SCSI_LOG_ERROR_RECOVERY(3,
     162             :                         scmd_printk(KERN_INFO, scmd,
     163           0 :                                     "aborting command\n"));
     164           0 :                 rtn = scsi_try_to_abort_cmd(sdev->host->hostt, scmd);
     165           0 :                 if (rtn == SUCCESS) {
     166           0 :                         set_host_byte(scmd, DID_TIME_OUT);
     167           0 :                         if (scsi_host_eh_past_deadline(sdev->host)) {
     168             :                                 SCSI_LOG_ERROR_RECOVERY(3,
     169             :                                         scmd_printk(KERN_INFO, scmd,
     170             :                                                     "eh timeout, not retrying "
     171             :                                                     "aborted command\n"));
     172           0 :                         } else if (!scsi_noretry_cmd(scmd) &&
     173           0 :                                    scsi_cmd_retry_allowed(scmd) &&
     174           0 :                                 scsi_eh_should_retry_cmd(scmd)) {
     175           0 :                                 SCSI_LOG_ERROR_RECOVERY(3,
     176             :                                         scmd_printk(KERN_WARNING, scmd,
     177           0 :                                                     "retry aborted command\n"));
     178           0 :                                 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
     179           0 :                                 return;
     180             :                         } else {
     181           0 :                                 SCSI_LOG_ERROR_RECOVERY(3,
     182             :                                         scmd_printk(KERN_WARNING, scmd,
     183           0 :                                                     "finish aborted command\n"));
     184           0 :                                 scsi_finish_command(scmd);
     185           0 :                                 return;
     186             :                         }
     187             :                 } else {
     188           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
     189             :                                 scmd_printk(KERN_INFO, scmd,
     190             :                                             "cmd abort %s\n",
     191             :                                             (rtn == FAST_IO_FAIL) ?
     192           0 :                                             "not send" : "failed"));
     193             :                 }
     194             :         }
     195             : 
     196           0 :         scsi_eh_scmd_add(scmd);
     197             : }
     198             : 
     199             : /**
     200             :  * scsi_abort_command - schedule a command abort
     201             :  * @scmd:       scmd to abort.
     202             :  *
     203             :  * We only need to abort commands after a command timeout
     204             :  */
     205             : static int
     206           0 : scsi_abort_command(struct scsi_cmnd *scmd)
     207             : {
     208           0 :         struct scsi_device *sdev = scmd->device;
     209           0 :         struct Scsi_Host *shost = sdev->host;
     210           0 :         unsigned long flags;
     211             : 
     212           0 :         if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) {
     213             :                 /*
     214             :                  * Retry after abort failed, escalate to next level.
     215             :                  */
     216           0 :                 SCSI_LOG_ERROR_RECOVERY(3,
     217             :                         scmd_printk(KERN_INFO, scmd,
     218           0 :                                     "previous abort failed\n"));
     219           0 :                 BUG_ON(delayed_work_pending(&scmd->abort_work));
     220             :                 return FAILED;
     221             :         }
     222             : 
     223           0 :         spin_lock_irqsave(shost->host_lock, flags);
     224           0 :         if (shost->eh_deadline != -1 && !shost->last_reset)
     225           0 :                 shost->last_reset = jiffies;
     226           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
     227             : 
     228           0 :         scmd->eh_eflags |= SCSI_EH_ABORT_SCHEDULED;
     229           0 :         SCSI_LOG_ERROR_RECOVERY(3,
     230           0 :                 scmd_printk(KERN_INFO, scmd, "abort scheduled\n"));
     231           0 :         queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100);
     232           0 :         return SUCCESS;
     233             : }
     234             : 
     235             : /**
     236             :  * scsi_eh_reset - call into ->eh_action to reset internal counters
     237             :  * @scmd:       scmd to run eh on.
     238             :  *
     239             :  * The scsi driver might be carrying internal state about the
     240             :  * devices, so we need to call into the driver to reset the
     241             :  * internal state once the error handler is started.
     242             :  */
     243           0 : static void scsi_eh_reset(struct scsi_cmnd *scmd)
     244             : {
     245           0 :         if (!blk_rq_is_passthrough(scmd->request)) {
     246           0 :                 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
     247           0 :                 if (sdrv->eh_reset)
     248           0 :                         sdrv->eh_reset(scmd);
     249             :         }
     250           0 : }
     251             : 
     252           0 : static void scsi_eh_inc_host_failed(struct rcu_head *head)
     253             : {
     254           0 :         struct scsi_cmnd *scmd = container_of(head, typeof(*scmd), rcu);
     255           0 :         struct Scsi_Host *shost = scmd->device->host;
     256           0 :         unsigned long flags;
     257             : 
     258           0 :         spin_lock_irqsave(shost->host_lock, flags);
     259           0 :         shost->host_failed++;
     260           0 :         scsi_eh_wakeup(shost);
     261           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
     262           0 : }
     263             : 
     264             : /**
     265             :  * scsi_eh_scmd_add - add scsi cmd to error handling.
     266             :  * @scmd:       scmd to run eh on.
     267             :  */
     268           0 : void scsi_eh_scmd_add(struct scsi_cmnd *scmd)
     269             : {
     270           0 :         struct Scsi_Host *shost = scmd->device->host;
     271           0 :         unsigned long flags;
     272           0 :         int ret;
     273             : 
     274           0 :         WARN_ON_ONCE(!shost->ehandler);
     275             : 
     276           0 :         spin_lock_irqsave(shost->host_lock, flags);
     277           0 :         if (scsi_host_set_state(shost, SHOST_RECOVERY)) {
     278           0 :                 ret = scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY);
     279           0 :                 WARN_ON_ONCE(ret);
     280             :         }
     281           0 :         if (shost->eh_deadline != -1 && !shost->last_reset)
     282           0 :                 shost->last_reset = jiffies;
     283             : 
     284           0 :         scsi_eh_reset(scmd);
     285           0 :         list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
     286           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
     287             :         /*
     288             :          * Ensure that all tasks observe the host state change before the
     289             :          * host_failed change.
     290             :          */
     291           0 :         call_rcu(&scmd->rcu, scsi_eh_inc_host_failed);
     292           0 : }
     293             : 
     294             : /**
     295             :  * scsi_times_out - Timeout function for normal scsi commands.
     296             :  * @req:        request that is timing out.
     297             :  *
     298             :  * Notes:
     299             :  *     We do not need to lock this.  There is the potential for a race
     300             :  *     only in that the normal completion handling might run, but if the
     301             :  *     normal completion function determines that the timer has already
     302             :  *     fired, then it mustn't do anything.
     303             :  */
     304           0 : enum blk_eh_timer_return scsi_times_out(struct request *req)
     305             : {
     306           0 :         struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req);
     307           0 :         enum blk_eh_timer_return rtn = BLK_EH_DONE;
     308           0 :         struct Scsi_Host *host = scmd->device->host;
     309             : 
     310           0 :         trace_scsi_dispatch_cmd_timeout(scmd);
     311           0 :         scsi_log_completion(scmd, TIMEOUT_ERROR);
     312             : 
     313           0 :         if (host->eh_deadline != -1 && !host->last_reset)
     314           0 :                 host->last_reset = jiffies;
     315             : 
     316           0 :         if (host->hostt->eh_timed_out)
     317           0 :                 rtn = host->hostt->eh_timed_out(scmd);
     318             : 
     319           0 :         if (rtn == BLK_EH_DONE) {
     320             :                 /*
     321             :                  * Set the command to complete first in order to prevent a real
     322             :                  * completion from releasing the command while error handling
     323             :                  * is using it. If the command was already completed, then the
     324             :                  * lower level driver beat the timeout handler, and it is safe
     325             :                  * to return without escalating error recovery.
     326             :                  *
     327             :                  * If timeout handling lost the race to a real completion, the
     328             :                  * block layer may ignore that due to a fake timeout injection,
     329             :                  * so return RESET_TIMER to allow error handling another shot
     330             :                  * at this command.
     331             :                  */
     332           0 :                 if (test_and_set_bit(SCMD_STATE_COMPLETE, &scmd->state))
     333             :                         return BLK_EH_RESET_TIMER;
     334           0 :                 if (scsi_abort_command(scmd) != SUCCESS) {
     335           0 :                         set_host_byte(scmd, DID_TIME_OUT);
     336           0 :                         scsi_eh_scmd_add(scmd);
     337             :                 }
     338             :         }
     339             : 
     340             :         return rtn;
     341             : }
     342             : 
     343             : /**
     344             :  * scsi_block_when_processing_errors - Prevent cmds from being queued.
     345             :  * @sdev:       Device on which we are performing recovery.
     346             :  *
     347             :  * Description:
     348             :  *     We block until the host is out of error recovery, and then check to
     349             :  *     see whether the host or the device is offline.
     350             :  *
     351             :  * Return value:
     352             :  *     0 when dev was taken offline by error recovery. 1 OK to proceed.
     353             :  */
     354           0 : int scsi_block_when_processing_errors(struct scsi_device *sdev)
     355             : {
     356           0 :         int online;
     357             : 
     358           0 :         wait_event(sdev->host->host_wait, !scsi_host_in_recovery(sdev->host));
     359             : 
     360           0 :         online = scsi_device_online(sdev);
     361             : 
     362           0 :         return online;
     363             : }
     364             : EXPORT_SYMBOL(scsi_block_when_processing_errors);
     365             : 
     366             : #ifdef CONFIG_SCSI_LOGGING
     367             : /**
     368             :  * scsi_eh_prt_fail_stats - Log info on failures.
     369             :  * @shost:      scsi host being recovered.
     370             :  * @work_q:     Queue of scsi cmds to process.
     371             :  */
     372             : static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost,
     373             :                                           struct list_head *work_q)
     374             : {
     375             :         struct scsi_cmnd *scmd;
     376             :         struct scsi_device *sdev;
     377             :         int total_failures = 0;
     378             :         int cmd_failed = 0;
     379             :         int cmd_cancel = 0;
     380             :         int devices_failed = 0;
     381             : 
     382             :         shost_for_each_device(sdev, shost) {
     383             :                 list_for_each_entry(scmd, work_q, eh_entry) {
     384             :                         if (scmd->device == sdev) {
     385             :                                 ++total_failures;
     386             :                                 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED)
     387             :                                         ++cmd_cancel;
     388             :                                 else
     389             :                                         ++cmd_failed;
     390             :                         }
     391             :                 }
     392             : 
     393             :                 if (cmd_cancel || cmd_failed) {
     394             :                         SCSI_LOG_ERROR_RECOVERY(3,
     395             :                                 shost_printk(KERN_INFO, shost,
     396             :                                             "%s: cmds failed: %d, cancel: %d\n",
     397             :                                             __func__, cmd_failed,
     398             :                                             cmd_cancel));
     399             :                         cmd_cancel = 0;
     400             :                         cmd_failed = 0;
     401             :                         ++devices_failed;
     402             :                 }
     403             :         }
     404             : 
     405             :         SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost,
     406             :                                    "Total of %d commands on %d"
     407             :                                    " devices require eh work\n",
     408             :                                    total_failures, devices_failed));
     409             : }
     410             : #endif
     411             : 
     412             :  /**
     413             :  * scsi_report_lun_change - Set flag on all *other* devices on the same target
     414             :  *                          to indicate that a UNIT ATTENTION is expected.
     415             :  * @sdev:       Device reporting the UNIT ATTENTION
     416             :  */
     417           0 : static void scsi_report_lun_change(struct scsi_device *sdev)
     418             : {
     419           0 :         sdev->sdev_target->expecting_lun_change = 1;
     420             : }
     421             : 
     422             : /**
     423             :  * scsi_report_sense - Examine scsi sense information and log messages for
     424             :  *                     certain conditions, also issue uevents for some of them.
     425             :  * @sdev:       Device reporting the sense code
     426             :  * @sshdr:      sshdr to be examined
     427             :  */
     428           0 : static void scsi_report_sense(struct scsi_device *sdev,
     429             :                               struct scsi_sense_hdr *sshdr)
     430             : {
     431           0 :         enum scsi_device_event evt_type = SDEV_EVT_MAXBITS;     /* i.e. none */
     432             : 
     433           0 :         if (sshdr->sense_key == UNIT_ATTENTION) {
     434           0 :                 if (sshdr->asc == 0x3f && sshdr->ascq == 0x03) {
     435           0 :                         evt_type = SDEV_EVT_INQUIRY_CHANGE_REPORTED;
     436           0 :                         sdev_printk(KERN_WARNING, sdev,
     437             :                                     "Inquiry data has changed");
     438           0 :                 } else if (sshdr->asc == 0x3f && sshdr->ascq == 0x0e) {
     439           0 :                         evt_type = SDEV_EVT_LUN_CHANGE_REPORTED;
     440           0 :                         scsi_report_lun_change(sdev);
     441           0 :                         sdev_printk(KERN_WARNING, sdev,
     442             :                                     "Warning! Received an indication that the "
     443             :                                     "LUN assignments on this target have "
     444             :                                     "changed. The Linux SCSI layer does not "
     445             :                                     "automatically remap LUN assignments.\n");
     446           0 :                 } else if (sshdr->asc == 0x3f)
     447           0 :                         sdev_printk(KERN_WARNING, sdev,
     448             :                                     "Warning! Received an indication that the "
     449             :                                     "operating parameters on this target have "
     450             :                                     "changed. The Linux SCSI layer does not "
     451             :                                     "automatically adjust these parameters.\n");
     452             : 
     453           0 :                 if (sshdr->asc == 0x38 && sshdr->ascq == 0x07) {
     454           0 :                         evt_type = SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED;
     455           0 :                         sdev_printk(KERN_WARNING, sdev,
     456             :                                     "Warning! Received an indication that the "
     457             :                                     "LUN reached a thin provisioning soft "
     458             :                                     "threshold.\n");
     459             :                 }
     460             : 
     461           0 :                 if (sshdr->asc == 0x29) {
     462           0 :                         evt_type = SDEV_EVT_POWER_ON_RESET_OCCURRED;
     463           0 :                         sdev_printk(KERN_WARNING, sdev,
     464             :                                     "Power-on or device reset occurred\n");
     465             :                 }
     466             : 
     467           0 :                 if (sshdr->asc == 0x2a && sshdr->ascq == 0x01) {
     468           0 :                         evt_type = SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED;
     469           0 :                         sdev_printk(KERN_WARNING, sdev,
     470             :                                     "Mode parameters changed");
     471           0 :                 } else if (sshdr->asc == 0x2a && sshdr->ascq == 0x06) {
     472           0 :                         evt_type = SDEV_EVT_ALUA_STATE_CHANGE_REPORTED;
     473           0 :                         sdev_printk(KERN_WARNING, sdev,
     474             :                                     "Asymmetric access state changed");
     475           0 :                 } else if (sshdr->asc == 0x2a && sshdr->ascq == 0x09) {
     476           0 :                         evt_type = SDEV_EVT_CAPACITY_CHANGE_REPORTED;
     477           0 :                         sdev_printk(KERN_WARNING, sdev,
     478             :                                     "Capacity data has changed");
     479           0 :                 } else if (sshdr->asc == 0x2a)
     480           0 :                         sdev_printk(KERN_WARNING, sdev,
     481             :                                     "Parameters changed");
     482             :         }
     483             : 
     484           0 :         if (evt_type != SDEV_EVT_MAXBITS) {
     485           0 :                 set_bit(evt_type, sdev->pending_events);
     486           0 :                 schedule_work(&sdev->event_work);
     487             :         }
     488           0 : }
     489             : 
     490             : /**
     491             :  * scsi_check_sense - Examine scsi cmd sense
     492             :  * @scmd:       Cmd to have sense checked.
     493             :  *
     494             :  * Return value:
     495             :  *      SUCCESS or FAILED or NEEDS_RETRY or ADD_TO_MLQUEUE
     496             :  *
     497             :  * Notes:
     498             :  *      When a deferred error is detected the current command has
     499             :  *      not been executed and needs retrying.
     500             :  */
     501           0 : int scsi_check_sense(struct scsi_cmnd *scmd)
     502             : {
     503           0 :         struct scsi_device *sdev = scmd->device;
     504           0 :         struct scsi_sense_hdr sshdr;
     505             : 
     506           0 :         if (! scsi_command_normalize_sense(scmd, &sshdr))
     507             :                 return FAILED;  /* no valid sense data */
     508             : 
     509           0 :         scsi_report_sense(sdev, &sshdr);
     510             : 
     511           0 :         if (scsi_sense_is_deferred(&sshdr))
     512             :                 return NEEDS_RETRY;
     513             : 
     514           0 :         if (sdev->handler && sdev->handler->check_sense) {
     515           0 :                 int rc;
     516             : 
     517           0 :                 rc = sdev->handler->check_sense(sdev, &sshdr);
     518           0 :                 if (rc != SCSI_RETURN_NOT_HANDLED)
     519             :                         return rc;
     520             :                 /* handler does not care. Drop down to default handling */
     521             :         }
     522             : 
     523           0 :         if (scmd->cmnd[0] == TEST_UNIT_READY && scmd->scsi_done != scsi_eh_done)
     524             :                 /*
     525             :                  * nasty: for mid-layer issued TURs, we need to return the
     526             :                  * actual sense data without any recovery attempt.  For eh
     527             :                  * issued ones, we need to try to recover and interpret
     528             :                  */
     529             :                 return SUCCESS;
     530             : 
     531             :         /*
     532             :          * Previous logic looked for FILEMARK, EOM or ILI which are
     533             :          * mainly associated with tapes and returned SUCCESS.
     534             :          */
     535           0 :         if (sshdr.response_code == 0x70) {
     536             :                 /* fixed format */
     537           0 :                 if (scmd->sense_buffer[2] & 0xe0)
     538             :                         return SUCCESS;
     539             :         } else {
     540             :                 /*
     541             :                  * descriptor format: look for "stream commands sense data
     542             :                  * descriptor" (see SSC-3). Assume single sense data
     543             :                  * descriptor. Ignore ILI from SBC-2 READ LONG and WRITE LONG.
     544             :                  */
     545           0 :                 if ((sshdr.additional_length > 3) &&
     546           0 :                     (scmd->sense_buffer[8] == 0x4) &&
     547           0 :                     (scmd->sense_buffer[11] & 0xe0))
     548             :                         return SUCCESS;
     549             :         }
     550             : 
     551           0 :         switch (sshdr.sense_key) {
     552             :         case NO_SENSE:
     553             :                 return SUCCESS;
     554             :         case RECOVERED_ERROR:
     555             :                 return /* soft_error */ SUCCESS;
     556             : 
     557           0 :         case ABORTED_COMMAND:
     558           0 :                 if (sshdr.asc == 0x10) /* DIF */
     559             :                         return SUCCESS;
     560             : 
     561           0 :                 if (sshdr.asc == 0x44 && sdev->sdev_bflags & BLIST_RETRY_ITF)
     562             :                         return ADD_TO_MLQUEUE;
     563           0 :                 if (sshdr.asc == 0xc1 && sshdr.ascq == 0x01 &&
     564           0 :                     sdev->sdev_bflags & BLIST_RETRY_ASC_C1)
     565           0 :                         return ADD_TO_MLQUEUE;
     566             : 
     567             :                 return NEEDS_RETRY;
     568           0 :         case NOT_READY:
     569             :         case UNIT_ATTENTION:
     570             :                 /*
     571             :                  * if we are expecting a cc/ua because of a bus reset that we
     572             :                  * performed, treat this just as a retry.  otherwise this is
     573             :                  * information that we should pass up to the upper-level driver
     574             :                  * so that we can deal with it there.
     575             :                  */
     576           0 :                 if (scmd->device->expecting_cc_ua) {
     577             :                         /*
     578             :                          * Because some device does not queue unit
     579             :                          * attentions correctly, we carefully check
     580             :                          * additional sense code and qualifier so as
     581             :                          * not to squash media change unit attention.
     582             :                          */
     583           0 :                         if (sshdr.asc != 0x28 || sshdr.ascq != 0x00) {
     584           0 :                                 scmd->device->expecting_cc_ua = 0;
     585           0 :                                 return NEEDS_RETRY;
     586             :                         }
     587             :                 }
     588             :                 /*
     589             :                  * we might also expect a cc/ua if another LUN on the target
     590             :                  * reported a UA with an ASC/ASCQ of 3F 0E -
     591             :                  * REPORTED LUNS DATA HAS CHANGED.
     592             :                  */
     593           0 :                 if (scmd->device->sdev_target->expecting_lun_change &&
     594           0 :                     sshdr.asc == 0x3f && sshdr.ascq == 0x0e)
     595             :                         return NEEDS_RETRY;
     596             :                 /*
     597             :                  * if the device is in the process of becoming ready, we
     598             :                  * should retry.
     599             :                  */
     600           0 :                 if ((sshdr.asc == 0x04) && (sshdr.ascq == 0x01))
     601             :                         return NEEDS_RETRY;
     602             :                 /*
     603             :                  * if the device is not started, we need to wake
     604             :                  * the error handler to start the motor
     605             :                  */
     606           0 :                 if (scmd->device->allow_restart &&
     607           0 :                     (sshdr.asc == 0x04) && (sshdr.ascq == 0x02))
     608           0 :                         return FAILED;
     609             :                 /*
     610             :                  * Pass the UA upwards for a determination in the completion
     611             :                  * functions.
     612             :                  */
     613             :                 return SUCCESS;
     614             : 
     615             :                 /* these are not supported */
     616           0 :         case DATA_PROTECT:
     617           0 :                 if (sshdr.asc == 0x27 && sshdr.ascq == 0x07) {
     618             :                         /* Thin provisioning hard threshold reached */
     619           0 :                         set_host_byte(scmd, DID_ALLOC_FAILURE);
     620           0 :                         return SUCCESS;
     621             :                 }
     622           0 :                 fallthrough;
     623             :         case COPY_ABORTED:
     624             :         case VOLUME_OVERFLOW:
     625             :         case MISCOMPARE:
     626             :         case BLANK_CHECK:
     627           0 :                 set_host_byte(scmd, DID_TARGET_FAILURE);
     628           0 :                 return SUCCESS;
     629             : 
     630           0 :         case MEDIUM_ERROR:
     631           0 :                 if (sshdr.asc == 0x11 || /* UNRECOVERED READ ERR */
     632           0 :                     sshdr.asc == 0x13 || /* AMNF DATA FIELD */
     633             :                     sshdr.asc == 0x14) { /* RECORD NOT FOUND */
     634           0 :                         set_host_byte(scmd, DID_MEDIUM_ERROR);
     635           0 :                         return SUCCESS;
     636             :                 }
     637             :                 return NEEDS_RETRY;
     638             : 
     639           0 :         case HARDWARE_ERROR:
     640           0 :                 if (scmd->device->retry_hwerror)
     641             :                         return ADD_TO_MLQUEUE;
     642             :                 else
     643           0 :                         set_host_byte(scmd, DID_TARGET_FAILURE);
     644           0 :                 fallthrough;
     645             : 
     646           0 :         case ILLEGAL_REQUEST:
     647           0 :                 if (sshdr.asc == 0x20 || /* Invalid command operation code */
     648             :                     sshdr.asc == 0x21 || /* Logical block address out of range */
     649           0 :                     sshdr.asc == 0x22 || /* Invalid function */
     650           0 :                     sshdr.asc == 0x24 || /* Invalid field in cdb */
     651           0 :                     sshdr.asc == 0x26 || /* Parameter value invalid */
     652             :                     sshdr.asc == 0x27) { /* Write protected */
     653           0 :                         set_host_byte(scmd, DID_TARGET_FAILURE);
     654             :                 }
     655             :                 return SUCCESS;
     656             : 
     657             :         default:
     658             :                 return SUCCESS;
     659             :         }
     660             : }
     661             : EXPORT_SYMBOL_GPL(scsi_check_sense);
     662             : 
     663           0 : static void scsi_handle_queue_ramp_up(struct scsi_device *sdev)
     664             : {
     665           0 :         struct scsi_host_template *sht = sdev->host->hostt;
     666           0 :         struct scsi_device *tmp_sdev;
     667             : 
     668           0 :         if (!sht->track_queue_depth ||
     669           0 :             sdev->queue_depth >= sdev->max_queue_depth)
     670             :                 return;
     671             : 
     672           0 :         if (time_before(jiffies,
     673             :             sdev->last_queue_ramp_up + sdev->queue_ramp_up_period))
     674             :                 return;
     675             : 
     676           0 :         if (time_before(jiffies,
     677             :             sdev->last_queue_full_time + sdev->queue_ramp_up_period))
     678             :                 return;
     679             : 
     680             :         /*
     681             :          * Walk all devices of a target and do
     682             :          * ramp up on them.
     683             :          */
     684           0 :         shost_for_each_device(tmp_sdev, sdev->host) {
     685           0 :                 if (tmp_sdev->channel != sdev->channel ||
     686           0 :                     tmp_sdev->id != sdev->id ||
     687           0 :                     tmp_sdev->queue_depth == sdev->max_queue_depth)
     688           0 :                         continue;
     689             : 
     690           0 :                 scsi_change_queue_depth(tmp_sdev, tmp_sdev->queue_depth + 1);
     691           0 :                 sdev->last_queue_ramp_up = jiffies;
     692             :         }
     693             : }
     694             : 
     695           0 : static void scsi_handle_queue_full(struct scsi_device *sdev)
     696             : {
     697           0 :         struct scsi_host_template *sht = sdev->host->hostt;
     698           0 :         struct scsi_device *tmp_sdev;
     699             : 
     700           0 :         if (!sht->track_queue_depth)
     701             :                 return;
     702             : 
     703           0 :         shost_for_each_device(tmp_sdev, sdev->host) {
     704           0 :                 if (tmp_sdev->channel != sdev->channel ||
     705             :                     tmp_sdev->id != sdev->id)
     706           0 :                         continue;
     707             :                 /*
     708             :                  * We do not know the number of commands that were at
     709             :                  * the device when we got the queue full so we start
     710             :                  * from the highest possible value and work our way down.
     711             :                  */
     712           0 :                 scsi_track_queue_full(tmp_sdev, tmp_sdev->queue_depth - 1);
     713             :         }
     714             : }
     715             : 
     716             : /**
     717             :  * scsi_eh_completed_normally - Disposition a eh cmd on return from LLD.
     718             :  * @scmd:       SCSI cmd to examine.
     719             :  *
     720             :  * Notes:
     721             :  *    This is *only* called when we are examining the status of commands
     722             :  *    queued during error recovery.  the main difference here is that we
     723             :  *    don't allow for the possibility of retries here, and we are a lot
     724             :  *    more restrictive about what we consider acceptable.
     725             :  */
     726           0 : static int scsi_eh_completed_normally(struct scsi_cmnd *scmd)
     727             : {
     728             :         /*
     729             :          * first check the host byte, to see if there is anything in there
     730             :          * that would indicate what we need to do.
     731             :          */
     732           0 :         if (host_byte(scmd->result) == DID_RESET) {
     733             :                 /*
     734             :                  * rats.  we are already in the error handler, so we now
     735             :                  * get to try and figure out what to do next.  if the sense
     736             :                  * is valid, we have a pretty good idea of what to do.
     737             :                  * if not, we mark it as FAILED.
     738             :                  */
     739           0 :                 return scsi_check_sense(scmd);
     740             :         }
     741           0 :         if (host_byte(scmd->result) != DID_OK)
     742             :                 return FAILED;
     743             : 
     744             :         /*
     745             :          * next, check the message byte.
     746             :          */
     747           0 :         if (msg_byte(scmd->result) != COMMAND_COMPLETE)
     748             :                 return FAILED;
     749             : 
     750             :         /*
     751             :          * now, check the status byte to see if this indicates
     752             :          * anything special.
     753             :          */
     754           0 :         switch (status_byte(scmd->result)) {
     755           0 :         case GOOD:
     756           0 :                 scsi_handle_queue_ramp_up(scmd->device);
     757             :                 fallthrough;
     758             :         case COMMAND_TERMINATED:
     759             :                 return SUCCESS;
     760           0 :         case CHECK_CONDITION:
     761           0 :                 return scsi_check_sense(scmd);
     762             :         case CONDITION_GOOD:
     763             :         case INTERMEDIATE_GOOD:
     764             :         case INTERMEDIATE_C_GOOD:
     765             :                 /*
     766             :                  * who knows?  FIXME(eric)
     767             :                  */
     768             :                 return SUCCESS;
     769           0 :         case RESERVATION_CONFLICT:
     770           0 :                 if (scmd->cmnd[0] == TEST_UNIT_READY)
     771             :                         /* it is a success, we probed the device and
     772             :                          * found it */
     773           0 :                         return SUCCESS;
     774             :                 /* otherwise, we failed to send the command */
     775             :                 return FAILED;
     776           0 :         case QUEUE_FULL:
     777           0 :                 scsi_handle_queue_full(scmd->device);
     778             :                 fallthrough;
     779             :         case BUSY:
     780             :                 return NEEDS_RETRY;
     781           0 :         default:
     782           0 :                 return FAILED;
     783             :         }
     784             :         return FAILED;
     785             : }
     786             : 
     787             : /**
     788             :  * scsi_eh_done - Completion function for error handling.
     789             :  * @scmd:       Cmd that is done.
     790             :  */
     791           0 : static void scsi_eh_done(struct scsi_cmnd *scmd)
     792             : {
     793           0 :         struct completion *eh_action;
     794             : 
     795           0 :         SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
     796           0 :                         "%s result: %x\n", __func__, scmd->result));
     797             : 
     798           0 :         eh_action = scmd->device->host->eh_action;
     799           0 :         if (eh_action)
     800           0 :                 complete(eh_action);
     801           0 : }
     802             : 
     803             : /**
     804             :  * scsi_try_host_reset - ask host adapter to reset itself
     805             :  * @scmd:       SCSI cmd to send host reset.
     806             :  */
     807           0 : static int scsi_try_host_reset(struct scsi_cmnd *scmd)
     808             : {
     809           0 :         unsigned long flags;
     810           0 :         int rtn;
     811           0 :         struct Scsi_Host *host = scmd->device->host;
     812           0 :         struct scsi_host_template *hostt = host->hostt;
     813             : 
     814           0 :         SCSI_LOG_ERROR_RECOVERY(3,
     815           0 :                 shost_printk(KERN_INFO, host, "Snd Host RST\n"));
     816             : 
     817           0 :         if (!hostt->eh_host_reset_handler)
     818             :                 return FAILED;
     819             : 
     820           0 :         rtn = hostt->eh_host_reset_handler(scmd);
     821             : 
     822           0 :         if (rtn == SUCCESS) {
     823           0 :                 if (!hostt->skip_settle_delay)
     824           0 :                         ssleep(HOST_RESET_SETTLE_TIME);
     825           0 :                 spin_lock_irqsave(host->host_lock, flags);
     826           0 :                 scsi_report_bus_reset(host, scmd_channel(scmd));
     827           0 :                 spin_unlock_irqrestore(host->host_lock, flags);
     828             :         }
     829             : 
     830             :         return rtn;
     831             : }
     832             : 
     833             : /**
     834             :  * scsi_try_bus_reset - ask host to perform a bus reset
     835             :  * @scmd:       SCSI cmd to send bus reset.
     836             :  */
     837           0 : static int scsi_try_bus_reset(struct scsi_cmnd *scmd)
     838             : {
     839           0 :         unsigned long flags;
     840           0 :         int rtn;
     841           0 :         struct Scsi_Host *host = scmd->device->host;
     842           0 :         struct scsi_host_template *hostt = host->hostt;
     843             : 
     844           0 :         SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
     845           0 :                 "%s: Snd Bus RST\n", __func__));
     846             : 
     847           0 :         if (!hostt->eh_bus_reset_handler)
     848             :                 return FAILED;
     849             : 
     850           0 :         rtn = hostt->eh_bus_reset_handler(scmd);
     851             : 
     852           0 :         if (rtn == SUCCESS) {
     853           0 :                 if (!hostt->skip_settle_delay)
     854           0 :                         ssleep(BUS_RESET_SETTLE_TIME);
     855           0 :                 spin_lock_irqsave(host->host_lock, flags);
     856           0 :                 scsi_report_bus_reset(host, scmd_channel(scmd));
     857           0 :                 spin_unlock_irqrestore(host->host_lock, flags);
     858             :         }
     859             : 
     860             :         return rtn;
     861             : }
     862             : 
     863           0 : static void __scsi_report_device_reset(struct scsi_device *sdev, void *data)
     864             : {
     865           0 :         sdev->was_reset = 1;
     866           0 :         sdev->expecting_cc_ua = 1;
     867           0 : }
     868             : 
     869             : /**
     870             :  * scsi_try_target_reset - Ask host to perform a target reset
     871             :  * @scmd:       SCSI cmd used to send a target reset
     872             :  *
     873             :  * Notes:
     874             :  *    There is no timeout for this operation.  if this operation is
     875             :  *    unreliable for a given host, then the host itself needs to put a
     876             :  *    timer on it, and set the host back to a consistent state prior to
     877             :  *    returning.
     878             :  */
     879           0 : static int scsi_try_target_reset(struct scsi_cmnd *scmd)
     880             : {
     881           0 :         unsigned long flags;
     882           0 :         int rtn;
     883           0 :         struct Scsi_Host *host = scmd->device->host;
     884           0 :         struct scsi_host_template *hostt = host->hostt;
     885             : 
     886           0 :         if (!hostt->eh_target_reset_handler)
     887             :                 return FAILED;
     888             : 
     889           0 :         rtn = hostt->eh_target_reset_handler(scmd);
     890           0 :         if (rtn == SUCCESS) {
     891           0 :                 spin_lock_irqsave(host->host_lock, flags);
     892           0 :                 __starget_for_each_device(scsi_target(scmd->device), NULL,
     893             :                                           __scsi_report_device_reset);
     894           0 :                 spin_unlock_irqrestore(host->host_lock, flags);
     895             :         }
     896             : 
     897             :         return rtn;
     898             : }
     899             : 
     900             : /**
     901             :  * scsi_try_bus_device_reset - Ask host to perform a BDR on a dev
     902             :  * @scmd:       SCSI cmd used to send BDR
     903             :  *
     904             :  * Notes:
     905             :  *    There is no timeout for this operation.  if this operation is
     906             :  *    unreliable for a given host, then the host itself needs to put a
     907             :  *    timer on it, and set the host back to a consistent state prior to
     908             :  *    returning.
     909             :  */
     910           0 : static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
     911             : {
     912           0 :         int rtn;
     913           0 :         struct scsi_host_template *hostt = scmd->device->host->hostt;
     914             : 
     915           0 :         if (!hostt->eh_device_reset_handler)
     916             :                 return FAILED;
     917             : 
     918           0 :         rtn = hostt->eh_device_reset_handler(scmd);
     919           0 :         if (rtn == SUCCESS)
     920           0 :                 __scsi_report_device_reset(scmd->device, NULL);
     921             :         return rtn;
     922             : }
     923             : 
     924             : /**
     925             :  * scsi_try_to_abort_cmd - Ask host to abort a SCSI command
     926             :  * @hostt:      SCSI driver host template
     927             :  * @scmd:       SCSI cmd used to send a target reset
     928             :  *
     929             :  * Return value:
     930             :  *      SUCCESS, FAILED, or FAST_IO_FAIL
     931             :  *
     932             :  * Notes:
     933             :  *    SUCCESS does not necessarily indicate that the command
     934             :  *    has been aborted; it only indicates that the LLDDs
     935             :  *    has cleared all references to that command.
     936             :  *    LLDDs should return FAILED only if an abort was required
     937             :  *    but could not be executed. LLDDs should return FAST_IO_FAIL
     938             :  *    if the device is temporarily unavailable (eg due to a
     939             :  *    link down on FibreChannel)
     940             :  */
     941           0 : static int scsi_try_to_abort_cmd(struct scsi_host_template *hostt,
     942             :                                  struct scsi_cmnd *scmd)
     943             : {
     944           0 :         if (!hostt->eh_abort_handler)
     945             :                 return FAILED;
     946             : 
     947           0 :         return hostt->eh_abort_handler(scmd);
     948             : }
     949             : 
     950           0 : static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd)
     951             : {
     952           0 :         if (scsi_try_to_abort_cmd(scmd->device->host->hostt, scmd) != SUCCESS)
     953           0 :                 if (scsi_try_bus_device_reset(scmd) != SUCCESS)
     954           0 :                         if (scsi_try_target_reset(scmd) != SUCCESS)
     955           0 :                                 if (scsi_try_bus_reset(scmd) != SUCCESS)
     956           0 :                                         scsi_try_host_reset(scmd);
     957           0 : }
     958             : 
     959             : /**
     960             :  * scsi_eh_prep_cmnd  - Save a scsi command info as part of error recovery
     961             :  * @scmd:       SCSI command structure to hijack
     962             :  * @ses:        structure to save restore information
     963             :  * @cmnd:       CDB to send. Can be NULL if no new cmnd is needed
     964             :  * @cmnd_size:  size in bytes of @cmnd (must be <= BLK_MAX_CDB)
     965             :  * @sense_bytes: size of sense data to copy. or 0 (if != 0 @cmnd is ignored)
     966             :  *
     967             :  * This function is used to save a scsi command information before re-execution
     968             :  * as part of the error recovery process.  If @sense_bytes is 0 the command
     969             :  * sent must be one that does not transfer any data.  If @sense_bytes != 0
     970             :  * @cmnd is ignored and this functions sets up a REQUEST_SENSE command
     971             :  * and cmnd buffers to read @sense_bytes into @scmd->sense_buffer.
     972             :  */
     973           0 : void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses,
     974             :                         unsigned char *cmnd, int cmnd_size, unsigned sense_bytes)
     975             : {
     976           0 :         struct scsi_device *sdev = scmd->device;
     977             : 
     978             :         /*
     979             :          * We need saved copies of a number of fields - this is because
     980             :          * error handling may need to overwrite these with different values
     981             :          * to run different commands, and once error handling is complete,
     982             :          * we will need to restore these values prior to running the actual
     983             :          * command.
     984             :          */
     985           0 :         ses->cmd_len = scmd->cmd_len;
     986           0 :         ses->cmnd = scmd->cmnd;
     987           0 :         ses->data_direction = scmd->sc_data_direction;
     988           0 :         ses->sdb = scmd->sdb;
     989           0 :         ses->result = scmd->result;
     990           0 :         ses->resid_len = scmd->req.resid_len;
     991           0 :         ses->underflow = scmd->underflow;
     992           0 :         ses->prot_op = scmd->prot_op;
     993           0 :         ses->eh_eflags = scmd->eh_eflags;
     994             : 
     995           0 :         scmd->prot_op = SCSI_PROT_NORMAL;
     996           0 :         scmd->eh_eflags = 0;
     997           0 :         scmd->cmnd = ses->eh_cmnd;
     998           0 :         memset(scmd->cmnd, 0, BLK_MAX_CDB);
     999           0 :         memset(&scmd->sdb, 0, sizeof(scmd->sdb));
    1000           0 :         scmd->result = 0;
    1001           0 :         scmd->req.resid_len = 0;
    1002             : 
    1003           0 :         if (sense_bytes) {
    1004           0 :                 scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE,
    1005             :                                          sense_bytes);
    1006           0 :                 sg_init_one(&ses->sense_sgl, scmd->sense_buffer,
    1007             :                             scmd->sdb.length);
    1008           0 :                 scmd->sdb.table.sgl = &ses->sense_sgl;
    1009           0 :                 scmd->sc_data_direction = DMA_FROM_DEVICE;
    1010           0 :                 scmd->sdb.table.nents = scmd->sdb.table.orig_nents = 1;
    1011           0 :                 scmd->cmnd[0] = REQUEST_SENSE;
    1012           0 :                 scmd->cmnd[4] = scmd->sdb.length;
    1013           0 :                 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
    1014             :         } else {
    1015           0 :                 scmd->sc_data_direction = DMA_NONE;
    1016           0 :                 if (cmnd) {
    1017           0 :                         BUG_ON(cmnd_size > BLK_MAX_CDB);
    1018           0 :                         memcpy(scmd->cmnd, cmnd, cmnd_size);
    1019           0 :                         scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
    1020             :                 }
    1021             :         }
    1022             : 
    1023           0 :         scmd->underflow = 0;
    1024             : 
    1025           0 :         if (sdev->scsi_level <= SCSI_2 && sdev->scsi_level != SCSI_UNKNOWN)
    1026           0 :                 scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) |
    1027           0 :                         (sdev->lun << 5 & 0xe0);
    1028             : 
    1029             :         /*
    1030             :          * Zero the sense buffer.  The scsi spec mandates that any
    1031             :          * untransferred sense data should be interpreted as being zero.
    1032             :          */
    1033           0 :         memset(scmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
    1034           0 : }
    1035             : EXPORT_SYMBOL(scsi_eh_prep_cmnd);
    1036             : 
    1037             : /**
    1038             :  * scsi_eh_restore_cmnd  - Restore a scsi command info as part of error recovery
    1039             :  * @scmd:       SCSI command structure to restore
    1040             :  * @ses:        saved information from a coresponding call to scsi_eh_prep_cmnd
    1041             :  *
    1042             :  * Undo any damage done by above scsi_eh_prep_cmnd().
    1043             :  */
    1044           0 : void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses)
    1045             : {
    1046             :         /*
    1047             :          * Restore original data
    1048             :          */
    1049           0 :         scmd->cmd_len = ses->cmd_len;
    1050           0 :         scmd->cmnd = ses->cmnd;
    1051           0 :         scmd->sc_data_direction = ses->data_direction;
    1052           0 :         scmd->sdb = ses->sdb;
    1053           0 :         scmd->result = ses->result;
    1054           0 :         scmd->req.resid_len = ses->resid_len;
    1055           0 :         scmd->underflow = ses->underflow;
    1056           0 :         scmd->prot_op = ses->prot_op;
    1057           0 :         scmd->eh_eflags = ses->eh_eflags;
    1058           0 : }
    1059             : EXPORT_SYMBOL(scsi_eh_restore_cmnd);
    1060             : 
    1061             : /**
    1062             :  * scsi_send_eh_cmnd  - submit a scsi command as part of error recovery
    1063             :  * @scmd:       SCSI command structure to hijack
    1064             :  * @cmnd:       CDB to send
    1065             :  * @cmnd_size:  size in bytes of @cmnd
    1066             :  * @timeout:    timeout for this request
    1067             :  * @sense_bytes: size of sense data to copy or 0
    1068             :  *
    1069             :  * This function is used to send a scsi command down to a target device
    1070             :  * as part of the error recovery process. See also scsi_eh_prep_cmnd() above.
    1071             :  *
    1072             :  * Return value:
    1073             :  *    SUCCESS or FAILED or NEEDS_RETRY
    1074             :  */
    1075           0 : static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
    1076             :                              int cmnd_size, int timeout, unsigned sense_bytes)
    1077             : {
    1078           0 :         struct scsi_device *sdev = scmd->device;
    1079           0 :         struct Scsi_Host *shost = sdev->host;
    1080           0 :         DECLARE_COMPLETION_ONSTACK(done);
    1081           0 :         unsigned long timeleft = timeout, delay;
    1082           0 :         struct scsi_eh_save ses;
    1083           0 :         const unsigned long stall_for = msecs_to_jiffies(100);
    1084           0 :         int rtn;
    1085             : 
    1086           0 : retry:
    1087           0 :         scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes);
    1088           0 :         shost->eh_action = &done;
    1089             : 
    1090           0 :         scsi_log_send(scmd);
    1091           0 :         scmd->scsi_done = scsi_eh_done;
    1092             : 
    1093             :         /*
    1094             :          * Lock sdev->state_mutex to avoid that scsi_device_quiesce() can
    1095             :          * change the SCSI device state after we have examined it and before
    1096             :          * .queuecommand() is called.
    1097             :          */
    1098           0 :         mutex_lock(&sdev->state_mutex);
    1099           0 :         while (sdev->sdev_state == SDEV_BLOCK && timeleft > 0) {
    1100           0 :                 mutex_unlock(&sdev->state_mutex);
    1101           0 :                 SCSI_LOG_ERROR_RECOVERY(5, sdev_printk(KERN_DEBUG, sdev,
    1102             :                         "%s: state %d <> %d\n", __func__, sdev->sdev_state,
    1103           0 :                         SDEV_BLOCK));
    1104           0 :                 delay = min(timeleft, stall_for);
    1105           0 :                 timeleft -= delay;
    1106           0 :                 msleep(jiffies_to_msecs(delay));
    1107           0 :                 mutex_lock(&sdev->state_mutex);
    1108             :         }
    1109           0 :         if (sdev->sdev_state != SDEV_BLOCK)
    1110           0 :                 rtn = shost->hostt->queuecommand(shost, scmd);
    1111             :         else
    1112             :                 rtn = SCSI_MLQUEUE_DEVICE_BUSY;
    1113           0 :         mutex_unlock(&sdev->state_mutex);
    1114             : 
    1115           0 :         if (rtn) {
    1116           0 :                 if (timeleft > stall_for) {
    1117           0 :                         scsi_eh_restore_cmnd(scmd, &ses);
    1118           0 :                         timeleft -= stall_for;
    1119           0 :                         msleep(jiffies_to_msecs(stall_for));
    1120           0 :                         goto retry;
    1121             :                 }
    1122             :                 /* signal not to enter either branch of the if () below */
    1123             :                 timeleft = 0;
    1124             :                 rtn = FAILED;
    1125             :         } else {
    1126           0 :                 timeleft = wait_for_completion_timeout(&done, timeout);
    1127           0 :                 rtn = SUCCESS;
    1128             :         }
    1129             : 
    1130           0 :         shost->eh_action = NULL;
    1131             : 
    1132           0 :         scsi_log_completion(scmd, rtn);
    1133             : 
    1134           0 :         SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
    1135             :                         "%s timeleft: %ld\n",
    1136           0 :                         __func__, timeleft));
    1137             : 
    1138             :         /*
    1139             :          * If there is time left scsi_eh_done got called, and we will examine
    1140             :          * the actual status codes to see whether the command actually did
    1141             :          * complete normally, else if we have a zero return and no time left,
    1142             :          * the command must still be pending, so abort it and return FAILED.
    1143             :          * If we never actually managed to issue the command, because
    1144             :          * ->queuecommand() kept returning non zero, use the rtn = FAILED
    1145             :          * value above (so don't execute either branch of the if)
    1146             :          */
    1147           0 :         if (timeleft) {
    1148           0 :                 rtn = scsi_eh_completed_normally(scmd);
    1149           0 :                 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
    1150           0 :                         "%s: scsi_eh_completed_normally %x\n", __func__, rtn));
    1151             : 
    1152           0 :                 switch (rtn) {
    1153             :                 case SUCCESS:
    1154             :                 case NEEDS_RETRY:
    1155             :                 case FAILED:
    1156             :                         break;
    1157           0 :                 case ADD_TO_MLQUEUE:
    1158           0 :                         rtn = NEEDS_RETRY;
    1159           0 :                         break;
    1160           0 :                 default:
    1161           0 :                         rtn = FAILED;
    1162           0 :                         break;
    1163             :                 }
    1164           0 :         } else if (rtn != FAILED) {
    1165           0 :                 scsi_abort_eh_cmnd(scmd);
    1166           0 :                 rtn = FAILED;
    1167             :         }
    1168             : 
    1169           0 :         scsi_eh_restore_cmnd(scmd, &ses);
    1170             : 
    1171           0 :         return rtn;
    1172             : }
    1173             : 
    1174             : /**
    1175             :  * scsi_request_sense - Request sense data from a particular target.
    1176             :  * @scmd:       SCSI cmd for request sense.
    1177             :  *
    1178             :  * Notes:
    1179             :  *    Some hosts automatically obtain this information, others require
    1180             :  *    that we obtain it on our own. This function will *not* return until
    1181             :  *    the command either times out, or it completes.
    1182             :  */
    1183           0 : static int scsi_request_sense(struct scsi_cmnd *scmd)
    1184             : {
    1185           0 :         return scsi_send_eh_cmnd(scmd, NULL, 0, scmd->device->eh_timeout, ~0);
    1186             : }
    1187             : 
    1188           0 : static int scsi_eh_action(struct scsi_cmnd *scmd, int rtn)
    1189             : {
    1190           0 :         if (!blk_rq_is_passthrough(scmd->request)) {
    1191           0 :                 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
    1192           0 :                 if (sdrv->eh_action)
    1193           0 :                         rtn = sdrv->eh_action(scmd, rtn);
    1194             :         }
    1195           0 :         return rtn;
    1196             : }
    1197             : 
    1198             : /**
    1199             :  * scsi_eh_finish_cmd - Handle a cmd that eh is finished with.
    1200             :  * @scmd:       Original SCSI cmd that eh has finished.
    1201             :  * @done_q:     Queue for processed commands.
    1202             :  *
    1203             :  * Notes:
    1204             :  *    We don't want to use the normal command completion while we are are
    1205             :  *    still handling errors - it may cause other commands to be queued,
    1206             :  *    and that would disturb what we are doing.  Thus we really want to
    1207             :  *    keep a list of pending commands for final completion, and once we
    1208             :  *    are ready to leave error handling we handle completion for real.
    1209             :  */
    1210           0 : void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q)
    1211             : {
    1212           0 :         list_move_tail(&scmd->eh_entry, done_q);
    1213           0 : }
    1214             : EXPORT_SYMBOL(scsi_eh_finish_cmd);
    1215             : 
    1216             : /**
    1217             :  * scsi_eh_get_sense - Get device sense data.
    1218             :  * @work_q:     Queue of commands to process.
    1219             :  * @done_q:     Queue of processed commands.
    1220             :  *
    1221             :  * Description:
    1222             :  *    See if we need to request sense information.  if so, then get it
    1223             :  *    now, so we have a better idea of what to do.
    1224             :  *
    1225             :  * Notes:
    1226             :  *    This has the unfortunate side effect that if a shost adapter does
    1227             :  *    not automatically request sense information, we end up shutting
    1228             :  *    it down before we request it.
    1229             :  *
    1230             :  *    All drivers should request sense information internally these days,
    1231             :  *    so for now all I have to say is tough noogies if you end up in here.
    1232             :  *
    1233             :  *    XXX: Long term this code should go away, but that needs an audit of
    1234             :  *         all LLDDs first.
    1235             :  */
    1236           0 : int scsi_eh_get_sense(struct list_head *work_q,
    1237             :                       struct list_head *done_q)
    1238             : {
    1239           0 :         struct scsi_cmnd *scmd, *next;
    1240           0 :         struct Scsi_Host *shost;
    1241           0 :         int rtn;
    1242             : 
    1243             :         /*
    1244             :          * If SCSI_EH_ABORT_SCHEDULED has been set, it is timeout IO,
    1245             :          * should not get sense.
    1246             :          */
    1247           0 :         list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
    1248           0 :                 if ((scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) ||
    1249           0 :                     SCSI_SENSE_VALID(scmd))
    1250           0 :                         continue;
    1251             : 
    1252           0 :                 shost = scmd->device->host;
    1253           0 :                 if (scsi_host_eh_past_deadline(shost)) {
    1254             :                         SCSI_LOG_ERROR_RECOVERY(3,
    1255             :                                 scmd_printk(KERN_INFO, scmd,
    1256             :                                             "%s: skip request sense, past eh deadline\n",
    1257             :                                              current->comm));
    1258             :                         break;
    1259             :                 }
    1260           0 :                 if (status_byte(scmd->result) != CHECK_CONDITION)
    1261             :                         /*
    1262             :                          * don't request sense if there's no check condition
    1263             :                          * status because the error we're processing isn't one
    1264             :                          * that has a sense code (and some devices get
    1265             :                          * confused by sense requests out of the blue)
    1266             :                          */
    1267           0 :                         continue;
    1268             : 
    1269           0 :                 SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd,
    1270             :                                                   "%s: requesting sense\n",
    1271           0 :                                                   current->comm));
    1272           0 :                 rtn = scsi_request_sense(scmd);
    1273           0 :                 if (rtn != SUCCESS)
    1274           0 :                         continue;
    1275             : 
    1276           0 :                 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
    1277           0 :                         "sense requested, result %x\n", scmd->result));
    1278           0 :                 SCSI_LOG_ERROR_RECOVERY(3, scsi_print_sense(scmd));
    1279             : 
    1280           0 :                 rtn = scsi_decide_disposition(scmd);
    1281             : 
    1282             :                 /*
    1283             :                  * if the result was normal, then just pass it along to the
    1284             :                  * upper level.
    1285             :                  */
    1286           0 :                 if (rtn == SUCCESS)
    1287             :                         /*
    1288             :                          * We don't want this command reissued, just finished
    1289             :                          * with the sense data, so set retries to the max
    1290             :                          * allowed to ensure it won't get reissued. If the user
    1291             :                          * has requested infinite retries, we also want to
    1292             :                          * finish this command, so force completion by setting
    1293             :                          * retries and allowed to the same value.
    1294             :                          */
    1295           0 :                         if (scmd->allowed == SCSI_CMD_RETRIES_NO_LIMIT)
    1296           0 :                                 scmd->retries = scmd->allowed = 1;
    1297             :                         else
    1298           0 :                                 scmd->retries = scmd->allowed;
    1299           0 :                 else if (rtn != NEEDS_RETRY)
    1300           0 :                         continue;
    1301             : 
    1302           0 :                 scsi_eh_finish_cmd(scmd, done_q);
    1303             :         }
    1304             : 
    1305           0 :         return list_empty(work_q);
    1306             : }
    1307             : EXPORT_SYMBOL_GPL(scsi_eh_get_sense);
    1308             : 
    1309             : /**
    1310             :  * scsi_eh_tur - Send TUR to device.
    1311             :  * @scmd:       &scsi_cmnd to send TUR
    1312             :  *
    1313             :  * Return value:
    1314             :  *    0 - Device is ready. 1 - Device NOT ready.
    1315             :  */
    1316           0 : static int scsi_eh_tur(struct scsi_cmnd *scmd)
    1317             : {
    1318           0 :         static unsigned char tur_command[6] = {TEST_UNIT_READY, 0, 0, 0, 0, 0};
    1319           0 :         int retry_cnt = 1, rtn;
    1320             : 
    1321           0 : retry_tur:
    1322           0 :         rtn = scsi_send_eh_cmnd(scmd, tur_command, 6,
    1323           0 :                                 scmd->device->eh_timeout, 0);
    1324             : 
    1325           0 :         SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
    1326           0 :                 "%s return: %x\n", __func__, rtn));
    1327             : 
    1328           0 :         switch (rtn) {
    1329           0 :         case NEEDS_RETRY:
    1330           0 :                 if (retry_cnt--)
    1331           0 :                         goto retry_tur;
    1332             :                 fallthrough;
    1333             :         case SUCCESS:
    1334             :                 return 0;
    1335           0 :         default:
    1336           0 :                 return 1;
    1337             :         }
    1338             : }
    1339             : 
    1340             : /**
    1341             :  * scsi_eh_test_devices - check if devices are responding from error recovery.
    1342             :  * @cmd_list:   scsi commands in error recovery.
    1343             :  * @work_q:     queue for commands which still need more error recovery
    1344             :  * @done_q:     queue for commands which are finished
    1345             :  * @try_stu:    boolean on if a STU command should be tried in addition to TUR.
    1346             :  *
    1347             :  * Decription:
    1348             :  *    Tests if devices are in a working state.  Commands to devices now in
    1349             :  *    a working state are sent to the done_q while commands to devices which
    1350             :  *    are still failing to respond are returned to the work_q for more
    1351             :  *    processing.
    1352             :  **/
    1353           0 : static int scsi_eh_test_devices(struct list_head *cmd_list,
    1354             :                                 struct list_head *work_q,
    1355             :                                 struct list_head *done_q, int try_stu)
    1356             : {
    1357           0 :         struct scsi_cmnd *scmd, *next;
    1358           0 :         struct scsi_device *sdev;
    1359           0 :         int finish_cmds;
    1360             : 
    1361           0 :         while (!list_empty(cmd_list)) {
    1362           0 :                 scmd = list_entry(cmd_list->next, struct scsi_cmnd, eh_entry);
    1363           0 :                 sdev = scmd->device;
    1364             : 
    1365           0 :                 if (!try_stu) {
    1366           0 :                         if (scsi_host_eh_past_deadline(sdev->host)) {
    1367             :                                 /* Push items back onto work_q */
    1368           0 :                                 list_splice_init(cmd_list, work_q);
    1369             :                                 SCSI_LOG_ERROR_RECOVERY(3,
    1370             :                                         sdev_printk(KERN_INFO, sdev,
    1371             :                                                     "%s: skip test device, past eh deadline",
    1372             :                                                     current->comm));
    1373             :                                 break;
    1374             :                         }
    1375             :                 }
    1376             : 
    1377           0 :                 finish_cmds = !scsi_device_online(scmd->device) ||
    1378           0 :                         (try_stu && !scsi_eh_try_stu(scmd) &&
    1379           0 :                          !scsi_eh_tur(scmd)) ||
    1380           0 :                         !scsi_eh_tur(scmd);
    1381             : 
    1382           0 :                 list_for_each_entry_safe(scmd, next, cmd_list, eh_entry)
    1383           0 :                         if (scmd->device == sdev) {
    1384           0 :                                 if (finish_cmds &&
    1385           0 :                                     (try_stu ||
    1386           0 :                                      scsi_eh_action(scmd, SUCCESS) == SUCCESS))
    1387           0 :                                         scsi_eh_finish_cmd(scmd, done_q);
    1388             :                                 else
    1389           0 :                                         list_move_tail(&scmd->eh_entry, work_q);
    1390             :                         }
    1391             :         }
    1392           0 :         return list_empty(work_q);
    1393             : }
    1394             : 
    1395             : /**
    1396             :  * scsi_eh_try_stu - Send START_UNIT to device.
    1397             :  * @scmd:       &scsi_cmnd to send START_UNIT
    1398             :  *
    1399             :  * Return value:
    1400             :  *    0 - Device is ready. 1 - Device NOT ready.
    1401             :  */
    1402           0 : static int scsi_eh_try_stu(struct scsi_cmnd *scmd)
    1403             : {
    1404           0 :         static unsigned char stu_command[6] = {START_STOP, 0, 0, 0, 1, 0};
    1405             : 
    1406           0 :         if (scmd->device->allow_restart) {
    1407             :                 int i, rtn = NEEDS_RETRY;
    1408             : 
    1409           0 :                 for (i = 0; rtn == NEEDS_RETRY && i < 2; i++)
    1410           0 :                         rtn = scsi_send_eh_cmnd(scmd, stu_command, 6, scmd->device->request_queue->rq_timeout, 0);
    1411             : 
    1412           0 :                 if (rtn == SUCCESS)
    1413           0 :                         return 0;
    1414             :         }
    1415             : 
    1416             :         return 1;
    1417             : }
    1418             : 
    1419             :  /**
    1420             :  * scsi_eh_stu - send START_UNIT if needed
    1421             :  * @shost:      &scsi host being recovered.
    1422             :  * @work_q:     &list_head for pending commands.
    1423             :  * @done_q:     &list_head for processed commands.
    1424             :  *
    1425             :  * Notes:
    1426             :  *    If commands are failing due to not ready, initializing command required,
    1427             :  *      try revalidating the device, which will end up sending a start unit.
    1428             :  */
    1429           0 : static int scsi_eh_stu(struct Scsi_Host *shost,
    1430             :                               struct list_head *work_q,
    1431             :                               struct list_head *done_q)
    1432             : {
    1433           0 :         struct scsi_cmnd *scmd, *stu_scmd, *next;
    1434           0 :         struct scsi_device *sdev;
    1435             : 
    1436           0 :         shost_for_each_device(sdev, shost) {
    1437           0 :                 if (scsi_host_eh_past_deadline(shost)) {
    1438           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    1439             :                                 sdev_printk(KERN_INFO, sdev,
    1440             :                                             "%s: skip START_UNIT, past eh deadline\n",
    1441           0 :                                             current->comm));
    1442           0 :                         scsi_device_put(sdev);
    1443           0 :                         break;
    1444             :                 }
    1445           0 :                 stu_scmd = NULL;
    1446           0 :                 list_for_each_entry(scmd, work_q, eh_entry)
    1447           0 :                         if (scmd->device == sdev && SCSI_SENSE_VALID(scmd) &&
    1448           0 :                             scsi_check_sense(scmd) == FAILED ) {
    1449             :                                 stu_scmd = scmd;
    1450             :                                 break;
    1451             :                         }
    1452             : 
    1453           0 :                 if (!stu_scmd)
    1454           0 :                         continue;
    1455             : 
    1456           0 :                 SCSI_LOG_ERROR_RECOVERY(3,
    1457             :                         sdev_printk(KERN_INFO, sdev,
    1458             :                                      "%s: Sending START_UNIT\n",
    1459           0 :                                     current->comm));
    1460             : 
    1461           0 :                 if (!scsi_eh_try_stu(stu_scmd)) {
    1462           0 :                         if (!scsi_device_online(sdev) ||
    1463           0 :                             !scsi_eh_tur(stu_scmd)) {
    1464           0 :                                 list_for_each_entry_safe(scmd, next,
    1465             :                                                           work_q, eh_entry) {
    1466           0 :                                         if (scmd->device == sdev &&
    1467           0 :                                             scsi_eh_action(scmd, SUCCESS) == SUCCESS)
    1468           0 :                                                 scsi_eh_finish_cmd(scmd, done_q);
    1469             :                                 }
    1470             :                         }
    1471             :                 } else {
    1472           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    1473             :                                 sdev_printk(KERN_INFO, sdev,
    1474             :                                             "%s: START_UNIT failed\n",
    1475           0 :                                             current->comm));
    1476             :                 }
    1477             :         }
    1478             : 
    1479           0 :         return list_empty(work_q);
    1480             : }
    1481             : 
    1482             : 
    1483             : /**
    1484             :  * scsi_eh_bus_device_reset - send bdr if needed
    1485             :  * @shost:      scsi host being recovered.
    1486             :  * @work_q:     &list_head for pending commands.
    1487             :  * @done_q:     &list_head for processed commands.
    1488             :  *
    1489             :  * Notes:
    1490             :  *    Try a bus device reset.  Still, look to see whether we have multiple
    1491             :  *    devices that are jammed or not - if we have multiple devices, it
    1492             :  *    makes no sense to try bus_device_reset - we really would need to try
    1493             :  *    a bus_reset instead.
    1494             :  */
    1495           0 : static int scsi_eh_bus_device_reset(struct Scsi_Host *shost,
    1496             :                                     struct list_head *work_q,
    1497             :                                     struct list_head *done_q)
    1498             : {
    1499           0 :         struct scsi_cmnd *scmd, *bdr_scmd, *next;
    1500           0 :         struct scsi_device *sdev;
    1501           0 :         int rtn;
    1502             : 
    1503           0 :         shost_for_each_device(sdev, shost) {
    1504           0 :                 if (scsi_host_eh_past_deadline(shost)) {
    1505           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    1506             :                                 sdev_printk(KERN_INFO, sdev,
    1507             :                                             "%s: skip BDR, past eh deadline\n",
    1508           0 :                                              current->comm));
    1509           0 :                         scsi_device_put(sdev);
    1510           0 :                         break;
    1511             :                 }
    1512           0 :                 bdr_scmd = NULL;
    1513           0 :                 list_for_each_entry(scmd, work_q, eh_entry)
    1514           0 :                         if (scmd->device == sdev) {
    1515             :                                 bdr_scmd = scmd;
    1516             :                                 break;
    1517             :                         }
    1518             : 
    1519           0 :                 if (!bdr_scmd)
    1520           0 :                         continue;
    1521             : 
    1522           0 :                 SCSI_LOG_ERROR_RECOVERY(3,
    1523             :                         sdev_printk(KERN_INFO, sdev,
    1524           0 :                                      "%s: Sending BDR\n", current->comm));
    1525           0 :                 rtn = scsi_try_bus_device_reset(bdr_scmd);
    1526           0 :                 if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
    1527           0 :                         if (!scsi_device_online(sdev) ||
    1528           0 :                             rtn == FAST_IO_FAIL ||
    1529           0 :                             !scsi_eh_tur(bdr_scmd)) {
    1530           0 :                                 list_for_each_entry_safe(scmd, next,
    1531             :                                                          work_q, eh_entry) {
    1532           0 :                                         if (scmd->device == sdev &&
    1533           0 :                                             scsi_eh_action(scmd, rtn) != FAILED)
    1534           0 :                                                 scsi_eh_finish_cmd(scmd,
    1535             :                                                                    done_q);
    1536             :                                 }
    1537             :                         }
    1538             :                 } else {
    1539           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    1540             :                                 sdev_printk(KERN_INFO, sdev,
    1541           0 :                                             "%s: BDR failed\n", current->comm));
    1542             :                 }
    1543             :         }
    1544             : 
    1545           0 :         return list_empty(work_q);
    1546             : }
    1547             : 
    1548             : /**
    1549             :  * scsi_eh_target_reset - send target reset if needed
    1550             :  * @shost:      scsi host being recovered.
    1551             :  * @work_q:     &list_head for pending commands.
    1552             :  * @done_q:     &list_head for processed commands.
    1553             :  *
    1554             :  * Notes:
    1555             :  *    Try a target reset.
    1556             :  */
    1557           0 : static int scsi_eh_target_reset(struct Scsi_Host *shost,
    1558             :                                 struct list_head *work_q,
    1559             :                                 struct list_head *done_q)
    1560             : {
    1561           0 :         LIST_HEAD(tmp_list);
    1562           0 :         LIST_HEAD(check_list);
    1563             : 
    1564           0 :         list_splice_init(work_q, &tmp_list);
    1565             : 
    1566           0 :         while (!list_empty(&tmp_list)) {
    1567           0 :                 struct scsi_cmnd *next, *scmd;
    1568           0 :                 int rtn;
    1569           0 :                 unsigned int id;
    1570             : 
    1571           0 :                 if (scsi_host_eh_past_deadline(shost)) {
    1572             :                         /* push back on work queue for further processing */
    1573           0 :                         list_splice_init(&check_list, work_q);
    1574           0 :                         list_splice_init(&tmp_list, work_q);
    1575           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    1576             :                                 shost_printk(KERN_INFO, shost,
    1577             :                                             "%s: Skip target reset, past eh deadline\n",
    1578           0 :                                              current->comm));
    1579           0 :                         return list_empty(work_q);
    1580             :                 }
    1581             : 
    1582           0 :                 scmd = list_entry(tmp_list.next, struct scsi_cmnd, eh_entry);
    1583           0 :                 id = scmd_id(scmd);
    1584             : 
    1585           0 :                 SCSI_LOG_ERROR_RECOVERY(3,
    1586             :                         shost_printk(KERN_INFO, shost,
    1587             :                                      "%s: Sending target reset to target %d\n",
    1588           0 :                                      current->comm, id));
    1589           0 :                 rtn = scsi_try_target_reset(scmd);
    1590           0 :                 if (rtn != SUCCESS && rtn != FAST_IO_FAIL)
    1591           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    1592             :                                 shost_printk(KERN_INFO, shost,
    1593             :                                              "%s: Target reset failed"
    1594             :                                              " target: %d\n",
    1595           0 :                                              current->comm, id));
    1596           0 :                 list_for_each_entry_safe(scmd, next, &tmp_list, eh_entry) {
    1597           0 :                         if (scmd_id(scmd) != id)
    1598           0 :                                 continue;
    1599             : 
    1600           0 :                         if (rtn == SUCCESS)
    1601           0 :                                 list_move_tail(&scmd->eh_entry, &check_list);
    1602           0 :                         else if (rtn == FAST_IO_FAIL)
    1603           0 :                                 scsi_eh_finish_cmd(scmd, done_q);
    1604             :                         else
    1605             :                                 /* push back on work queue for further processing */
    1606           0 :                                 list_move(&scmd->eh_entry, work_q);
    1607             :                 }
    1608             :         }
    1609             : 
    1610           0 :         return scsi_eh_test_devices(&check_list, work_q, done_q, 0);
    1611             : }
    1612             : 
    1613             : /**
    1614             :  * scsi_eh_bus_reset - send a bus reset
    1615             :  * @shost:      &scsi host being recovered.
    1616             :  * @work_q:     &list_head for pending commands.
    1617             :  * @done_q:     &list_head for processed commands.
    1618             :  */
    1619           0 : static int scsi_eh_bus_reset(struct Scsi_Host *shost,
    1620             :                              struct list_head *work_q,
    1621             :                              struct list_head *done_q)
    1622             : {
    1623           0 :         struct scsi_cmnd *scmd, *chan_scmd, *next;
    1624           0 :         LIST_HEAD(check_list);
    1625           0 :         unsigned int channel;
    1626           0 :         int rtn;
    1627             : 
    1628             :         /*
    1629             :          * we really want to loop over the various channels, and do this on
    1630             :          * a channel by channel basis.  we should also check to see if any
    1631             :          * of the failed commands are on soft_reset devices, and if so, skip
    1632             :          * the reset.
    1633             :          */
    1634             : 
    1635           0 :         for (channel = 0; channel <= shost->max_channel; channel++) {
    1636           0 :                 if (scsi_host_eh_past_deadline(shost)) {
    1637           0 :                         list_splice_init(&check_list, work_q);
    1638           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    1639             :                                 shost_printk(KERN_INFO, shost,
    1640             :                                             "%s: skip BRST, past eh deadline\n",
    1641           0 :                                              current->comm));
    1642           0 :                         return list_empty(work_q);
    1643             :                 }
    1644             : 
    1645           0 :                 chan_scmd = NULL;
    1646           0 :                 list_for_each_entry(scmd, work_q, eh_entry) {
    1647           0 :                         if (channel == scmd_channel(scmd)) {
    1648             :                                 chan_scmd = scmd;
    1649             :                                 break;
    1650             :                                 /*
    1651             :                                  * FIXME add back in some support for
    1652             :                                  * soft_reset devices.
    1653             :                                  */
    1654             :                         }
    1655             :                 }
    1656             : 
    1657           0 :                 if (!chan_scmd)
    1658           0 :                         continue;
    1659           0 :                 SCSI_LOG_ERROR_RECOVERY(3,
    1660             :                         shost_printk(KERN_INFO, shost,
    1661             :                                      "%s: Sending BRST chan: %d\n",
    1662           0 :                                      current->comm, channel));
    1663           0 :                 rtn = scsi_try_bus_reset(chan_scmd);
    1664           0 :                 if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
    1665           0 :                         list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
    1666           0 :                                 if (channel == scmd_channel(scmd)) {
    1667           0 :                                         if (rtn == FAST_IO_FAIL)
    1668           0 :                                                 scsi_eh_finish_cmd(scmd,
    1669             :                                                                    done_q);
    1670             :                                         else
    1671           0 :                                                 list_move_tail(&scmd->eh_entry,
    1672             :                                                                &check_list);
    1673             :                                 }
    1674             :                         }
    1675             :                 } else {
    1676           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    1677             :                                 shost_printk(KERN_INFO, shost,
    1678             :                                              "%s: BRST failed chan: %d\n",
    1679           0 :                                              current->comm, channel));
    1680             :                 }
    1681             :         }
    1682           0 :         return scsi_eh_test_devices(&check_list, work_q, done_q, 0);
    1683             : }
    1684             : 
    1685             : /**
    1686             :  * scsi_eh_host_reset - send a host reset
    1687             :  * @shost:      host to be reset.
    1688             :  * @work_q:     &list_head for pending commands.
    1689             :  * @done_q:     &list_head for processed commands.
    1690             :  */
    1691           0 : static int scsi_eh_host_reset(struct Scsi_Host *shost,
    1692             :                               struct list_head *work_q,
    1693             :                               struct list_head *done_q)
    1694             : {
    1695           0 :         struct scsi_cmnd *scmd, *next;
    1696           0 :         LIST_HEAD(check_list);
    1697           0 :         int rtn;
    1698             : 
    1699           0 :         if (!list_empty(work_q)) {
    1700           0 :                 scmd = list_entry(work_q->next,
    1701             :                                   struct scsi_cmnd, eh_entry);
    1702             : 
    1703           0 :                 SCSI_LOG_ERROR_RECOVERY(3,
    1704             :                         shost_printk(KERN_INFO, shost,
    1705             :                                      "%s: Sending HRST\n",
    1706           0 :                                      current->comm));
    1707             : 
    1708           0 :                 rtn = scsi_try_host_reset(scmd);
    1709           0 :                 if (rtn == SUCCESS) {
    1710           0 :                         list_splice_init(work_q, &check_list);
    1711           0 :                 } else if (rtn == FAST_IO_FAIL) {
    1712           0 :                         list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
    1713           0 :                                         scsi_eh_finish_cmd(scmd, done_q);
    1714             :                         }
    1715             :                 } else {
    1716           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    1717             :                                 shost_printk(KERN_INFO, shost,
    1718             :                                              "%s: HRST failed\n",
    1719           0 :                                              current->comm));
    1720             :                 }
    1721             :         }
    1722           0 :         return scsi_eh_test_devices(&check_list, work_q, done_q, 1);
    1723             : }
    1724             : 
    1725             : /**
    1726             :  * scsi_eh_offline_sdevs - offline scsi devices that fail to recover
    1727             :  * @work_q:     &list_head for pending commands.
    1728             :  * @done_q:     &list_head for processed commands.
    1729             :  */
    1730           0 : static void scsi_eh_offline_sdevs(struct list_head *work_q,
    1731             :                                   struct list_head *done_q)
    1732             : {
    1733           0 :         struct scsi_cmnd *scmd, *next;
    1734           0 :         struct scsi_device *sdev;
    1735             : 
    1736           0 :         list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
    1737           0 :                 sdev_printk(KERN_INFO, scmd->device, "Device offlined - "
    1738             :                             "not ready after error recovery\n");
    1739           0 :                 sdev = scmd->device;
    1740             : 
    1741           0 :                 mutex_lock(&sdev->state_mutex);
    1742           0 :                 scsi_device_set_state(sdev, SDEV_OFFLINE);
    1743           0 :                 mutex_unlock(&sdev->state_mutex);
    1744             : 
    1745           0 :                 scsi_eh_finish_cmd(scmd, done_q);
    1746             :         }
    1747           0 :         return;
    1748             : }
    1749             : 
    1750             : /**
    1751             :  * scsi_noretry_cmd - determine if command should be failed fast
    1752             :  * @scmd:       SCSI cmd to examine.
    1753             :  */
    1754           0 : int scsi_noretry_cmd(struct scsi_cmnd *scmd)
    1755             : {
    1756           0 :         switch (host_byte(scmd->result)) {
    1757             :         case DID_OK:
    1758             :                 break;
    1759           0 :         case DID_TIME_OUT:
    1760           0 :                 goto check_type;
    1761           0 :         case DID_BUS_BUSY:
    1762           0 :                 return (scmd->request->cmd_flags & REQ_FAILFAST_TRANSPORT);
    1763           0 :         case DID_PARITY:
    1764           0 :                 return (scmd->request->cmd_flags & REQ_FAILFAST_DEV);
    1765           0 :         case DID_ERROR:
    1766           0 :                 if (msg_byte(scmd->result) == COMMAND_COMPLETE &&
    1767           0 :                     status_byte(scmd->result) == RESERVATION_CONFLICT)
    1768             :                         return 0;
    1769           0 :                 fallthrough;
    1770             :         case DID_SOFT_ERROR:
    1771           0 :                 return (scmd->request->cmd_flags & REQ_FAILFAST_DRIVER);
    1772             :         }
    1773             : 
    1774           0 :         if (status_byte(scmd->result) != CHECK_CONDITION)
    1775             :                 return 0;
    1776             : 
    1777           0 : check_type:
    1778             :         /*
    1779             :          * assume caller has checked sense and determined
    1780             :          * the check condition was retryable.
    1781             :          */
    1782           0 :         if (scmd->request->cmd_flags & REQ_FAILFAST_DEV ||
    1783           0 :             blk_rq_is_passthrough(scmd->request))
    1784           0 :                 return 1;
    1785             : 
    1786             :         return 0;
    1787             : }
    1788             : 
    1789             : /**
    1790             :  * scsi_decide_disposition - Disposition a cmd on return from LLD.
    1791             :  * @scmd:       SCSI cmd to examine.
    1792             :  *
    1793             :  * Notes:
    1794             :  *    This is *only* called when we are examining the status after sending
    1795             :  *    out the actual data command.  any commands that are queued for error
    1796             :  *    recovery (e.g. test_unit_ready) do *not* come through here.
    1797             :  *
    1798             :  *    When this routine returns failed, it means the error handler thread
    1799             :  *    is woken.  In cases where the error code indicates an error that
    1800             :  *    doesn't require the error handler read (i.e. we don't need to
    1801             :  *    abort/reset), this function should return SUCCESS.
    1802             :  */
    1803           0 : int scsi_decide_disposition(struct scsi_cmnd *scmd)
    1804             : {
    1805           0 :         int rtn;
    1806             : 
    1807             :         /*
    1808             :          * if the device is offline, then we clearly just pass the result back
    1809             :          * up to the top level.
    1810             :          */
    1811           0 :         if (!scsi_device_online(scmd->device)) {
    1812             :                 SCSI_LOG_ERROR_RECOVERY(5, scmd_printk(KERN_INFO, scmd,
    1813             :                         "%s: device offline - report as SUCCESS\n", __func__));
    1814             :                 return SUCCESS;
    1815             :         }
    1816             : 
    1817             :         /*
    1818             :          * first check the host byte, to see if there is anything in there
    1819             :          * that would indicate what we need to do.
    1820             :          */
    1821           0 :         switch (host_byte(scmd->result)) {
    1822           0 :         case DID_PASSTHROUGH:
    1823             :                 /*
    1824             :                  * no matter what, pass this through to the upper layer.
    1825             :                  * nuke this special code so that it looks like we are saying
    1826             :                  * did_ok.
    1827             :                  */
    1828           0 :                 scmd->result &= 0xff00ffff;
    1829           0 :                 return SUCCESS;
    1830             :         case DID_OK:
    1831             :                 /*
    1832             :                  * looks good.  drop through, and check the next byte.
    1833             :                  */
    1834             :                 break;
    1835           0 :         case DID_ABORT:
    1836           0 :                 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) {
    1837           0 :                         set_host_byte(scmd, DID_TIME_OUT);
    1838           0 :                         return SUCCESS;
    1839             :                 }
    1840             :                 fallthrough;
    1841             :         case DID_NO_CONNECT:
    1842             :         case DID_BAD_TARGET:
    1843             :                 /*
    1844             :                  * note - this means that we just report the status back
    1845             :                  * to the top level driver, not that we actually think
    1846             :                  * that it indicates SUCCESS.
    1847             :                  */
    1848             :                 return SUCCESS;
    1849           0 :         case DID_SOFT_ERROR:
    1850             :                 /*
    1851             :                  * when the low level driver returns did_soft_error,
    1852             :                  * it is responsible for keeping an internal retry counter
    1853             :                  * in order to avoid endless loops (db)
    1854             :                  */
    1855           0 :                 goto maybe_retry;
    1856           0 :         case DID_IMM_RETRY:
    1857           0 :                 return NEEDS_RETRY;
    1858             : 
    1859           0 :         case DID_REQUEUE:
    1860           0 :                 return ADD_TO_MLQUEUE;
    1861           0 :         case DID_TRANSPORT_DISRUPTED:
    1862             :                 /*
    1863             :                  * LLD/transport was disrupted during processing of the IO.
    1864             :                  * The transport class is now blocked/blocking,
    1865             :                  * and the transport will decide what to do with the IO
    1866             :                  * based on its timers and recovery capablilities if
    1867             :                  * there are enough retries.
    1868             :                  */
    1869           0 :                 goto maybe_retry;
    1870             :         case DID_TRANSPORT_FAILFAST:
    1871             :                 /*
    1872             :                  * The transport decided to failfast the IO (most likely
    1873             :                  * the fast io fail tmo fired), so send IO directly upwards.
    1874             :                  */
    1875             :                 return SUCCESS;
    1876             :         case DID_TRANSPORT_MARGINAL:
    1877             :                 /*
    1878             :                  * caller has decided not to do retries on
    1879             :                  * abort success, so send IO directly upwards
    1880             :                  */
    1881             :                 return SUCCESS;
    1882           0 :         case DID_ERROR:
    1883           0 :                 if (msg_byte(scmd->result) == COMMAND_COMPLETE &&
    1884           0 :                     status_byte(scmd->result) == RESERVATION_CONFLICT)
    1885             :                         /*
    1886             :                          * execute reservation conflict processing code
    1887             :                          * lower down
    1888             :                          */
    1889             :                         break;
    1890           0 :                 fallthrough;
    1891             :         case DID_BUS_BUSY:
    1892             :         case DID_PARITY:
    1893           0 :                 goto maybe_retry;
    1894           0 :         case DID_TIME_OUT:
    1895             :                 /*
    1896             :                  * when we scan the bus, we get timeout messages for
    1897             :                  * these commands if there is no device available.
    1898             :                  * other hosts report did_no_connect for the same thing.
    1899             :                  */
    1900           0 :                 if ((scmd->cmnd[0] == TEST_UNIT_READY ||
    1901             :                      scmd->cmnd[0] == INQUIRY)) {
    1902             :                         return SUCCESS;
    1903             :                 } else {
    1904           0 :                         return FAILED;
    1905             :                 }
    1906             :         case DID_RESET:
    1907             :                 return SUCCESS;
    1908           0 :         default:
    1909           0 :                 return FAILED;
    1910             :         }
    1911             : 
    1912             :         /*
    1913             :          * next, check the message byte.
    1914             :          */
    1915           0 :         if (msg_byte(scmd->result) != COMMAND_COMPLETE)
    1916             :                 return FAILED;
    1917             : 
    1918             :         /*
    1919             :          * check the status byte to see if this indicates anything special.
    1920             :          */
    1921           0 :         switch (status_byte(scmd->result)) {
    1922           0 :         case QUEUE_FULL:
    1923           0 :                 scsi_handle_queue_full(scmd->device);
    1924             :                 /*
    1925             :                  * the case of trying to send too many commands to a
    1926             :                  * tagged queueing device.
    1927             :                  */
    1928             :                 fallthrough;
    1929             :         case BUSY:
    1930             :                 /*
    1931             :                  * device can't talk to us at the moment.  Should only
    1932             :                  * occur (SAM-3) when the task queue is empty, so will cause
    1933             :                  * the empty queue handling to trigger a stall in the
    1934             :                  * device.
    1935             :                  */
    1936             :                 return ADD_TO_MLQUEUE;
    1937           0 :         case GOOD:
    1938           0 :                 if (scmd->cmnd[0] == REPORT_LUNS)
    1939           0 :                         scmd->device->sdev_target->expecting_lun_change = 0;
    1940           0 :                 scsi_handle_queue_ramp_up(scmd->device);
    1941             :                 fallthrough;
    1942             :         case COMMAND_TERMINATED:
    1943             :                 return SUCCESS;
    1944           0 :         case TASK_ABORTED:
    1945           0 :                 goto maybe_retry;
    1946           0 :         case CHECK_CONDITION:
    1947           0 :                 rtn = scsi_check_sense(scmd);
    1948           0 :                 if (rtn == NEEDS_RETRY)
    1949           0 :                         goto maybe_retry;
    1950             :                 /* if rtn == FAILED, we have no sense information;
    1951             :                  * returning FAILED will wake the error handler thread
    1952             :                  * to collect the sense and redo the decide
    1953             :                  * disposition */
    1954             :                 return rtn;
    1955             :         case CONDITION_GOOD:
    1956             :         case INTERMEDIATE_GOOD:
    1957             :         case INTERMEDIATE_C_GOOD:
    1958             :         case ACA_ACTIVE:
    1959             :                 /*
    1960             :                  * who knows?  FIXME(eric)
    1961             :                  */
    1962             :                 return SUCCESS;
    1963             : 
    1964           0 :         case RESERVATION_CONFLICT:
    1965           0 :                 sdev_printk(KERN_INFO, scmd->device,
    1966             :                             "reservation conflict\n");
    1967           0 :                 set_host_byte(scmd, DID_NEXUS_FAILURE);
    1968           0 :                 return SUCCESS; /* causes immediate i/o error */
    1969           0 :         default:
    1970           0 :                 return FAILED;
    1971             :         }
    1972             :         return FAILED;
    1973             : 
    1974           0 : maybe_retry:
    1975             : 
    1976             :         /* we requeue for retry because the error was retryable, and
    1977             :          * the request was not marked fast fail.  Note that above,
    1978             :          * even if the request is marked fast fail, we still requeue
    1979             :          * for queue congestion conditions (QUEUE_FULL or BUSY) */
    1980           0 :         if (scsi_cmd_retry_allowed(scmd) && !scsi_noretry_cmd(scmd)) {
    1981             :                 return NEEDS_RETRY;
    1982             :         } else {
    1983             :                 /*
    1984             :                  * no more retries - report this one back to upper level.
    1985             :                  */
    1986           0 :                 return SUCCESS;
    1987             :         }
    1988             : }
    1989             : 
    1990           0 : static void eh_lock_door_done(struct request *req, blk_status_t status)
    1991             : {
    1992           0 :         blk_put_request(req);
    1993           0 : }
    1994             : 
    1995             : /**
    1996             :  * scsi_eh_lock_door - Prevent medium removal for the specified device
    1997             :  * @sdev:       SCSI device to prevent medium removal
    1998             :  *
    1999             :  * Locking:
    2000             :  *      We must be called from process context.
    2001             :  *
    2002             :  * Notes:
    2003             :  *      We queue up an asynchronous "ALLOW MEDIUM REMOVAL" request on the
    2004             :  *      head of the devices request queue, and continue.
    2005             :  */
    2006           0 : static void scsi_eh_lock_door(struct scsi_device *sdev)
    2007             : {
    2008           0 :         struct request *req;
    2009           0 :         struct scsi_request *rq;
    2010             : 
    2011           0 :         req = blk_get_request(sdev->request_queue, REQ_OP_SCSI_IN, 0);
    2012           0 :         if (IS_ERR(req))
    2013             :                 return;
    2014           0 :         rq = scsi_req(req);
    2015             : 
    2016           0 :         rq->cmd[0] = ALLOW_MEDIUM_REMOVAL;
    2017           0 :         rq->cmd[1] = 0;
    2018           0 :         rq->cmd[2] = 0;
    2019           0 :         rq->cmd[3] = 0;
    2020           0 :         rq->cmd[4] = SCSI_REMOVAL_PREVENT;
    2021           0 :         rq->cmd[5] = 0;
    2022           0 :         rq->cmd_len = COMMAND_SIZE(rq->cmd[0]);
    2023             : 
    2024           0 :         req->rq_flags |= RQF_QUIET;
    2025           0 :         req->timeout = 10 * HZ;
    2026           0 :         rq->retries = 5;
    2027             : 
    2028           0 :         blk_execute_rq_nowait(NULL, req, 1, eh_lock_door_done);
    2029             : }
    2030             : 
    2031             : /**
    2032             :  * scsi_restart_operations - restart io operations to the specified host.
    2033             :  * @shost:      Host we are restarting.
    2034             :  *
    2035             :  * Notes:
    2036             :  *    When we entered the error handler, we blocked all further i/o to
    2037             :  *    this device.  we need to 'reverse' this process.
    2038             :  */
    2039           0 : static void scsi_restart_operations(struct Scsi_Host *shost)
    2040             : {
    2041           0 :         struct scsi_device *sdev;
    2042           0 :         unsigned long flags;
    2043             : 
    2044             :         /*
    2045             :          * If the door was locked, we need to insert a door lock request
    2046             :          * onto the head of the SCSI request queue for the device.  There
    2047             :          * is no point trying to lock the door of an off-line device.
    2048             :          */
    2049           0 :         shost_for_each_device(sdev, shost) {
    2050           0 :                 if (scsi_device_online(sdev) && sdev->was_reset && sdev->locked) {
    2051           0 :                         scsi_eh_lock_door(sdev);
    2052           0 :                         sdev->was_reset = 0;
    2053             :                 }
    2054             :         }
    2055             : 
    2056             :         /*
    2057             :          * next free up anything directly waiting upon the host.  this
    2058             :          * will be requests for character device operations, and also for
    2059             :          * ioctls to queued block devices.
    2060             :          */
    2061           0 :         SCSI_LOG_ERROR_RECOVERY(3,
    2062           0 :                 shost_printk(KERN_INFO, shost, "waking up host to restart\n"));
    2063             : 
    2064           0 :         spin_lock_irqsave(shost->host_lock, flags);
    2065           0 :         if (scsi_host_set_state(shost, SHOST_RUNNING))
    2066           0 :                 if (scsi_host_set_state(shost, SHOST_CANCEL))
    2067           0 :                         BUG_ON(scsi_host_set_state(shost, SHOST_DEL));
    2068           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
    2069             : 
    2070           0 :         wake_up(&shost->host_wait);
    2071             : 
    2072             :         /*
    2073             :          * finally we need to re-initiate requests that may be pending.  we will
    2074             :          * have had everything blocked while error handling is taking place, and
    2075             :          * now that error recovery is done, we will need to ensure that these
    2076             :          * requests are started.
    2077             :          */
    2078           0 :         scsi_run_host_queues(shost);
    2079             : 
    2080             :         /*
    2081             :          * if eh is active and host_eh_scheduled is pending we need to re-run
    2082             :          * recovery.  we do this check after scsi_run_host_queues() to allow
    2083             :          * everything pent up since the last eh run a chance to make forward
    2084             :          * progress before we sync again.  Either we'll immediately re-run
    2085             :          * recovery or scsi_device_unbusy() will wake us again when these
    2086             :          * pending commands complete.
    2087             :          */
    2088           0 :         spin_lock_irqsave(shost->host_lock, flags);
    2089           0 :         if (shost->host_eh_scheduled)
    2090           0 :                 if (scsi_host_set_state(shost, SHOST_RECOVERY))
    2091           0 :                         WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY));
    2092           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
    2093           0 : }
    2094             : 
    2095             : /**
    2096             :  * scsi_eh_ready_devs - check device ready state and recover if not.
    2097             :  * @shost:      host to be recovered.
    2098             :  * @work_q:     &list_head for pending commands.
    2099             :  * @done_q:     &list_head for processed commands.
    2100             :  */
    2101           0 : void scsi_eh_ready_devs(struct Scsi_Host *shost,
    2102             :                         struct list_head *work_q,
    2103             :                         struct list_head *done_q)
    2104             : {
    2105           0 :         if (!scsi_eh_stu(shost, work_q, done_q))
    2106           0 :                 if (!scsi_eh_bus_device_reset(shost, work_q, done_q))
    2107           0 :                         if (!scsi_eh_target_reset(shost, work_q, done_q))
    2108           0 :                                 if (!scsi_eh_bus_reset(shost, work_q, done_q))
    2109           0 :                                         if (!scsi_eh_host_reset(shost, work_q, done_q))
    2110           0 :                                                 scsi_eh_offline_sdevs(work_q,
    2111             :                                                                       done_q);
    2112           0 : }
    2113             : EXPORT_SYMBOL_GPL(scsi_eh_ready_devs);
    2114             : 
    2115             : /**
    2116             :  * scsi_eh_flush_done_q - finish processed commands or retry them.
    2117             :  * @done_q:     list_head of processed commands.
    2118             :  */
    2119           0 : void scsi_eh_flush_done_q(struct list_head *done_q)
    2120             : {
    2121           0 :         struct scsi_cmnd *scmd, *next;
    2122             : 
    2123           0 :         list_for_each_entry_safe(scmd, next, done_q, eh_entry) {
    2124           0 :                 list_del_init(&scmd->eh_entry);
    2125           0 :                 if (scsi_device_online(scmd->device) &&
    2126           0 :                     !scsi_noretry_cmd(scmd) && scsi_cmd_retry_allowed(scmd) &&
    2127           0 :                         scsi_eh_should_retry_cmd(scmd)) {
    2128           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    2129             :                                 scmd_printk(KERN_INFO, scmd,
    2130             :                                              "%s: flush retry cmd\n",
    2131           0 :                                              current->comm));
    2132           0 :                                 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
    2133             :                 } else {
    2134             :                         /*
    2135             :                          * If just we got sense for the device (called
    2136             :                          * scsi_eh_get_sense), scmd->result is already
    2137             :                          * set, do not set DRIVER_TIMEOUT.
    2138             :                          */
    2139           0 :                         if (!scmd->result)
    2140           0 :                                 scmd->result |= (DRIVER_TIMEOUT << 24);
    2141           0 :                         SCSI_LOG_ERROR_RECOVERY(3,
    2142             :                                 scmd_printk(KERN_INFO, scmd,
    2143             :                                              "%s: flush finish cmd\n",
    2144           0 :                                              current->comm));
    2145           0 :                         scsi_finish_command(scmd);
    2146             :                 }
    2147             :         }
    2148           0 : }
    2149             : EXPORT_SYMBOL(scsi_eh_flush_done_q);
    2150             : 
    2151             : /**
    2152             :  * scsi_unjam_host - Attempt to fix a host which has a cmd that failed.
    2153             :  * @shost:      Host to unjam.
    2154             :  *
    2155             :  * Notes:
    2156             :  *    When we come in here, we *know* that all commands on the bus have
    2157             :  *    either completed, failed or timed out.  we also know that no further
    2158             :  *    commands are being sent to the host, so things are relatively quiet
    2159             :  *    and we have freedom to fiddle with things as we wish.
    2160             :  *
    2161             :  *    This is only the *default* implementation.  it is possible for
    2162             :  *    individual drivers to supply their own version of this function, and
    2163             :  *    if the maintainer wishes to do this, it is strongly suggested that
    2164             :  *    this function be taken as a template and modified.  this function
    2165             :  *    was designed to correctly handle problems for about 95% of the
    2166             :  *    different cases out there, and it should always provide at least a
    2167             :  *    reasonable amount of error recovery.
    2168             :  *
    2169             :  *    Any command marked 'failed' or 'timeout' must eventually have
    2170             :  *    scsi_finish_cmd() called for it.  we do all of the retry stuff
    2171             :  *    here, so when we restart the host after we return it should have an
    2172             :  *    empty queue.
    2173             :  */
    2174           0 : static void scsi_unjam_host(struct Scsi_Host *shost)
    2175             : {
    2176           0 :         unsigned long flags;
    2177           0 :         LIST_HEAD(eh_work_q);
    2178           0 :         LIST_HEAD(eh_done_q);
    2179             : 
    2180           0 :         spin_lock_irqsave(shost->host_lock, flags);
    2181           0 :         list_splice_init(&shost->eh_cmd_q, &eh_work_q);
    2182           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
    2183             : 
    2184           0 :         SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q));
    2185             : 
    2186           0 :         if (!scsi_eh_get_sense(&eh_work_q, &eh_done_q))
    2187           0 :                 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q);
    2188             : 
    2189           0 :         spin_lock_irqsave(shost->host_lock, flags);
    2190           0 :         if (shost->eh_deadline != -1)
    2191           0 :                 shost->last_reset = 0;
    2192           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
    2193           0 :         scsi_eh_flush_done_q(&eh_done_q);
    2194           0 : }
    2195             : 
    2196             : /**
    2197             :  * scsi_error_handler - SCSI error handler thread
    2198             :  * @data:       Host for which we are running.
    2199             :  *
    2200             :  * Notes:
    2201             :  *    This is the main error handling loop.  This is run as a kernel thread
    2202             :  *    for every SCSI host and handles all error handling activity.
    2203             :  */
    2204           0 : int scsi_error_handler(void *data)
    2205             : {
    2206           0 :         struct Scsi_Host *shost = data;
    2207             : 
    2208             :         /*
    2209             :          * We use TASK_INTERRUPTIBLE so that the thread is not
    2210             :          * counted against the load average as a running process.
    2211             :          * We never actually get interrupted because kthread_run
    2212             :          * disables signal delivery for the created thread.
    2213             :          */
    2214           0 :         while (true) {
    2215             :                 /*
    2216             :                  * The sequence in kthread_stop() sets the stop flag first
    2217             :                  * then wakes the process.  To avoid missed wakeups, the task
    2218             :                  * should always be in a non running state before the stop
    2219             :                  * flag is checked
    2220             :                  */
    2221           0 :                 set_current_state(TASK_INTERRUPTIBLE);
    2222           0 :                 if (kthread_should_stop())
    2223             :                         break;
    2224             : 
    2225           0 :                 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) ||
    2226           0 :                     shost->host_failed != scsi_host_busy(shost)) {
    2227           0 :                         SCSI_LOG_ERROR_RECOVERY(1,
    2228             :                                 shost_printk(KERN_INFO, shost,
    2229             :                                              "scsi_eh_%d: sleeping\n",
    2230           0 :                                              shost->host_no));
    2231           0 :                         schedule();
    2232           0 :                         continue;
    2233             :                 }
    2234             : 
    2235           0 :                 __set_current_state(TASK_RUNNING);
    2236           0 :                 SCSI_LOG_ERROR_RECOVERY(1,
    2237             :                         shost_printk(KERN_INFO, shost,
    2238             :                                      "scsi_eh_%d: waking up %d/%d/%d\n",
    2239             :                                      shost->host_no, shost->host_eh_scheduled,
    2240             :                                      shost->host_failed,
    2241           0 :                                      scsi_host_busy(shost)));
    2242             : 
    2243             :                 /*
    2244             :                  * We have a host that is failing for some reason.  Figure out
    2245             :                  * what we need to do to get it up and online again (if we can).
    2246             :                  * If we fail, we end up taking the thing offline.
    2247             :                  */
    2248           0 :                 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) {
    2249             :                         SCSI_LOG_ERROR_RECOVERY(1,
    2250             :                                 shost_printk(KERN_ERR, shost,
    2251             :                                              "scsi_eh_%d: unable to autoresume\n",
    2252             :                                              shost->host_no));
    2253             :                         continue;
    2254             :                 }
    2255             : 
    2256           0 :                 if (shost->transportt->eh_strategy_handler)
    2257           0 :                         shost->transportt->eh_strategy_handler(shost);
    2258             :                 else
    2259           0 :                         scsi_unjam_host(shost);
    2260             : 
    2261             :                 /* All scmds have been handled */
    2262           0 :                 shost->host_failed = 0;
    2263             : 
    2264             :                 /*
    2265             :                  * Note - if the above fails completely, the action is to take
    2266             :                  * individual devices offline and flush the queue of any
    2267             :                  * outstanding requests that may have been pending.  When we
    2268             :                  * restart, we restart any I/O to any other devices on the bus
    2269             :                  * which are still online.
    2270             :                  */
    2271           0 :                 scsi_restart_operations(shost);
    2272           0 :                 if (!shost->eh_noresume)
    2273           0 :                         scsi_autopm_put_host(shost);
    2274             :         }
    2275           0 :         __set_current_state(TASK_RUNNING);
    2276             : 
    2277           0 :         SCSI_LOG_ERROR_RECOVERY(1,
    2278             :                 shost_printk(KERN_INFO, shost,
    2279             :                              "Error handler scsi_eh_%d exiting\n",
    2280           0 :                              shost->host_no));
    2281           0 :         shost->ehandler = NULL;
    2282           0 :         return 0;
    2283             : }
    2284             : 
    2285             : /*
    2286             :  * Function:    scsi_report_bus_reset()
    2287             :  *
    2288             :  * Purpose:     Utility function used by low-level drivers to report that
    2289             :  *              they have observed a bus reset on the bus being handled.
    2290             :  *
    2291             :  * Arguments:   shost       - Host in question
    2292             :  *              channel     - channel on which reset was observed.
    2293             :  *
    2294             :  * Returns:     Nothing
    2295             :  *
    2296             :  * Lock status: Host lock must be held.
    2297             :  *
    2298             :  * Notes:       This only needs to be called if the reset is one which
    2299             :  *              originates from an unknown location.  Resets originated
    2300             :  *              by the mid-level itself don't need to call this, but there
    2301             :  *              should be no harm.
    2302             :  *
    2303             :  *              The main purpose of this is to make sure that a CHECK_CONDITION
    2304             :  *              is properly treated.
    2305             :  */
    2306           0 : void scsi_report_bus_reset(struct Scsi_Host *shost, int channel)
    2307             : {
    2308           0 :         struct scsi_device *sdev;
    2309             : 
    2310           0 :         __shost_for_each_device(sdev, shost) {
    2311           0 :                 if (channel == sdev_channel(sdev))
    2312           0 :                         __scsi_report_device_reset(sdev, NULL);
    2313             :         }
    2314           0 : }
    2315             : EXPORT_SYMBOL(scsi_report_bus_reset);
    2316             : 
    2317             : /*
    2318             :  * Function:    scsi_report_device_reset()
    2319             :  *
    2320             :  * Purpose:     Utility function used by low-level drivers to report that
    2321             :  *              they have observed a device reset on the device being handled.
    2322             :  *
    2323             :  * Arguments:   shost       - Host in question
    2324             :  *              channel     - channel on which reset was observed
    2325             :  *              target      - target on which reset was observed
    2326             :  *
    2327             :  * Returns:     Nothing
    2328             :  *
    2329             :  * Lock status: Host lock must be held
    2330             :  *
    2331             :  * Notes:       This only needs to be called if the reset is one which
    2332             :  *              originates from an unknown location.  Resets originated
    2333             :  *              by the mid-level itself don't need to call this, but there
    2334             :  *              should be no harm.
    2335             :  *
    2336             :  *              The main purpose of this is to make sure that a CHECK_CONDITION
    2337             :  *              is properly treated.
    2338             :  */
    2339           0 : void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target)
    2340             : {
    2341           0 :         struct scsi_device *sdev;
    2342             : 
    2343           0 :         __shost_for_each_device(sdev, shost) {
    2344           0 :                 if (channel == sdev_channel(sdev) &&
    2345           0 :                     target == sdev_id(sdev))
    2346           0 :                         __scsi_report_device_reset(sdev, NULL);
    2347             :         }
    2348           0 : }
    2349             : EXPORT_SYMBOL(scsi_report_device_reset);
    2350             : 
    2351             : static void
    2352           0 : scsi_reset_provider_done_command(struct scsi_cmnd *scmd)
    2353             : {
    2354           0 : }
    2355             : 
    2356             : /**
    2357             :  * scsi_ioctl_reset: explicitly reset a host/bus/target/device
    2358             :  * @dev:        scsi_device to operate on
    2359             :  * @arg:        reset type (see sg.h)
    2360             :  */
    2361             : int
    2362           0 : scsi_ioctl_reset(struct scsi_device *dev, int __user *arg)
    2363             : {
    2364           0 :         struct scsi_cmnd *scmd;
    2365           0 :         struct Scsi_Host *shost = dev->host;
    2366           0 :         struct request *rq;
    2367           0 :         unsigned long flags;
    2368           0 :         int error = 0, rtn, val;
    2369             : 
    2370           0 :         if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
    2371           0 :                 return -EACCES;
    2372             : 
    2373           0 :         error = get_user(val, arg);
    2374           0 :         if (error)
    2375             :                 return error;
    2376             : 
    2377           0 :         if (scsi_autopm_get_host(shost) < 0)
    2378             :                 return -EIO;
    2379             : 
    2380           0 :         error = -EIO;
    2381           0 :         rq = kzalloc(sizeof(struct request) + sizeof(struct scsi_cmnd) +
    2382           0 :                         shost->hostt->cmd_size, GFP_KERNEL);
    2383           0 :         if (!rq)
    2384           0 :                 goto out_put_autopm_host;
    2385           0 :         blk_rq_init(NULL, rq);
    2386             : 
    2387           0 :         scmd = (struct scsi_cmnd *)(rq + 1);
    2388           0 :         scsi_init_command(dev, scmd);
    2389           0 :         scmd->request = rq;
    2390           0 :         scmd->cmnd = scsi_req(rq)->cmd;
    2391             : 
    2392           0 :         scmd->scsi_done              = scsi_reset_provider_done_command;
    2393           0 :         memset(&scmd->sdb, 0, sizeof(scmd->sdb));
    2394             : 
    2395           0 :         scmd->cmd_len                        = 0;
    2396             : 
    2397           0 :         scmd->sc_data_direction              = DMA_BIDIRECTIONAL;
    2398             : 
    2399           0 :         spin_lock_irqsave(shost->host_lock, flags);
    2400           0 :         shost->tmf_in_progress = 1;
    2401           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
    2402             : 
    2403           0 :         switch (val & ~SG_SCSI_RESET_NO_ESCALATE) {
    2404             :         case SG_SCSI_RESET_NOTHING:
    2405             :                 rtn = SUCCESS;
    2406             :                 break;
    2407           0 :         case SG_SCSI_RESET_DEVICE:
    2408           0 :                 rtn = scsi_try_bus_device_reset(scmd);
    2409           0 :                 if (rtn == SUCCESS || (val & SG_SCSI_RESET_NO_ESCALATE))
    2410             :                         break;
    2411           0 :                 fallthrough;
    2412             :         case SG_SCSI_RESET_TARGET:
    2413           0 :                 rtn = scsi_try_target_reset(scmd);
    2414           0 :                 if (rtn == SUCCESS || (val & SG_SCSI_RESET_NO_ESCALATE))
    2415             :                         break;
    2416           0 :                 fallthrough;
    2417             :         case SG_SCSI_RESET_BUS:
    2418           0 :                 rtn = scsi_try_bus_reset(scmd);
    2419           0 :                 if (rtn == SUCCESS || (val & SG_SCSI_RESET_NO_ESCALATE))
    2420             :                         break;
    2421           0 :                 fallthrough;
    2422             :         case SG_SCSI_RESET_HOST:
    2423           0 :                 rtn = scsi_try_host_reset(scmd);
    2424           0 :                 if (rtn == SUCCESS)
    2425             :                         break;
    2426             :                 fallthrough;
    2427             :         default:
    2428             :                 rtn = FAILED;
    2429             :                 break;
    2430             :         }
    2431             : 
    2432           0 :         error = (rtn == SUCCESS) ? 0 : -EIO;
    2433             : 
    2434           0 :         spin_lock_irqsave(shost->host_lock, flags);
    2435           0 :         shost->tmf_in_progress = 0;
    2436           0 :         spin_unlock_irqrestore(shost->host_lock, flags);
    2437             : 
    2438             :         /*
    2439             :          * be sure to wake up anyone who was sleeping or had their queue
    2440             :          * suspended while we performed the TMF.
    2441             :          */
    2442           0 :         SCSI_LOG_ERROR_RECOVERY(3,
    2443             :                 shost_printk(KERN_INFO, shost,
    2444           0 :                              "waking up host to restart after TMF\n"));
    2445             : 
    2446           0 :         wake_up(&shost->host_wait);
    2447           0 :         scsi_run_host_queues(shost);
    2448             : 
    2449           0 :         kfree(rq);
    2450             : 
    2451             : out_put_autopm_host:
    2452           0 :         scsi_autopm_put_host(shost);
    2453             :         return error;
    2454             : }
    2455             : 
    2456           0 : bool scsi_command_normalize_sense(const struct scsi_cmnd *cmd,
    2457             :                                   struct scsi_sense_hdr *sshdr)
    2458             : {
    2459           0 :         return scsi_normalize_sense(cmd->sense_buffer,
    2460             :                         SCSI_SENSE_BUFFERSIZE, sshdr);
    2461             : }
    2462             : EXPORT_SYMBOL(scsi_command_normalize_sense);
    2463             : 
    2464             : /**
    2465             :  * scsi_get_sense_info_fld - get information field from sense data (either fixed or descriptor format)
    2466             :  * @sense_buffer:       byte array of sense data
    2467             :  * @sb_len:             number of valid bytes in sense_buffer
    2468             :  * @info_out:           pointer to 64 integer where 8 or 4 byte information
    2469             :  *                      field will be placed if found.
    2470             :  *
    2471             :  * Return value:
    2472             :  *      true if information field found, false if not found.
    2473             :  */
    2474           0 : bool scsi_get_sense_info_fld(const u8 *sense_buffer, int sb_len,
    2475             :                              u64 *info_out)
    2476             : {
    2477           0 :         const u8 * ucp;
    2478             : 
    2479           0 :         if (sb_len < 7)
    2480             :                 return false;
    2481           0 :         switch (sense_buffer[0] & 0x7f) {
    2482           0 :         case 0x70:
    2483             :         case 0x71:
    2484           0 :                 if (sense_buffer[0] & 0x80) {
    2485           0 :                         *info_out = get_unaligned_be32(&sense_buffer[3]);
    2486           0 :                         return true;
    2487             :                 }
    2488             :                 return false;
    2489           0 :         case 0x72:
    2490             :         case 0x73:
    2491           0 :                 ucp = scsi_sense_desc_find(sense_buffer, sb_len,
    2492             :                                            0 /* info desc */);
    2493           0 :                 if (ucp && (0xa == ucp[1])) {
    2494           0 :                         *info_out = get_unaligned_be64(&ucp[4]);
    2495           0 :                         return true;
    2496             :                 }
    2497             :                 return false;
    2498             :         default:
    2499             :                 return false;
    2500             :         }
    2501             : }
    2502             : EXPORT_SYMBOL(scsi_get_sense_info_fld);

Generated by: LCOV version 1.14