linux/drivers/scsi/scsi_error.c
<<
>>
Prefs
   1/*
   2 *  scsi_error.c Copyright (C) 1997 Eric Youngdale
   3 *
   4 *  SCSI error/timeout handling
   5 *      Initial versions: Eric Youngdale.  Based upon conversations with
   6 *                        Leonard Zubkoff and David Miller at Linux Expo, 
   7 *                        ideas originating from all over the place.
   8 *
   9 *      Restructured scsi_unjam_host and associated functions.
  10 *      September 04, 2002 Mike Anderson (andmike@us.ibm.com)
  11 *
  12 *      Forward port of Russell King's (rmk@arm.linux.org.uk) changes and
  13 *      minor  cleanups.
  14 *      September 30, 2002 Mike Anderson (andmike@us.ibm.com)
  15 */
  16
  17#include <linux/module.h>
  18#include <linux/sched.h>
  19#include <linux/timer.h>
  20#include <linux/string.h>
  21#include <linux/kernel.h>
  22#include <linux/freezer.h>
  23#include <linux/kthread.h>
  24#include <linux/interrupt.h>
  25#include <linux/blkdev.h>
  26#include <linux/delay.h>
  27
  28#include <scsi/scsi.h>
  29#include <scsi/scsi_cmnd.h>
  30#include <scsi/scsi_dbg.h>
  31#include <scsi/scsi_device.h>
  32#include <scsi/scsi_eh.h>
  33#include <scsi/scsi_transport.h>
  34#include <scsi/scsi_host.h>
  35#include <scsi/scsi_ioctl.h>
  36
  37#include "scsi_priv.h"
  38#include "scsi_logging.h"
  39#include "scsi_transport_api.h"
  40
  41#define SENSE_TIMEOUT           (10*HZ)
  42
  43/*
  44 * These should *probably* be handled by the host itself.
  45 * Since it is allowed to sleep, it probably should.
  46 */
  47#define BUS_RESET_SETTLE_TIME   (10)
  48#define HOST_RESET_SETTLE_TIME  (10)
  49
  50/* called with shost->host_lock held */
  51void scsi_eh_wakeup(struct Scsi_Host *shost)
  52{
  53        if (shost->host_busy == shost->host_failed) {
  54                wake_up_process(shost->ehandler);
  55                SCSI_LOG_ERROR_RECOVERY(5,
  56                                printk("Waking error handler thread\n"));
  57        }
  58}
  59
  60/**
  61 * scsi_schedule_eh - schedule EH for SCSI host
  62 * @shost:      SCSI host to invoke error handling on.
  63 *
  64 * Schedule SCSI EH without scmd.
  65 */
  66void scsi_schedule_eh(struct Scsi_Host *shost)
  67{
  68        unsigned long flags;
  69
  70        spin_lock_irqsave(shost->host_lock, flags);
  71
  72        if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 ||
  73            scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) {
  74                shost->host_eh_scheduled++;
  75                scsi_eh_wakeup(shost);
  76        }
  77
  78        spin_unlock_irqrestore(shost->host_lock, flags);
  79}
  80EXPORT_SYMBOL_GPL(scsi_schedule_eh);
  81
  82/**
  83 * scsi_eh_scmd_add - add scsi cmd to error handling.
  84 * @scmd:       scmd to run eh on.
  85 * @eh_flag:    optional SCSI_EH flag.
  86 *
  87 * Return value:
  88 *      0 on failure.
  89 */
  90int scsi_eh_scmd_add(struct scsi_cmnd *scmd, int eh_flag)
  91{
  92        struct Scsi_Host *shost = scmd->device->host;
  93        unsigned long flags;
  94        int ret = 0;
  95
  96        if (!shost->ehandler)
  97                return 0;
  98
  99        spin_lock_irqsave(shost->host_lock, flags);
 100        if (scsi_host_set_state(shost, SHOST_RECOVERY))
 101                if (scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY))
 102                        goto out_unlock;
 103
 104        ret = 1;
 105        scmd->eh_eflags |= eh_flag;
 106        list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
 107        shost->host_failed++;
 108        scsi_eh_wakeup(shost);
 109 out_unlock:
 110        spin_unlock_irqrestore(shost->host_lock, flags);
 111        return ret;
 112}
 113
 114/**
 115 * scsi_times_out - Timeout function for normal scsi commands.
 116 * @req:        request that is timing out.
 117 *
 118 * Notes:
 119 *     We do not need to lock this.  There is the potential for a race
 120 *     only in that the normal completion handling might run, but if the
 121 *     normal completion function determines that the timer has already
 122 *     fired, then it mustn't do anything.
 123 */
 124enum blk_eh_timer_return scsi_times_out(struct request *req)
 125{
 126        struct scsi_cmnd *scmd = req->special;
 127        enum blk_eh_timer_return rtn = BLK_EH_NOT_HANDLED;
 128
 129        scsi_log_completion(scmd, TIMEOUT_ERROR);
 130
 131        if (scmd->device->host->transportt->eh_timed_out)
 132                rtn = scmd->device->host->transportt->eh_timed_out(scmd);
 133        else if (scmd->device->host->hostt->eh_timed_out)
 134                rtn = scmd->device->host->hostt->eh_timed_out(scmd);
 135
 136        if (unlikely(rtn == BLK_EH_NOT_HANDLED &&
 137                     !scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))) {
 138                scmd->result |= DID_TIME_OUT << 16;
 139                rtn = BLK_EH_HANDLED;
 140        }
 141
 142        return rtn;
 143}
 144
 145/**
 146 * scsi_block_when_processing_errors - Prevent cmds from being queued.
 147 * @sdev:       Device on which we are performing recovery.
 148 *
 149 * Description:
 150 *     We block until the host is out of error recovery, and then check to
 151 *     see whether the host or the device is offline.
 152 *
 153 * Return value:
 154 *     0 when dev was taken offline by error recovery. 1 OK to proceed.
 155 */
 156int scsi_block_when_processing_errors(struct scsi_device *sdev)
 157{
 158        int online;
 159
 160        wait_event(sdev->host->host_wait, !scsi_host_in_recovery(sdev->host));
 161
 162        online = scsi_device_online(sdev);
 163
 164        SCSI_LOG_ERROR_RECOVERY(5, printk("%s: rtn: %d\n", __func__,
 165                                          online));
 166
 167        return online;
 168}
 169EXPORT_SYMBOL(scsi_block_when_processing_errors);
 170
 171#ifdef CONFIG_SCSI_LOGGING
 172/**
 173 * scsi_eh_prt_fail_stats - Log info on failures.
 174 * @shost:      scsi host being recovered.
 175 * @work_q:     Queue of scsi cmds to process.
 176 */
 177static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost,
 178                                          struct list_head *work_q)
 179{
 180        struct scsi_cmnd *scmd;
 181        struct scsi_device *sdev;
 182        int total_failures = 0;
 183        int cmd_failed = 0;
 184        int cmd_cancel = 0;
 185        int devices_failed = 0;
 186
 187        shost_for_each_device(sdev, shost) {
 188                list_for_each_entry(scmd, work_q, eh_entry) {
 189                        if (scmd->device == sdev) {
 190                                ++total_failures;
 191                                if (scmd->eh_eflags & SCSI_EH_CANCEL_CMD)
 192                                        ++cmd_cancel;
 193                                else 
 194                                        ++cmd_failed;
 195                        }
 196                }
 197
 198                if (cmd_cancel || cmd_failed) {
 199                        SCSI_LOG_ERROR_RECOVERY(3,
 200                                sdev_printk(KERN_INFO, sdev,
 201                                            "%s: cmds failed: %d, cancel: %d\n",
 202                                            __func__, cmd_failed,
 203                                            cmd_cancel));
 204                        cmd_cancel = 0;
 205                        cmd_failed = 0;
 206                        ++devices_failed;
 207                }
 208        }
 209
 210        SCSI_LOG_ERROR_RECOVERY(2, printk("Total of %d commands on %d"
 211                                          " devices require eh work\n",
 212                                  total_failures, devices_failed));
 213}
 214#endif
 215
 216/**
 217 * scsi_check_sense - Examine scsi cmd sense
 218 * @scmd:       Cmd to have sense checked.
 219 *
 220 * Return value:
 221 *      SUCCESS or FAILED or NEEDS_RETRY
 222 *
 223 * Notes:
 224 *      When a deferred error is detected the current command has
 225 *      not been executed and needs retrying.
 226 */
 227static int scsi_check_sense(struct scsi_cmnd *scmd)
 228{
 229        struct scsi_device *sdev = scmd->device;
 230        struct scsi_sense_hdr sshdr;
 231
 232        if (! scsi_command_normalize_sense(scmd, &sshdr))
 233                return FAILED;  /* no valid sense data */
 234
 235        if (scsi_sense_is_deferred(&sshdr))
 236                return NEEDS_RETRY;
 237
 238        if (sdev->scsi_dh_data && sdev->scsi_dh_data->scsi_dh &&
 239                        sdev->scsi_dh_data->scsi_dh->check_sense) {
 240                int rc;
 241
 242                rc = sdev->scsi_dh_data->scsi_dh->check_sense(sdev, &sshdr);
 243                if (rc != SCSI_RETURN_NOT_HANDLED)
 244                        return rc;
 245                /* handler does not care. Drop down to default handling */
 246        }
 247
 248        /*
 249         * Previous logic looked for FILEMARK, EOM or ILI which are
 250         * mainly associated with tapes and returned SUCCESS.
 251         */
 252        if (sshdr.response_code == 0x70) {
 253                /* fixed format */
 254                if (scmd->sense_buffer[2] & 0xe0)
 255                        return SUCCESS;
 256        } else {
 257                /*
 258                 * descriptor format: look for "stream commands sense data
 259                 * descriptor" (see SSC-3). Assume single sense data
 260                 * descriptor. Ignore ILI from SBC-2 READ LONG and WRITE LONG.
 261                 */
 262                if ((sshdr.additional_length > 3) &&
 263                    (scmd->sense_buffer[8] == 0x4) &&
 264                    (scmd->sense_buffer[11] & 0xe0))
 265                        return SUCCESS;
 266        }
 267
 268        switch (sshdr.sense_key) {
 269        case NO_SENSE:
 270                return SUCCESS;
 271        case RECOVERED_ERROR:
 272                return /* soft_error */ SUCCESS;
 273
 274        case ABORTED_COMMAND:
 275                if (sshdr.asc == 0x10) /* DIF */
 276                        return SUCCESS;
 277
 278                return NEEDS_RETRY;
 279        case NOT_READY:
 280        case UNIT_ATTENTION:
 281                /*
 282                 * if we are expecting a cc/ua because of a bus reset that we
 283                 * performed, treat this just as a retry.  otherwise this is
 284                 * information that we should pass up to the upper-level driver
 285                 * so that we can deal with it there.
 286                 */
 287                if (scmd->device->expecting_cc_ua) {
 288                        scmd->device->expecting_cc_ua = 0;
 289                        return NEEDS_RETRY;
 290                }
 291                /*
 292                 * if the device is in the process of becoming ready, we 
 293                 * should retry.
 294                 */
 295                if ((sshdr.asc == 0x04) && (sshdr.ascq == 0x01))
 296                        return NEEDS_RETRY;
 297                /*
 298                 * if the device is not started, we need to wake
 299                 * the error handler to start the motor
 300                 */
 301                if (scmd->device->allow_restart &&
 302                    (sshdr.asc == 0x04) && (sshdr.ascq == 0x02))
 303                        return FAILED;
 304                return SUCCESS;
 305
 306                /* these three are not supported */
 307        case COPY_ABORTED:
 308        case VOLUME_OVERFLOW:
 309        case MISCOMPARE:
 310                return SUCCESS;
 311
 312        case MEDIUM_ERROR:
 313                if (sshdr.asc == 0x11 || /* UNRECOVERED READ ERR */
 314                    sshdr.asc == 0x13 || /* AMNF DATA FIELD */
 315                    sshdr.asc == 0x14) { /* RECORD NOT FOUND */
 316                        return SUCCESS;
 317                }
 318                return NEEDS_RETRY;
 319
 320        case HARDWARE_ERROR:
 321                if (scmd->device->retry_hwerror)
 322                        return ADD_TO_MLQUEUE;
 323                else
 324                        return SUCCESS;
 325
 326        case ILLEGAL_REQUEST:
 327        case BLANK_CHECK:
 328        case DATA_PROTECT:
 329        default:
 330                return SUCCESS;
 331        }
 332}
 333
 334static void scsi_handle_queue_ramp_up(struct scsi_device *sdev)
 335{
 336        struct scsi_host_template *sht = sdev->host->hostt;
 337        struct scsi_device *tmp_sdev;
 338
 339        if (!sht->change_queue_depth ||
 340            sdev->queue_depth >= sdev->max_queue_depth)
 341                return;
 342
 343        if (time_before(jiffies,
 344            sdev->last_queue_ramp_up + sdev->queue_ramp_up_period))
 345                return;
 346
 347        if (time_before(jiffies,
 348            sdev->last_queue_full_time + sdev->queue_ramp_up_period))
 349                return;
 350
 351        /*
 352         * Walk all devices of a target and do
 353         * ramp up on them.
 354         */
 355        shost_for_each_device(tmp_sdev, sdev->host) {
 356                if (tmp_sdev->channel != sdev->channel ||
 357                    tmp_sdev->id != sdev->id ||
 358                    tmp_sdev->queue_depth == sdev->max_queue_depth)
 359                        continue;
 360                /*
 361                 * call back into LLD to increase queue_depth by one
 362                 * with ramp up reason code.
 363                 */
 364                sht->change_queue_depth(tmp_sdev, tmp_sdev->queue_depth + 1,
 365                                        SCSI_QDEPTH_RAMP_UP);
 366                sdev->last_queue_ramp_up = jiffies;
 367        }
 368}
 369
 370static void scsi_handle_queue_full(struct scsi_device *sdev)
 371{
 372        struct scsi_host_template *sht = sdev->host->hostt;
 373        struct scsi_device *tmp_sdev;
 374
 375        if (!sht->change_queue_depth)
 376                return;
 377
 378        shost_for_each_device(tmp_sdev, sdev->host) {
 379                if (tmp_sdev->channel != sdev->channel ||
 380                    tmp_sdev->id != sdev->id)
 381                        continue;
 382                /*
 383                 * We do not know the number of commands that were at
 384                 * the device when we got the queue full so we start
 385                 * from the highest possible value and work our way down.
 386                 */
 387                sht->change_queue_depth(tmp_sdev, tmp_sdev->queue_depth - 1,
 388                                        SCSI_QDEPTH_QFULL);
 389        }
 390}
 391
 392/**
 393 * scsi_eh_completed_normally - Disposition a eh cmd on return from LLD.
 394 * @scmd:       SCSI cmd to examine.
 395 *
 396 * Notes:
 397 *    This is *only* called when we are examining the status of commands
 398 *    queued during error recovery.  the main difference here is that we
 399 *    don't allow for the possibility of retries here, and we are a lot
 400 *    more restrictive about what we consider acceptable.
 401 */
 402static int scsi_eh_completed_normally(struct scsi_cmnd *scmd)
 403{
 404        /*
 405         * first check the host byte, to see if there is anything in there
 406         * that would indicate what we need to do.
 407         */
 408        if (host_byte(scmd->result) == DID_RESET) {
 409                /*
 410                 * rats.  we are already in the error handler, so we now
 411                 * get to try and figure out what to do next.  if the sense
 412                 * is valid, we have a pretty good idea of what to do.
 413                 * if not, we mark it as FAILED.
 414                 */
 415                return scsi_check_sense(scmd);
 416        }
 417        if (host_byte(scmd->result) != DID_OK)
 418                return FAILED;
 419
 420        /*
 421         * next, check the message byte.
 422         */
 423        if (msg_byte(scmd->result) != COMMAND_COMPLETE)
 424                return FAILED;
 425
 426        /*
 427         * now, check the status byte to see if this indicates
 428         * anything special.
 429         */
 430        switch (status_byte(scmd->result)) {
 431        case GOOD:
 432                scsi_handle_queue_ramp_up(scmd->device);
 433        case COMMAND_TERMINATED:
 434                return SUCCESS;
 435        case CHECK_CONDITION:
 436                return scsi_check_sense(scmd);
 437        case CONDITION_GOOD:
 438        case INTERMEDIATE_GOOD:
 439        case INTERMEDIATE_C_GOOD:
 440                /*
 441                 * who knows?  FIXME(eric)
 442                 */
 443                return SUCCESS;
 444        case RESERVATION_CONFLICT:
 445                /*
 446                 * let issuer deal with this, it could be just fine
 447                 */
 448                return SUCCESS;
 449        case QUEUE_FULL:
 450                scsi_handle_queue_full(scmd->device);
 451                /* fall through */
 452        case BUSY:
 453        default:
 454                return FAILED;
 455        }
 456        return FAILED;
 457}
 458
 459/**
 460 * scsi_eh_done - Completion function for error handling.
 461 * @scmd:       Cmd that is done.
 462 */
 463static void scsi_eh_done(struct scsi_cmnd *scmd)
 464{
 465        struct completion     *eh_action;
 466
 467        SCSI_LOG_ERROR_RECOVERY(3,
 468                printk("%s scmd: %p result: %x\n",
 469                        __func__, scmd, scmd->result));
 470
 471        eh_action = scmd->device->host->eh_action;
 472        if (eh_action)
 473                complete(eh_action);
 474}
 475
 476/**
 477 * scsi_try_host_reset - ask host adapter to reset itself
 478 * @scmd:       SCSI cmd to send hsot reset.
 479 */
 480static int scsi_try_host_reset(struct scsi_cmnd *scmd)
 481{
 482        unsigned long flags;
 483        int rtn;
 484
 485        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Snd Host RST\n",
 486                                          __func__));
 487
 488        if (!scmd->device->host->hostt->eh_host_reset_handler)
 489                return FAILED;
 490
 491        rtn = scmd->device->host->hostt->eh_host_reset_handler(scmd);
 492
 493        if (rtn == SUCCESS) {
 494                if (!scmd->device->host->hostt->skip_settle_delay)
 495                        ssleep(HOST_RESET_SETTLE_TIME);
 496                spin_lock_irqsave(scmd->device->host->host_lock, flags);
 497                scsi_report_bus_reset(scmd->device->host,
 498                                      scmd_channel(scmd));
 499                spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
 500        }
 501
 502        return rtn;
 503}
 504
 505/**
 506 * scsi_try_bus_reset - ask host to perform a bus reset
 507 * @scmd:       SCSI cmd to send bus reset.
 508 */
 509static int scsi_try_bus_reset(struct scsi_cmnd *scmd)
 510{
 511        unsigned long flags;
 512        int rtn;
 513
 514        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Snd Bus RST\n",
 515                                          __func__));
 516
 517        if (!scmd->device->host->hostt->eh_bus_reset_handler)
 518                return FAILED;
 519
 520        rtn = scmd->device->host->hostt->eh_bus_reset_handler(scmd);
 521
 522        if (rtn == SUCCESS) {
 523                if (!scmd->device->host->hostt->skip_settle_delay)
 524                        ssleep(BUS_RESET_SETTLE_TIME);
 525                spin_lock_irqsave(scmd->device->host->host_lock, flags);
 526                scsi_report_bus_reset(scmd->device->host,
 527                                      scmd_channel(scmd));
 528                spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
 529        }
 530
 531        return rtn;
 532}
 533
 534static void __scsi_report_device_reset(struct scsi_device *sdev, void *data)
 535{
 536        sdev->was_reset = 1;
 537        sdev->expecting_cc_ua = 1;
 538}
 539
 540/**
 541 * scsi_try_target_reset - Ask host to perform a target reset
 542 * @scmd:       SCSI cmd used to send a target reset
 543 *
 544 * Notes:
 545 *    There is no timeout for this operation.  if this operation is
 546 *    unreliable for a given host, then the host itself needs to put a
 547 *    timer on it, and set the host back to a consistent state prior to
 548 *    returning.
 549 */
 550static int scsi_try_target_reset(struct scsi_cmnd *scmd)
 551{
 552        unsigned long flags;
 553        int rtn;
 554
 555        if (!scmd->device->host->hostt->eh_target_reset_handler)
 556                return FAILED;
 557
 558        rtn = scmd->device->host->hostt->eh_target_reset_handler(scmd);
 559        if (rtn == SUCCESS) {
 560                spin_lock_irqsave(scmd->device->host->host_lock, flags);
 561                __starget_for_each_device(scsi_target(scmd->device), NULL,
 562                                          __scsi_report_device_reset);
 563                spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
 564        }
 565
 566        return rtn;
 567}
 568
 569/**
 570 * scsi_try_bus_device_reset - Ask host to perform a BDR on a dev
 571 * @scmd:       SCSI cmd used to send BDR
 572 *
 573 * Notes:
 574 *    There is no timeout for this operation.  if this operation is
 575 *    unreliable for a given host, then the host itself needs to put a
 576 *    timer on it, and set the host back to a consistent state prior to
 577 *    returning.
 578 */
 579static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
 580{
 581        int rtn;
 582
 583        if (!scmd->device->host->hostt->eh_device_reset_handler)
 584                return FAILED;
 585
 586        rtn = scmd->device->host->hostt->eh_device_reset_handler(scmd);
 587        if (rtn == SUCCESS)
 588                __scsi_report_device_reset(scmd->device, NULL);
 589        return rtn;
 590}
 591
 592static int __scsi_try_to_abort_cmd(struct scsi_cmnd *scmd)
 593{
 594        if (!scmd->device->host->hostt->eh_abort_handler)
 595                return FAILED;
 596
 597        return scmd->device->host->hostt->eh_abort_handler(scmd);
 598}
 599
 600/**
 601 * scsi_try_to_abort_cmd - Ask host to abort a running command.
 602 * @scmd:       SCSI cmd to abort from Lower Level.
 603 *
 604 * Notes:
 605 *    This function will not return until the user's completion function
 606 *    has been called.  there is no timeout on this operation.  if the
 607 *    author of the low-level driver wishes this operation to be timed,
 608 *    they can provide this facility themselves.  helper functions in
 609 *    scsi_error.c can be supplied to make this easier to do.
 610 */
 611static int scsi_try_to_abort_cmd(struct scsi_cmnd *scmd)
 612{
 613        /*
 614         * scsi_done was called just after the command timed out and before
 615         * we had a chance to process it. (db)
 616         */
 617        if (scmd->serial_number == 0)
 618                return SUCCESS;
 619        return __scsi_try_to_abort_cmd(scmd);
 620}
 621
 622static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd)
 623{
 624        if (__scsi_try_to_abort_cmd(scmd) != SUCCESS)
 625                if (scsi_try_bus_device_reset(scmd) != SUCCESS)
 626                        if (scsi_try_target_reset(scmd) != SUCCESS)
 627                                if (scsi_try_bus_reset(scmd) != SUCCESS)
 628                                        scsi_try_host_reset(scmd);
 629}
 630
 631/**
 632 * scsi_eh_prep_cmnd  - Save a scsi command info as part of error recory
 633 * @scmd:       SCSI command structure to hijack
 634 * @ses:        structure to save restore information
 635 * @cmnd:       CDB to send. Can be NULL if no new cmnd is needed
 636 * @cmnd_size:  size in bytes of @cmnd (must be <= BLK_MAX_CDB)
 637 * @sense_bytes: size of sense data to copy. or 0 (if != 0 @cmnd is ignored)
 638 *
 639 * This function is used to save a scsi command information before re-execution
 640 * as part of the error recovery process.  If @sense_bytes is 0 the command
 641 * sent must be one that does not transfer any data.  If @sense_bytes != 0
 642 * @cmnd is ignored and this functions sets up a REQUEST_SENSE command
 643 * and cmnd buffers to read @sense_bytes into @scmd->sense_buffer.
 644 */
 645void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses,
 646                        unsigned char *cmnd, int cmnd_size, unsigned sense_bytes)
 647{
 648        struct scsi_device *sdev = scmd->device;
 649
 650        /*
 651         * We need saved copies of a number of fields - this is because
 652         * error handling may need to overwrite these with different values
 653         * to run different commands, and once error handling is complete,
 654         * we will need to restore these values prior to running the actual
 655         * command.
 656         */
 657        ses->cmd_len = scmd->cmd_len;
 658        ses->cmnd = scmd->cmnd;
 659        ses->data_direction = scmd->sc_data_direction;
 660        ses->sdb = scmd->sdb;
 661        ses->next_rq = scmd->request->next_rq;
 662        ses->result = scmd->result;
 663        ses->underflow = scmd->underflow;
 664        ses->prot_op = scmd->prot_op;
 665
 666        scmd->prot_op = SCSI_PROT_NORMAL;
 667        scmd->cmnd = ses->eh_cmnd;
 668        memset(scmd->cmnd, 0, BLK_MAX_CDB);
 669        memset(&scmd->sdb, 0, sizeof(scmd->sdb));
 670        scmd->request->next_rq = NULL;
 671
 672        if (sense_bytes) {
 673                scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE,
 674                                         sense_bytes);
 675                sg_init_one(&ses->sense_sgl, scmd->sense_buffer,
 676                            scmd->sdb.length);
 677                scmd->sdb.table.sgl = &ses->sense_sgl;
 678                scmd->sc_data_direction = DMA_FROM_DEVICE;
 679                scmd->sdb.table.nents = 1;
 680                scmd->cmnd[0] = REQUEST_SENSE;
 681                scmd->cmnd[4] = scmd->sdb.length;
 682                scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
 683        } else {
 684                scmd->sc_data_direction = DMA_NONE;
 685                if (cmnd) {
 686                        BUG_ON(cmnd_size > BLK_MAX_CDB);
 687                        memcpy(scmd->cmnd, cmnd, cmnd_size);
 688                        scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
 689                }
 690        }
 691
 692        scmd->underflow = 0;
 693
 694        if (sdev->scsi_level <= SCSI_2 && sdev->scsi_level != SCSI_UNKNOWN)
 695                scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) |
 696                        (sdev->lun << 5 & 0xe0);
 697
 698        /*
 699         * Zero the sense buffer.  The scsi spec mandates that any
 700         * untransferred sense data should be interpreted as being zero.
 701         */
 702        memset(scmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
 703}
 704EXPORT_SYMBOL(scsi_eh_prep_cmnd);
 705
 706/**
 707 * scsi_eh_restore_cmnd  - Restore a scsi command info as part of error recory
 708 * @scmd:       SCSI command structure to restore
 709 * @ses:        saved information from a coresponding call to scsi_eh_prep_cmnd
 710 *
 711 * Undo any damage done by above scsi_eh_prep_cmnd().
 712 */
 713void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses)
 714{
 715        /*
 716         * Restore original data
 717         */
 718        scmd->cmd_len = ses->cmd_len;
 719        scmd->cmnd = ses->cmnd;
 720        scmd->sc_data_direction = ses->data_direction;
 721        scmd->sdb = ses->sdb;
 722        scmd->request->next_rq = ses->next_rq;
 723        scmd->result = ses->result;
 724        scmd->underflow = ses->underflow;
 725        scmd->prot_op = ses->prot_op;
 726}
 727EXPORT_SYMBOL(scsi_eh_restore_cmnd);
 728
 729/**
 730 * scsi_send_eh_cmnd  - submit a scsi command as part of error recory
 731 * @scmd:       SCSI command structure to hijack
 732 * @cmnd:       CDB to send
 733 * @cmnd_size:  size in bytes of @cmnd
 734 * @timeout:    timeout for this request
 735 * @sense_bytes: size of sense data to copy or 0
 736 *
 737 * This function is used to send a scsi command down to a target device
 738 * as part of the error recovery process. See also scsi_eh_prep_cmnd() above.
 739 *
 740 * Return value:
 741 *    SUCCESS or FAILED or NEEDS_RETRY
 742 */
 743static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
 744                             int cmnd_size, int timeout, unsigned sense_bytes)
 745{
 746        struct scsi_device *sdev = scmd->device;
 747        struct Scsi_Host *shost = sdev->host;
 748        DECLARE_COMPLETION_ONSTACK(done);
 749        unsigned long timeleft;
 750        unsigned long flags;
 751        struct scsi_eh_save ses;
 752        int rtn;
 753
 754        scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes);
 755        shost->eh_action = &done;
 756
 757        spin_lock_irqsave(shost->host_lock, flags);
 758        scsi_log_send(scmd);
 759        shost->hostt->queuecommand(scmd, scsi_eh_done);
 760        spin_unlock_irqrestore(shost->host_lock, flags);
 761
 762        timeleft = wait_for_completion_timeout(&done, timeout);
 763
 764        shost->eh_action = NULL;
 765
 766        scsi_log_completion(scmd, SUCCESS);
 767
 768        SCSI_LOG_ERROR_RECOVERY(3,
 769                printk("%s: scmd: %p, timeleft: %ld\n",
 770                        __func__, scmd, timeleft));
 771
 772        /*
 773         * If there is time left scsi_eh_done got called, and we will
 774         * examine the actual status codes to see whether the command
 775         * actually did complete normally, else tell the host to forget
 776         * about this command.
 777         */
 778        if (timeleft) {
 779                rtn = scsi_eh_completed_normally(scmd);
 780                SCSI_LOG_ERROR_RECOVERY(3,
 781                        printk("%s: scsi_eh_completed_normally %x\n",
 782                               __func__, rtn));
 783
 784                switch (rtn) {
 785                case SUCCESS:
 786                case NEEDS_RETRY:
 787                case FAILED:
 788                        break;
 789                case ADD_TO_MLQUEUE:
 790                        rtn = NEEDS_RETRY;
 791                        break;
 792                default:
 793                        rtn = FAILED;
 794                        break;
 795                }
 796        } else {
 797                scsi_abort_eh_cmnd(scmd);
 798                rtn = FAILED;
 799        }
 800
 801        scsi_eh_restore_cmnd(scmd, &ses);
 802        return rtn;
 803}
 804
 805/**
 806 * scsi_request_sense - Request sense data from a particular target.
 807 * @scmd:       SCSI cmd for request sense.
 808 *
 809 * Notes:
 810 *    Some hosts automatically obtain this information, others require
 811 *    that we obtain it on our own. This function will *not* return until
 812 *    the command either times out, or it completes.
 813 */
 814static int scsi_request_sense(struct scsi_cmnd *scmd)
 815{
 816        return scsi_send_eh_cmnd(scmd, NULL, 0, SENSE_TIMEOUT, ~0);
 817}
 818
 819/**
 820 * scsi_eh_finish_cmd - Handle a cmd that eh is finished with.
 821 * @scmd:       Original SCSI cmd that eh has finished.
 822 * @done_q:     Queue for processed commands.
 823 *
 824 * Notes:
 825 *    We don't want to use the normal command completion while we are are
 826 *    still handling errors - it may cause other commands to be queued,
 827 *    and that would disturb what we are doing.  Thus we really want to
 828 *    keep a list of pending commands for final completion, and once we
 829 *    are ready to leave error handling we handle completion for real.
 830 */
 831void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q)
 832{
 833        scmd->device->host->host_failed--;
 834        scmd->eh_eflags = 0;
 835        list_move_tail(&scmd->eh_entry, done_q);
 836}
 837EXPORT_SYMBOL(scsi_eh_finish_cmd);
 838
 839/**
 840 * scsi_eh_get_sense - Get device sense data.
 841 * @work_q:     Queue of commands to process.
 842 * @done_q:     Queue of processed commands.
 843 *
 844 * Description:
 845 *    See if we need to request sense information.  if so, then get it
 846 *    now, so we have a better idea of what to do.  
 847 *
 848 * Notes:
 849 *    This has the unfortunate side effect that if a shost adapter does
 850 *    not automatically request sense information, we end up shutting
 851 *    it down before we request it.
 852 *
 853 *    All drivers should request sense information internally these days,
 854 *    so for now all I have to say is tough noogies if you end up in here.
 855 *
 856 *    XXX: Long term this code should go away, but that needs an audit of
 857 *         all LLDDs first.
 858 */
 859int scsi_eh_get_sense(struct list_head *work_q,
 860                      struct list_head *done_q)
 861{
 862        struct scsi_cmnd *scmd, *next;
 863        int rtn;
 864
 865        list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
 866                if ((scmd->eh_eflags & SCSI_EH_CANCEL_CMD) ||
 867                    SCSI_SENSE_VALID(scmd))
 868                        continue;
 869
 870                SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd,
 871                                                  "%s: requesting sense\n",
 872                                                  current->comm));
 873                rtn = scsi_request_sense(scmd);
 874                if (rtn != SUCCESS)
 875                        continue;
 876
 877                SCSI_LOG_ERROR_RECOVERY(3, printk("sense requested for %p"
 878                                                  " result %x\n", scmd,
 879                                                  scmd->result));
 880                SCSI_LOG_ERROR_RECOVERY(3, scsi_print_sense("bh", scmd));
 881
 882                rtn = scsi_decide_disposition(scmd);
 883
 884                /*
 885                 * if the result was normal, then just pass it along to the
 886                 * upper level.
 887                 */
 888                if (rtn == SUCCESS)
 889                        /* we don't want this command reissued, just
 890                         * finished with the sense data, so set
 891                         * retries to the max allowed to ensure it
 892                         * won't get reissued */
 893                        scmd->retries = scmd->allowed;
 894                else if (rtn != NEEDS_RETRY)
 895                        continue;
 896
 897                scsi_eh_finish_cmd(scmd, done_q);
 898        }
 899
 900        return list_empty(work_q);
 901}
 902EXPORT_SYMBOL_GPL(scsi_eh_get_sense);
 903
 904/**
 905 * scsi_eh_tur - Send TUR to device.
 906 * @scmd:       &scsi_cmnd to send TUR
 907 *
 908 * Return value:
 909 *    0 - Device is ready. 1 - Device NOT ready.
 910 */
 911static int scsi_eh_tur(struct scsi_cmnd *scmd)
 912{
 913        static unsigned char tur_command[6] = {TEST_UNIT_READY, 0, 0, 0, 0, 0};
 914        int retry_cnt = 1, rtn;
 915
 916retry_tur:
 917        rtn = scsi_send_eh_cmnd(scmd, tur_command, 6, SENSE_TIMEOUT, 0);
 918
 919        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: scmd %p rtn %x\n",
 920                __func__, scmd, rtn));
 921
 922        switch (rtn) {
 923        case NEEDS_RETRY:
 924                if (retry_cnt--)
 925                        goto retry_tur;
 926                /*FALLTHRU*/
 927        case SUCCESS:
 928                return 0;
 929        default:
 930                return 1;
 931        }
 932}
 933
 934/**
 935 * scsi_eh_abort_cmds - abort pending commands.
 936 * @work_q:     &list_head for pending commands.
 937 * @done_q:     &list_head for processed commands.
 938 *
 939 * Decription:
 940 *    Try and see whether or not it makes sense to try and abort the
 941 *    running command.  This only works out to be the case if we have one
 942 *    command that has timed out.  If the command simply failed, it makes
 943 *    no sense to try and abort the command, since as far as the shost
 944 *    adapter is concerned, it isn't running.
 945 */
 946static int scsi_eh_abort_cmds(struct list_head *work_q,
 947                              struct list_head *done_q)
 948{
 949        struct scsi_cmnd *scmd, *next;
 950        int rtn;
 951
 952        list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
 953                if (!(scmd->eh_eflags & SCSI_EH_CANCEL_CMD))
 954                        continue;
 955                SCSI_LOG_ERROR_RECOVERY(3, printk("%s: aborting cmd:"
 956                                                  "0x%p\n", current->comm,
 957                                                  scmd));
 958                rtn = scsi_try_to_abort_cmd(scmd);
 959                if (rtn == SUCCESS) {
 960                        scmd->eh_eflags &= ~SCSI_EH_CANCEL_CMD;
 961                        if (!scsi_device_online(scmd->device) ||
 962                            !scsi_eh_tur(scmd)) {
 963                                scsi_eh_finish_cmd(scmd, done_q);
 964                        }
 965                                
 966                } else
 967                        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: aborting"
 968                                                          " cmd failed:"
 969                                                          "0x%p\n",
 970                                                          current->comm,
 971                                                          scmd));
 972        }
 973
 974        return list_empty(work_q);
 975}
 976
 977/**
 978 * scsi_eh_try_stu - Send START_UNIT to device.
 979 * @scmd:       &scsi_cmnd to send START_UNIT
 980 *
 981 * Return value:
 982 *    0 - Device is ready. 1 - Device NOT ready.
 983 */
 984static int scsi_eh_try_stu(struct scsi_cmnd *scmd)
 985{
 986        static unsigned char stu_command[6] = {START_STOP, 0, 0, 0, 1, 0};
 987
 988        if (scmd->device->allow_restart) {
 989                int i, rtn = NEEDS_RETRY;
 990
 991                for (i = 0; rtn == NEEDS_RETRY && i < 2; i++)
 992                        rtn = scsi_send_eh_cmnd(scmd, stu_command, 6, scmd->device->request_queue->rq_timeout, 0);
 993
 994                if (rtn == SUCCESS)
 995                        return 0;
 996        }
 997
 998        return 1;
 999}
1000
1001 /**
1002 * scsi_eh_stu - send START_UNIT if needed
1003 * @shost:      &scsi host being recovered.
1004 * @work_q:     &list_head for pending commands.
1005 * @done_q:     &list_head for processed commands.
1006 *
1007 * Notes:
1008 *    If commands are failing due to not ready, initializing command required,
1009 *      try revalidating the device, which will end up sending a start unit. 
1010 */
1011static int scsi_eh_stu(struct Scsi_Host *shost,
1012                              struct list_head *work_q,
1013                              struct list_head *done_q)
1014{
1015        struct scsi_cmnd *scmd, *stu_scmd, *next;
1016        struct scsi_device *sdev;
1017
1018        shost_for_each_device(sdev, shost) {
1019                stu_scmd = NULL;
1020                list_for_each_entry(scmd, work_q, eh_entry)
1021                        if (scmd->device == sdev && SCSI_SENSE_VALID(scmd) &&
1022                            scsi_check_sense(scmd) == FAILED ) {
1023                                stu_scmd = scmd;
1024                                break;
1025                        }
1026
1027                if (!stu_scmd)
1028                        continue;
1029
1030                SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending START_UNIT to sdev:"
1031                                                  " 0x%p\n", current->comm, sdev));
1032
1033                if (!scsi_eh_try_stu(stu_scmd)) {
1034                        if (!scsi_device_online(sdev) ||
1035                            !scsi_eh_tur(stu_scmd)) {
1036                                list_for_each_entry_safe(scmd, next,
1037                                                          work_q, eh_entry) {
1038                                        if (scmd->device == sdev)
1039                                                scsi_eh_finish_cmd(scmd, done_q);
1040                                }
1041                        }
1042                } else {
1043                        SCSI_LOG_ERROR_RECOVERY(3,
1044                                                printk("%s: START_UNIT failed to sdev:"
1045                                                       " 0x%p\n", current->comm, sdev));
1046                }
1047        }
1048
1049        return list_empty(work_q);
1050}
1051
1052
1053/**
1054 * scsi_eh_bus_device_reset - send bdr if needed
1055 * @shost:      scsi host being recovered.
1056 * @work_q:     &list_head for pending commands.
1057 * @done_q:     &list_head for processed commands.
1058 *
1059 * Notes:
1060 *    Try a bus device reset.  Still, look to see whether we have multiple
1061 *    devices that are jammed or not - if we have multiple devices, it
1062 *    makes no sense to try bus_device_reset - we really would need to try
1063 *    a bus_reset instead. 
1064 */
1065static int scsi_eh_bus_device_reset(struct Scsi_Host *shost,
1066                                    struct list_head *work_q,
1067                                    struct list_head *done_q)
1068{
1069        struct scsi_cmnd *scmd, *bdr_scmd, *next;
1070        struct scsi_device *sdev;
1071        int rtn;
1072
1073        shost_for_each_device(sdev, shost) {
1074                bdr_scmd = NULL;
1075                list_for_each_entry(scmd, work_q, eh_entry)
1076                        if (scmd->device == sdev) {
1077                                bdr_scmd = scmd;
1078                                break;
1079                        }
1080
1081                if (!bdr_scmd)
1082                        continue;
1083
1084                SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending BDR sdev:"
1085                                                  " 0x%p\n", current->comm,
1086                                                  sdev));
1087                rtn = scsi_try_bus_device_reset(bdr_scmd);
1088                if (rtn == SUCCESS) {
1089                        if (!scsi_device_online(sdev) ||
1090                            !scsi_eh_tur(bdr_scmd)) {
1091                                list_for_each_entry_safe(scmd, next,
1092                                                         work_q, eh_entry) {
1093                                        if (scmd->device == sdev)
1094                                                scsi_eh_finish_cmd(scmd,
1095                                                                   done_q);
1096                                }
1097                        }
1098                } else {
1099                        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: BDR"
1100                                                          " failed sdev:"
1101                                                          "0x%p\n",
1102                                                          current->comm,
1103                                                           sdev));
1104                }
1105        }
1106
1107        return list_empty(work_q);
1108}
1109
1110/**
1111 * scsi_eh_target_reset - send target reset if needed
1112 * @shost:      scsi host being recovered.
1113 * @work_q:     &list_head for pending commands.
1114 * @done_q:     &list_head for processed commands.
1115 *
1116 * Notes:
1117 *    Try a target reset.
1118 */
1119static int scsi_eh_target_reset(struct Scsi_Host *shost,
1120                                struct list_head *work_q,
1121                                struct list_head *done_q)
1122{
1123        struct scsi_cmnd *scmd, *tgtr_scmd, *next;
1124        unsigned int id = 0;
1125        int rtn;
1126
1127        do {
1128                tgtr_scmd = NULL;
1129                list_for_each_entry(scmd, work_q, eh_entry) {
1130                        if (id == scmd_id(scmd)) {
1131                                tgtr_scmd = scmd;
1132                                break;
1133                        }
1134                }
1135                if (!tgtr_scmd) {
1136                        /* not one exactly equal; find the next highest */
1137                        list_for_each_entry(scmd, work_q, eh_entry) {
1138                                if (scmd_id(scmd) > id &&
1139                                    (!tgtr_scmd ||
1140                                     scmd_id(tgtr_scmd) > scmd_id(scmd)))
1141                                                tgtr_scmd = scmd;
1142                        }
1143                }
1144                if (!tgtr_scmd)
1145                        /* no more commands, that's it */
1146                        break;
1147
1148                SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending target reset "
1149                                                  "to target %d\n",
1150                                                  current->comm, id));
1151                rtn = scsi_try_target_reset(tgtr_scmd);
1152                if (rtn == SUCCESS) {
1153                        list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1154                                if (id == scmd_id(scmd))
1155                                        if (!scsi_device_online(scmd->device) ||
1156                                            !scsi_eh_tur(tgtr_scmd))
1157                                                scsi_eh_finish_cmd(scmd,
1158                                                                   done_q);
1159                        }
1160                } else
1161                        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Target reset"
1162                                                          " failed target: "
1163                                                          "%d\n",
1164                                                          current->comm, id));
1165                id++;
1166        } while(id != 0);
1167
1168        return list_empty(work_q);
1169}
1170
1171/**
1172 * scsi_eh_bus_reset - send a bus reset 
1173 * @shost:      &scsi host being recovered.
1174 * @work_q:     &list_head for pending commands.
1175 * @done_q:     &list_head for processed commands.
1176 */
1177static int scsi_eh_bus_reset(struct Scsi_Host *shost,
1178                             struct list_head *work_q,
1179                             struct list_head *done_q)
1180{
1181        struct scsi_cmnd *scmd, *chan_scmd, *next;
1182        unsigned int channel;
1183        int rtn;
1184
1185        /*
1186         * we really want to loop over the various channels, and do this on
1187         * a channel by channel basis.  we should also check to see if any
1188         * of the failed commands are on soft_reset devices, and if so, skip
1189         * the reset.  
1190         */
1191
1192        for (channel = 0; channel <= shost->max_channel; channel++) {
1193                chan_scmd = NULL;
1194                list_for_each_entry(scmd, work_q, eh_entry) {
1195                        if (channel == scmd_channel(scmd)) {
1196                                chan_scmd = scmd;
1197                                break;
1198                                /*
1199                                 * FIXME add back in some support for
1200                                 * soft_reset devices.
1201                                 */
1202                        }
1203                }
1204
1205                if (!chan_scmd)
1206                        continue;
1207                SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending BRST chan:"
1208                                                  " %d\n", current->comm,
1209                                                  channel));
1210                rtn = scsi_try_bus_reset(chan_scmd);
1211                if (rtn == SUCCESS) {
1212                        list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1213                                if (channel == scmd_channel(scmd))
1214                                        if (!scsi_device_online(scmd->device) ||
1215                                            !scsi_eh_tur(scmd))
1216                                                scsi_eh_finish_cmd(scmd,
1217                                                                   done_q);
1218                        }
1219                } else {
1220                        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: BRST"
1221                                                          " failed chan: %d\n",
1222                                                          current->comm,
1223                                                          channel));
1224                }
1225        }
1226        return list_empty(work_q);
1227}
1228
1229/**
1230 * scsi_eh_host_reset - send a host reset 
1231 * @work_q:     list_head for processed commands.
1232 * @done_q:     list_head for processed commands.
1233 */
1234static int scsi_eh_host_reset(struct list_head *work_q,
1235                              struct list_head *done_q)
1236{
1237        struct scsi_cmnd *scmd, *next;
1238        int rtn;
1239
1240        if (!list_empty(work_q)) {
1241                scmd = list_entry(work_q->next,
1242                                  struct scsi_cmnd, eh_entry);
1243
1244                SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending HRST\n"
1245                                                  , current->comm));
1246
1247                rtn = scsi_try_host_reset(scmd);
1248                if (rtn == SUCCESS) {
1249                        list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1250                                if (!scsi_device_online(scmd->device) ||
1251                                    (!scsi_eh_try_stu(scmd) && !scsi_eh_tur(scmd)) ||
1252                                    !scsi_eh_tur(scmd))
1253                                        scsi_eh_finish_cmd(scmd, done_q);
1254                        }
1255                } else {
1256                        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: HRST"
1257                                                          " failed\n",
1258                                                          current->comm));
1259                }
1260        }
1261        return list_empty(work_q);
1262}
1263
1264/**
1265 * scsi_eh_offline_sdevs - offline scsi devices that fail to recover
1266 * @work_q:     list_head for processed commands.
1267 * @done_q:     list_head for processed commands.
1268 */
1269static void scsi_eh_offline_sdevs(struct list_head *work_q,
1270                                  struct list_head *done_q)
1271{
1272        struct scsi_cmnd *scmd, *next;
1273
1274        list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1275                sdev_printk(KERN_INFO, scmd->device, "Device offlined - "
1276                            "not ready after error recovery\n");
1277                scsi_device_set_state(scmd->device, SDEV_OFFLINE);
1278                if (scmd->eh_eflags & SCSI_EH_CANCEL_CMD) {
1279                        /*
1280                         * FIXME: Handle lost cmds.
1281                         */
1282                }
1283                scsi_eh_finish_cmd(scmd, done_q);
1284        }
1285        return;
1286}
1287
1288/**
1289 * scsi_noretry_cmd - determinte if command should be failed fast
1290 * @scmd:       SCSI cmd to examine.
1291 */
1292int scsi_noretry_cmd(struct scsi_cmnd *scmd)
1293{
1294        switch (host_byte(scmd->result)) {
1295        case DID_OK:
1296                break;
1297        case DID_BUS_BUSY:
1298                return blk_failfast_transport(scmd->request);
1299        case DID_PARITY:
1300                return blk_failfast_dev(scmd->request);
1301        case DID_ERROR:
1302                if (msg_byte(scmd->result) == COMMAND_COMPLETE &&
1303                    status_byte(scmd->result) == RESERVATION_CONFLICT)
1304                        return 0;
1305                /* fall through */
1306        case DID_SOFT_ERROR:
1307                return blk_failfast_driver(scmd->request);
1308        }
1309
1310        switch (status_byte(scmd->result)) {
1311        case CHECK_CONDITION:
1312                /*
1313                 * assume caller has checked sense and determinted
1314                 * the check condition was retryable.
1315                 */
1316                return blk_failfast_dev(scmd->request);
1317        }
1318
1319        return 0;
1320}
1321
1322/**
1323 * scsi_decide_disposition - Disposition a cmd on return from LLD.
1324 * @scmd:       SCSI cmd to examine.
1325 *
1326 * Notes:
1327 *    This is *only* called when we are examining the status after sending
1328 *    out the actual data command.  any commands that are queued for error
1329 *    recovery (e.g. test_unit_ready) do *not* come through here.
1330 *
1331 *    When this routine returns failed, it means the error handler thread
1332 *    is woken.  In cases where the error code indicates an error that
1333 *    doesn't require the error handler read (i.e. we don't need to
1334 *    abort/reset), this function should return SUCCESS.
1335 */
1336int scsi_decide_disposition(struct scsi_cmnd *scmd)
1337{
1338        int rtn;
1339
1340        /*
1341         * if the device is offline, then we clearly just pass the result back
1342         * up to the top level.
1343         */
1344        if (!scsi_device_online(scmd->device)) {
1345                SCSI_LOG_ERROR_RECOVERY(5, printk("%s: device offline - report"
1346                                                  " as SUCCESS\n",
1347                                                  __func__));
1348                return SUCCESS;
1349        }
1350
1351        /*
1352         * first check the host byte, to see if there is anything in there
1353         * that would indicate what we need to do.
1354         */
1355        switch (host_byte(scmd->result)) {
1356        case DID_PASSTHROUGH:
1357                /*
1358                 * no matter what, pass this through to the upper layer.
1359                 * nuke this special code so that it looks like we are saying
1360                 * did_ok.
1361                 */
1362                scmd->result &= 0xff00ffff;
1363                return SUCCESS;
1364        case DID_OK:
1365                /*
1366                 * looks good.  drop through, and check the next byte.
1367                 */
1368                break;
1369        case DID_NO_CONNECT:
1370        case DID_BAD_TARGET:
1371        case DID_ABORT:
1372                /*
1373                 * note - this means that we just report the status back
1374                 * to the top level driver, not that we actually think
1375                 * that it indicates SUCCESS.
1376                 */
1377                return SUCCESS;
1378                /*
1379                 * when the low level driver returns did_soft_error,
1380                 * it is responsible for keeping an internal retry counter 
1381                 * in order to avoid endless loops (db)
1382                 *
1383                 * actually this is a bug in this function here.  we should
1384                 * be mindful of the maximum number of retries specified
1385                 * and not get stuck in a loop.
1386                 */
1387        case DID_SOFT_ERROR:
1388                goto maybe_retry;
1389        case DID_IMM_RETRY:
1390                return NEEDS_RETRY;
1391
1392        case DID_REQUEUE:
1393                return ADD_TO_MLQUEUE;
1394        case DID_TRANSPORT_DISRUPTED:
1395                /*
1396                 * LLD/transport was disrupted during processing of the IO.
1397                 * The transport class is now blocked/blocking,
1398                 * and the transport will decide what to do with the IO
1399                 * based on its timers and recovery capablilities if
1400                 * there are enough retries.
1401                 */
1402                goto maybe_retry;
1403        case DID_TRANSPORT_FAILFAST:
1404                /*
1405                 * The transport decided to failfast the IO (most likely
1406                 * the fast io fail tmo fired), so send IO directly upwards.
1407                 */
1408                return SUCCESS;
1409        case DID_ERROR:
1410                if (msg_byte(scmd->result) == COMMAND_COMPLETE &&
1411                    status_byte(scmd->result) == RESERVATION_CONFLICT)
1412                        /*
1413                         * execute reservation conflict processing code
1414                         * lower down
1415                         */
1416                        break;
1417                /* fallthrough */
1418
1419        case DID_BUS_BUSY:
1420        case DID_PARITY:
1421                goto maybe_retry;
1422        case DID_TIME_OUT:
1423                /*
1424                 * when we scan the bus, we get timeout messages for
1425                 * these commands if there is no device available.
1426                 * other hosts report did_no_connect for the same thing.
1427                 */
1428                if ((scmd->cmnd[0] == TEST_UNIT_READY ||
1429                     scmd->cmnd[0] == INQUIRY)) {
1430                        return SUCCESS;
1431                } else {
1432                        return FAILED;
1433                }
1434        case DID_RESET:
1435                return SUCCESS;
1436        default:
1437                return FAILED;
1438        }
1439
1440        /*
1441         * next, check the message byte.
1442         */
1443        if (msg_byte(scmd->result) != COMMAND_COMPLETE)
1444                return FAILED;
1445
1446        /*
1447         * check the status byte to see if this indicates anything special.
1448         */
1449        switch (status_byte(scmd->result)) {
1450        case QUEUE_FULL:
1451                scsi_handle_queue_full(scmd->device);
1452                /*
1453                 * the case of trying to send too many commands to a
1454                 * tagged queueing device.
1455                 */
1456        case BUSY:
1457                /*
1458                 * device can't talk to us at the moment.  Should only
1459                 * occur (SAM-3) when the task queue is empty, so will cause
1460                 * the empty queue handling to trigger a stall in the
1461                 * device.
1462                 */
1463                return ADD_TO_MLQUEUE;
1464        case GOOD:
1465                scsi_handle_queue_ramp_up(scmd->device);
1466        case COMMAND_TERMINATED:
1467                return SUCCESS;
1468        case TASK_ABORTED:
1469                goto maybe_retry;
1470        case CHECK_CONDITION:
1471                rtn = scsi_check_sense(scmd);
1472                if (rtn == NEEDS_RETRY)
1473                        goto maybe_retry;
1474                /* if rtn == FAILED, we have no sense information;
1475                 * returning FAILED will wake the error handler thread
1476                 * to collect the sense and redo the decide
1477                 * disposition */
1478                return rtn;
1479        case CONDITION_GOOD:
1480        case INTERMEDIATE_GOOD:
1481        case INTERMEDIATE_C_GOOD:
1482        case ACA_ACTIVE:
1483                /*
1484                 * who knows?  FIXME(eric)
1485                 */
1486                return SUCCESS;
1487
1488        case RESERVATION_CONFLICT:
1489                sdev_printk(KERN_INFO, scmd->device,
1490                            "reservation conflict\n");
1491                return SUCCESS; /* causes immediate i/o error */
1492        default:
1493                return FAILED;
1494        }
1495        return FAILED;
1496
1497      maybe_retry:
1498
1499        /* we requeue for retry because the error was retryable, and
1500         * the request was not marked fast fail.  Note that above,
1501         * even if the request is marked fast fail, we still requeue
1502         * for queue congestion conditions (QUEUE_FULL or BUSY) */
1503        if ((++scmd->retries) <= scmd->allowed
1504            && !scsi_noretry_cmd(scmd)) {
1505                return NEEDS_RETRY;
1506        } else {
1507                /*
1508                 * no more retries - report this one back to upper level.
1509                 */
1510                return SUCCESS;
1511        }
1512}
1513
1514static void eh_lock_door_done(struct request *req, int uptodate)
1515{
1516        __blk_put_request(req->q, req);
1517}
1518
1519/**
1520 * scsi_eh_lock_door - Prevent medium removal for the specified device
1521 * @sdev:       SCSI device to prevent medium removal
1522 *
1523 * Locking:
1524 *      We must be called from process context.
1525 *
1526 * Notes:
1527 *      We queue up an asynchronous "ALLOW MEDIUM REMOVAL" request on the
1528 *      head of the devices request queue, and continue.
1529 */
1530static void scsi_eh_lock_door(struct scsi_device *sdev)
1531{
1532        struct request *req;
1533
1534        /*
1535         * blk_get_request with GFP_KERNEL (__GFP_WAIT) sleeps until a
1536         * request becomes available
1537         */
1538        req = blk_get_request(sdev->request_queue, READ, GFP_KERNEL);
1539
1540        req->cmd[0] = ALLOW_MEDIUM_REMOVAL;
1541        req->cmd[1] = 0;
1542        req->cmd[2] = 0;
1543        req->cmd[3] = 0;
1544        req->cmd[4] = SCSI_REMOVAL_PREVENT;
1545        req->cmd[5] = 0;
1546
1547        req->cmd_len = COMMAND_SIZE(req->cmd[0]);
1548
1549        req->cmd_type = REQ_TYPE_BLOCK_PC;
1550        req->cmd_flags |= REQ_QUIET;
1551        req->timeout = 10 * HZ;
1552        req->retries = 5;
1553
1554        blk_execute_rq_nowait(req->q, NULL, req, 1, eh_lock_door_done);
1555}
1556
1557/**
1558 * scsi_restart_operations - restart io operations to the specified host.
1559 * @shost:      Host we are restarting.
1560 *
1561 * Notes:
1562 *    When we entered the error handler, we blocked all further i/o to
1563 *    this device.  we need to 'reverse' this process.
1564 */
1565static void scsi_restart_operations(struct Scsi_Host *shost)
1566{
1567        struct scsi_device *sdev;
1568        unsigned long flags;
1569
1570        /*
1571         * If the door was locked, we need to insert a door lock request
1572         * onto the head of the SCSI request queue for the device.  There
1573         * is no point trying to lock the door of an off-line device.
1574         */
1575        shost_for_each_device(sdev, shost) {
1576                if (scsi_device_online(sdev) && sdev->locked)
1577                        scsi_eh_lock_door(sdev);
1578        }
1579
1580        /*
1581         * next free up anything directly waiting upon the host.  this
1582         * will be requests for character device operations, and also for
1583         * ioctls to queued block devices.
1584         */
1585        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: waking up host to restart\n",
1586                                          __func__));
1587
1588        spin_lock_irqsave(shost->host_lock, flags);
1589        if (scsi_host_set_state(shost, SHOST_RUNNING))
1590                if (scsi_host_set_state(shost, SHOST_CANCEL))
1591                        BUG_ON(scsi_host_set_state(shost, SHOST_DEL));
1592        spin_unlock_irqrestore(shost->host_lock, flags);
1593
1594        wake_up(&shost->host_wait);
1595
1596        /*
1597         * finally we need to re-initiate requests that may be pending.  we will
1598         * have had everything blocked while error handling is taking place, and
1599         * now that error recovery is done, we will need to ensure that these
1600         * requests are started.
1601         */
1602        scsi_run_host_queues(shost);
1603}
1604
1605/**
1606 * scsi_eh_ready_devs - check device ready state and recover if not.
1607 * @shost:      host to be recovered.
1608 * @work_q:     &list_head for pending commands.
1609 * @done_q:     &list_head for processed commands.
1610 */
1611void scsi_eh_ready_devs(struct Scsi_Host *shost,
1612                        struct list_head *work_q,
1613                        struct list_head *done_q)
1614{
1615        if (!scsi_eh_stu(shost, work_q, done_q))
1616                if (!scsi_eh_bus_device_reset(shost, work_q, done_q))
1617                        if (!scsi_eh_target_reset(shost, work_q, done_q))
1618                                if (!scsi_eh_bus_reset(shost, work_q, done_q))
1619                                        if (!scsi_eh_host_reset(work_q, done_q))
1620                                                scsi_eh_offline_sdevs(work_q,
1621                                                                      done_q);
1622}
1623EXPORT_SYMBOL_GPL(scsi_eh_ready_devs);
1624
1625/**
1626 * scsi_eh_flush_done_q - finish processed commands or retry them.
1627 * @done_q:     list_head of processed commands.
1628 */
1629void scsi_eh_flush_done_q(struct list_head *done_q)
1630{
1631        struct scsi_cmnd *scmd, *next;
1632
1633        list_for_each_entry_safe(scmd, next, done_q, eh_entry) {
1634                list_del_init(&scmd->eh_entry);
1635                if (scsi_device_online(scmd->device) &&
1636                    !scsi_noretry_cmd(scmd) &&
1637                    (++scmd->retries <= scmd->allowed)) {
1638                        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush"
1639                                                          " retry cmd: %p\n",
1640                                                          current->comm,
1641                                                          scmd));
1642                                scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
1643                } else {
1644                        /*
1645                         * If just we got sense for the device (called
1646                         * scsi_eh_get_sense), scmd->result is already
1647                         * set, do not set DRIVER_TIMEOUT.
1648                         */
1649                        if (!scmd->result)
1650                                scmd->result |= (DRIVER_TIMEOUT << 24);
1651                        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush finish"
1652                                                        " cmd: %p\n",
1653                                                        current->comm, scmd));
1654                        scsi_finish_command(scmd);
1655                }
1656        }
1657}
1658EXPORT_SYMBOL(scsi_eh_flush_done_q);
1659
1660/**
1661 * scsi_unjam_host - Attempt to fix a host which has a cmd that failed.
1662 * @shost:      Host to unjam.
1663 *
1664 * Notes:
1665 *    When we come in here, we *know* that all commands on the bus have
1666 *    either completed, failed or timed out.  we also know that no further
1667 *    commands are being sent to the host, so things are relatively quiet
1668 *    and we have freedom to fiddle with things as we wish.
1669 *
1670 *    This is only the *default* implementation.  it is possible for
1671 *    individual drivers to supply their own version of this function, and
1672 *    if the maintainer wishes to do this, it is strongly suggested that
1673 *    this function be taken as a template and modified.  this function
1674 *    was designed to correctly handle problems for about 95% of the
1675 *    different cases out there, and it should always provide at least a
1676 *    reasonable amount of error recovery.
1677 *
1678 *    Any command marked 'failed' or 'timeout' must eventually have
1679 *    scsi_finish_cmd() called for it.  we do all of the retry stuff
1680 *    here, so when we restart the host after we return it should have an
1681 *    empty queue.
1682 */
1683static void scsi_unjam_host(struct Scsi_Host *shost)
1684{
1685        unsigned long flags;
1686        LIST_HEAD(eh_work_q);
1687        LIST_HEAD(eh_done_q);
1688
1689        spin_lock_irqsave(shost->host_lock, flags);
1690        list_splice_init(&shost->eh_cmd_q, &eh_work_q);
1691        spin_unlock_irqrestore(shost->host_lock, flags);
1692
1693        SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q));
1694
1695        if (!scsi_eh_get_sense(&eh_work_q, &eh_done_q))
1696                if (!scsi_eh_abort_cmds(&eh_work_q, &eh_done_q))
1697                        scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q);
1698
1699        scsi_eh_flush_done_q(&eh_done_q);
1700}
1701
1702/**
1703 * scsi_error_handler - SCSI error handler thread
1704 * @data:       Host for which we are running.
1705 *
1706 * Notes:
1707 *    This is the main error handling loop.  This is run as a kernel thread
1708 *    for every SCSI host and handles all error handling activity.
1709 */
1710int scsi_error_handler(void *data)
1711{
1712        struct Scsi_Host *shost = data;
1713
1714        /*
1715         * We use TASK_INTERRUPTIBLE so that the thread is not
1716         * counted against the load average as a running process.
1717         * We never actually get interrupted because kthread_run
1718         * disables signal delivery for the created thread.
1719         */
1720        set_current_state(TASK_INTERRUPTIBLE);
1721        while (!kthread_should_stop()) {
1722                if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) ||
1723                    shost->host_failed != shost->host_busy) {
1724                        SCSI_LOG_ERROR_RECOVERY(1,
1725                                printk("Error handler scsi_eh_%d sleeping\n",
1726                                        shost->host_no));
1727                        schedule();
1728                        set_current_state(TASK_INTERRUPTIBLE);
1729                        continue;
1730                }
1731
1732                __set_current_state(TASK_RUNNING);
1733                SCSI_LOG_ERROR_RECOVERY(1,
1734                        printk("Error handler scsi_eh_%d waking up\n",
1735                                shost->host_no));
1736
1737                /*
1738                 * We have a host that is failing for some reason.  Figure out
1739                 * what we need to do to get it up and online again (if we can).
1740                 * If we fail, we end up taking the thing offline.
1741                 */
1742                if (shost->transportt->eh_strategy_handler)
1743                        shost->transportt->eh_strategy_handler(shost);
1744                else
1745                        scsi_unjam_host(shost);
1746
1747                /*
1748                 * Note - if the above fails completely, the action is to take
1749                 * individual devices offline and flush the queue of any
1750                 * outstanding requests that may have been pending.  When we
1751                 * restart, we restart any I/O to any other devices on the bus
1752                 * which are still online.
1753                 */
1754                scsi_restart_operations(shost);
1755                set_current_state(TASK_INTERRUPTIBLE);
1756        }
1757        __set_current_state(TASK_RUNNING);
1758
1759        SCSI_LOG_ERROR_RECOVERY(1,
1760                printk("Error handler scsi_eh_%d exiting\n", shost->host_no));
1761        shost->ehandler = NULL;
1762        return 0;
1763}
1764
1765/*
1766 * Function:    scsi_report_bus_reset()
1767 *
1768 * Purpose:     Utility function used by low-level drivers to report that
1769 *              they have observed a bus reset on the bus being handled.
1770 *
1771 * Arguments:   shost       - Host in question
1772 *              channel     - channel on which reset was observed.
1773 *
1774 * Returns:     Nothing
1775 *
1776 * Lock status: Host lock must be held.
1777 *
1778 * Notes:       This only needs to be called if the reset is one which
1779 *              originates from an unknown location.  Resets originated
1780 *              by the mid-level itself don't need to call this, but there
1781 *              should be no harm.
1782 *
1783 *              The main purpose of this is to make sure that a CHECK_CONDITION
1784 *              is properly treated.
1785 */
1786void scsi_report_bus_reset(struct Scsi_Host *shost, int channel)
1787{
1788        struct scsi_device *sdev;
1789
1790        __shost_for_each_device(sdev, shost) {
1791                if (channel == sdev_channel(sdev))
1792                        __scsi_report_device_reset(sdev, NULL);
1793        }
1794}
1795EXPORT_SYMBOL(scsi_report_bus_reset);
1796
1797/*
1798 * Function:    scsi_report_device_reset()
1799 *
1800 * Purpose:     Utility function used by low-level drivers to report that
1801 *              they have observed a device reset on the device being handled.
1802 *
1803 * Arguments:   shost       - Host in question
1804 *              channel     - channel on which reset was observed
1805 *              target      - target on which reset was observed
1806 *
1807 * Returns:     Nothing
1808 *
1809 * Lock status: Host lock must be held
1810 *
1811 * Notes:       This only needs to be called if the reset is one which
1812 *              originates from an unknown location.  Resets originated
1813 *              by the mid-level itself don't need to call this, but there
1814 *              should be no harm.
1815 *
1816 *              The main purpose of this is to make sure that a CHECK_CONDITION
1817 *              is properly treated.
1818 */
1819void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target)
1820{
1821        struct scsi_device *sdev;
1822
1823        __shost_for_each_device(sdev, shost) {
1824                if (channel == sdev_channel(sdev) &&
1825                    target == sdev_id(sdev))
1826                        __scsi_report_device_reset(sdev, NULL);
1827        }
1828}
1829EXPORT_SYMBOL(scsi_report_device_reset);
1830
1831static void
1832scsi_reset_provider_done_command(struct scsi_cmnd *scmd)
1833{
1834}
1835
1836/*
1837 * Function:    scsi_reset_provider
1838 *
1839 * Purpose:     Send requested reset to a bus or device at any phase.
1840 *
1841 * Arguments:   device  - device to send reset to
1842 *              flag - reset type (see scsi.h)
1843 *
1844 * Returns:     SUCCESS/FAILURE.
1845 *
1846 * Notes:       This is used by the SCSI Generic driver to provide
1847 *              Bus/Device reset capability.
1848 */
1849int
1850scsi_reset_provider(struct scsi_device *dev, int flag)
1851{
1852        struct scsi_cmnd *scmd = scsi_get_command(dev, GFP_KERNEL);
1853        struct Scsi_Host *shost = dev->host;
1854        struct request req;
1855        unsigned long flags;
1856        int rtn;
1857
1858        blk_rq_init(NULL, &req);
1859        scmd->request = &req;
1860
1861        scmd->cmnd = req.cmd;
1862
1863        scmd->scsi_done         = scsi_reset_provider_done_command;
1864        memset(&scmd->sdb, 0, sizeof(scmd->sdb));
1865
1866        scmd->cmd_len                   = 0;
1867
1868        scmd->sc_data_direction         = DMA_BIDIRECTIONAL;
1869
1870        spin_lock_irqsave(shost->host_lock, flags);
1871        shost->tmf_in_progress = 1;
1872        spin_unlock_irqrestore(shost->host_lock, flags);
1873
1874        switch (flag) {
1875        case SCSI_TRY_RESET_DEVICE:
1876                rtn = scsi_try_bus_device_reset(scmd);
1877                if (rtn == SUCCESS)
1878                        break;
1879                /* FALLTHROUGH */
1880        case SCSI_TRY_RESET_TARGET:
1881                rtn = scsi_try_target_reset(scmd);
1882                if (rtn == SUCCESS)
1883                        break;
1884                /* FALLTHROUGH */
1885        case SCSI_TRY_RESET_BUS:
1886                rtn = scsi_try_bus_reset(scmd);
1887                if (rtn == SUCCESS)
1888                        break;
1889                /* FALLTHROUGH */
1890        case SCSI_TRY_RESET_HOST:
1891                rtn = scsi_try_host_reset(scmd);
1892                break;
1893        default:
1894                rtn = FAILED;
1895        }
1896
1897        spin_lock_irqsave(shost->host_lock, flags);
1898        shost->tmf_in_progress = 0;
1899        spin_unlock_irqrestore(shost->host_lock, flags);
1900
1901        /*
1902         * be sure to wake up anyone who was sleeping or had their queue
1903         * suspended while we performed the TMF.
1904         */
1905        SCSI_LOG_ERROR_RECOVERY(3,
1906                printk("%s: waking up host to restart after TMF\n",
1907                __func__));
1908
1909        wake_up(&shost->host_wait);
1910
1911        scsi_run_host_queues(shost);
1912
1913        scsi_next_command(scmd);
1914        return rtn;
1915}
1916EXPORT_SYMBOL(scsi_reset_provider);
1917
1918/**
1919 * scsi_normalize_sense - normalize main elements from either fixed or
1920 *                      descriptor sense data format into a common format.
1921 *
1922 * @sense_buffer:       byte array containing sense data returned by device
1923 * @sb_len:             number of valid bytes in sense_buffer
1924 * @sshdr:              pointer to instance of structure that common
1925 *                      elements are written to.
1926 *
1927 * Notes:
1928 *      The "main elements" from sense data are: response_code, sense_key,
1929 *      asc, ascq and additional_length (only for descriptor format).
1930 *
1931 *      Typically this function can be called after a device has
1932 *      responded to a SCSI command with the CHECK_CONDITION status.
1933 *
1934 * Return value:
1935 *      1 if valid sense data information found, else 0;
1936 */
1937int scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
1938                         struct scsi_sense_hdr *sshdr)
1939{
1940        if (!sense_buffer || !sb_len)
1941                return 0;
1942
1943        memset(sshdr, 0, sizeof(struct scsi_sense_hdr));
1944
1945        sshdr->response_code = (sense_buffer[0] & 0x7f);
1946
1947        if (!scsi_sense_valid(sshdr))
1948                return 0;
1949
1950        if (sshdr->response_code >= 0x72) {
1951                /*
1952                 * descriptor format
1953                 */
1954                if (sb_len > 1)
1955                        sshdr->sense_key = (sense_buffer[1] & 0xf);
1956                if (sb_len > 2)
1957                        sshdr->asc = sense_buffer[2];
1958                if (sb_len > 3)
1959                        sshdr->ascq = sense_buffer[3];
1960                if (sb_len > 7)
1961                        sshdr->additional_length = sense_buffer[7];
1962        } else {
1963                /* 
1964                 * fixed format
1965                 */
1966                if (sb_len > 2)
1967                        sshdr->sense_key = (sense_buffer[2] & 0xf);
1968                if (sb_len > 7) {
1969                        sb_len = (sb_len < (sense_buffer[7] + 8)) ?
1970                                         sb_len : (sense_buffer[7] + 8);
1971                        if (sb_len > 12)
1972                                sshdr->asc = sense_buffer[12];
1973                        if (sb_len > 13)
1974                                sshdr->ascq = sense_buffer[13];
1975                }
1976        }
1977
1978        return 1;
1979}
1980EXPORT_SYMBOL(scsi_normalize_sense);
1981
1982int scsi_command_normalize_sense(struct scsi_cmnd *cmd,
1983                                 struct scsi_sense_hdr *sshdr)
1984{
1985        return scsi_normalize_sense(cmd->sense_buffer,
1986                        SCSI_SENSE_BUFFERSIZE, sshdr);
1987}
1988EXPORT_SYMBOL(scsi_command_normalize_sense);
1989
1990/**
1991 * scsi_sense_desc_find - search for a given descriptor type in descriptor sense data format.
1992 * @sense_buffer:       byte array of descriptor format sense data
1993 * @sb_len:             number of valid bytes in sense_buffer
1994 * @desc_type:          value of descriptor type to find
1995 *                      (e.g. 0 -> information)
1996 *
1997 * Notes:
1998 *      only valid when sense data is in descriptor format
1999 *
2000 * Return value:
2001 *      pointer to start of (first) descriptor if found else NULL
2002 */
2003const u8 * scsi_sense_desc_find(const u8 * sense_buffer, int sb_len,
2004                                int desc_type)
2005{
2006        int add_sen_len, add_len, desc_len, k;
2007        const u8 * descp;
2008
2009        if ((sb_len < 8) || (0 == (add_sen_len = sense_buffer[7])))
2010                return NULL;
2011        if ((sense_buffer[0] < 0x72) || (sense_buffer[0] > 0x73))
2012                return NULL;
2013        add_sen_len = (add_sen_len < (sb_len - 8)) ?
2014                        add_sen_len : (sb_len - 8);
2015        descp = &sense_buffer[8];
2016        for (desc_len = 0, k = 0; k < add_sen_len; k += desc_len) {
2017                descp += desc_len;
2018                add_len = (k < (add_sen_len - 1)) ? descp[1]: -1;
2019                desc_len = add_len + 2;
2020                if (descp[0] == desc_type)
2021                        return descp;
2022                if (add_len < 0) // short descriptor ??
2023                        break;
2024        }
2025        return NULL;
2026}
2027EXPORT_SYMBOL(scsi_sense_desc_find);
2028
2029/**
2030 * scsi_get_sense_info_fld - get information field from sense data (either fixed or descriptor format)
2031 * @sense_buffer:       byte array of sense data
2032 * @sb_len:             number of valid bytes in sense_buffer
2033 * @info_out:           pointer to 64 integer where 8 or 4 byte information
2034 *                      field will be placed if found.
2035 *
2036 * Return value:
2037 *      1 if information field found, 0 if not found.
2038 */
2039int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len,
2040                            u64 * info_out)
2041{
2042        int j;
2043        const u8 * ucp;
2044        u64 ull;
2045
2046        if (sb_len < 7)
2047                return 0;
2048        switch (sense_buffer[0] & 0x7f) {
2049        case 0x70:
2050        case 0x71:
2051                if (sense_buffer[0] & 0x80) {
2052                        *info_out = (sense_buffer[3] << 24) +
2053                                    (sense_buffer[4] << 16) +
2054                                    (sense_buffer[5] << 8) + sense_buffer[6];
2055                        return 1;
2056                } else
2057                        return 0;
2058        case 0x72:
2059        case 0x73:
2060                ucp = scsi_sense_desc_find(sense_buffer, sb_len,
2061                                           0 /* info desc */);
2062                if (ucp && (0xa == ucp[1])) {
2063                        ull = 0;
2064                        for (j = 0; j < 8; ++j) {
2065                                if (j > 0)
2066                                        ull <<= 8;
2067                                ull |= ucp[4 + j];
2068                        }
2069                        *info_out = ull;
2070                        return 1;
2071                } else
2072                        return 0;
2073        default:
2074                return 0;
2075        }
2076}
2077EXPORT_SYMBOL(scsi_get_sense_info_fld);
2078
2079/**
2080 * scsi_build_sense_buffer - build sense data in a buffer
2081 * @desc:       Sense format (non zero == descriptor format,
2082 *              0 == fixed format)
2083 * @buf:        Where to build sense data
2084 * @key:        Sense key
2085 * @asc:        Additional sense code
2086 * @ascq:       Additional sense code qualifier
2087 *
2088 **/
2089void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq)
2090{
2091        if (desc) {
2092                buf[0] = 0x72;  /* descriptor, current */
2093                buf[1] = key;
2094                buf[2] = asc;
2095                buf[3] = ascq;
2096                buf[7] = 0;
2097        } else {
2098                buf[0] = 0x70;  /* fixed, current */
2099                buf[2] = key;
2100                buf[7] = 0xa;
2101                buf[12] = asc;
2102                buf[13] = ascq;
2103        }
2104}
2105EXPORT_SYMBOL(scsi_build_sense_buffer);
2106
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.