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/gfp.h>
  20#include <linux/timer.h>
  21#include <linux/string.h>
  22#include <linux/kernel.h>
  23#include <linux/freezer.h>
  24#include <linux/kthread.h>
  25#include <linux/interrupt.h>
  26#include <linux/blkdev.h>
  27#include <linux/delay.h>
  28
  29#include <scsi/scsi.h>
  30#include <scsi/scsi_cmnd.h>
  31#include <scsi/scsi_dbg.h>
  32#include <scsi/scsi_device.h>
  33#include <scsi/scsi_driver.h>
  34#include <scsi/scsi_eh.h>
  35#include <scsi/scsi_transport.h>
  36#include <scsi/scsi_host.h>
  37#include <scsi/scsi_ioctl.h>
  38
  39#include "scsi_priv.h"
  40#include "scsi_logging.h"
  41#include "scsi_transport_api.h"
  42
  43#include <trace/events/scsi.h>
  44
  45static void scsi_eh_done(struct scsi_cmnd *scmd);
  46
  47#define SENSE_TIMEOUT           (10*HZ)
  48
  49/*
  50 * These should *probably* be handled by the host itself.
  51 * Since it is allowed to sleep, it probably should.
  52 */
  53#define BUS_RESET_SETTLE_TIME   (10)
  54#define HOST_RESET_SETTLE_TIME  (10)
  55
  56static int scsi_eh_try_stu(struct scsi_cmnd *scmd);
  57
  58/* called with shost->host_lock held */
  59void scsi_eh_wakeup(struct Scsi_Host *shost)
  60{
  61        if (shost->host_busy == shost->host_failed) {
  62                trace_scsi_eh_wakeup(shost);
  63                wake_up_process(shost->ehandler);
  64                SCSI_LOG_ERROR_RECOVERY(5,
  65                                printk("Waking error handler thread\n"));
  66        }
  67}
  68
  69/**
  70 * scsi_schedule_eh - schedule EH for SCSI host
  71 * @shost:      SCSI host to invoke error handling on.
  72 *
  73 * Schedule SCSI EH without scmd.
  74 */
  75void scsi_schedule_eh(struct Scsi_Host *shost)
  76{
  77        unsigned long flags;
  78
  79        spin_lock_irqsave(shost->host_lock, flags);
  80
  81        if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 ||
  82            scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) {
  83                shost->host_eh_scheduled++;
  84                scsi_eh_wakeup(shost);
  85        }
  86
  87        spin_unlock_irqrestore(shost->host_lock, flags);
  88}
  89EXPORT_SYMBOL_GPL(scsi_schedule_eh);
  90
  91/**
  92 * scsi_eh_scmd_add - add scsi cmd to error handling.
  93 * @scmd:       scmd to run eh on.
  94 * @eh_flag:    optional SCSI_EH flag.
  95 *
  96 * Return value:
  97 *      0 on failure.
  98 */
  99int scsi_eh_scmd_add(struct scsi_cmnd *scmd, int eh_flag)
 100{
 101        struct Scsi_Host *shost = scmd->device->host;
 102        unsigned long flags;
 103        int ret = 0;
 104
 105        if (!shost->ehandler)
 106                return 0;
 107
 108        spin_lock_irqsave(shost->host_lock, flags);
 109        if (scsi_host_set_state(shost, SHOST_RECOVERY))
 110                if (scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY))
 111                        goto out_unlock;
 112
 113        ret = 1;
 114        scmd->eh_eflags |= eh_flag;
 115        list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
 116        shost->host_failed++;
 117        scsi_eh_wakeup(shost);
 118 out_unlock:
 119        spin_unlock_irqrestore(shost->host_lock, flags);
 120        return ret;
 121}
 122
 123/**
 124 * scsi_times_out - Timeout function for normal scsi commands.
 125 * @req:        request that is timing out.
 126 *
 127 * Notes:
 128 *     We do not need to lock this.  There is the potential for a race
 129 *     only in that the normal completion handling might run, but if the
 130 *     normal completion function determines that the timer has already
 131 *     fired, then it mustn't do anything.
 132 */
 133enum blk_eh_timer_return scsi_times_out(struct request *req)
 134{
 135        struct scsi_cmnd *scmd = req->special;
 136        enum blk_eh_timer_return rtn = BLK_EH_NOT_HANDLED;
 137        struct Scsi_Host *host = scmd->device->host;
 138
 139        trace_scsi_dispatch_cmd_timeout(scmd);
 140        scsi_log_completion(scmd, TIMEOUT_ERROR);
 141
 142        if (host->transportt->eh_timed_out)
 143                rtn = host->transportt->eh_timed_out(scmd);
 144        else if (host->hostt->eh_timed_out)
 145                rtn = host->hostt->eh_timed_out(scmd);
 146
 147        scmd->result |= DID_TIME_OUT << 16;
 148
 149        if (unlikely(rtn == BLK_EH_NOT_HANDLED &&
 150                     !scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD)))
 151                rtn = BLK_EH_HANDLED;
 152
 153        return rtn;
 154}
 155
 156/**
 157 * scsi_block_when_processing_errors - Prevent cmds from being queued.
 158 * @sdev:       Device on which we are performing recovery.
 159 *
 160 * Description:
 161 *     We block until the host is out of error recovery, and then check to
 162 *     see whether the host or the device is offline.
 163 *
 164 * Return value:
 165 *     0 when dev was taken offline by error recovery. 1 OK to proceed.
 166 */
 167int scsi_block_when_processing_errors(struct scsi_device *sdev)
 168{
 169        int online;
 170
 171        wait_event(sdev->host->host_wait, !scsi_host_in_recovery(sdev->host));
 172
 173        online = scsi_device_online(sdev);
 174
 175        SCSI_LOG_ERROR_RECOVERY(5, printk("%s: rtn: %d\n", __func__,
 176                                          online));
 177
 178        return online;
 179}
 180EXPORT_SYMBOL(scsi_block_when_processing_errors);
 181
 182#ifdef CONFIG_SCSI_LOGGING
 183/**
 184 * scsi_eh_prt_fail_stats - Log info on failures.
 185 * @shost:      scsi host being recovered.
 186 * @work_q:     Queue of scsi cmds to process.
 187 */
 188static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost,
 189                                          struct list_head *work_q)
 190{
 191        struct scsi_cmnd *scmd;
 192        struct scsi_device *sdev;
 193        int total_failures = 0;
 194        int cmd_failed = 0;
 195        int cmd_cancel = 0;
 196        int devices_failed = 0;
 197
 198        shost_for_each_device(sdev, shost) {
 199                list_for_each_entry(scmd, work_q, eh_entry) {
 200                        if (scmd->device == sdev) {
 201                                ++total_failures;
 202                                if (scmd->eh_eflags & SCSI_EH_CANCEL_CMD)
 203                                        ++cmd_cancel;
 204                                else
 205                                        ++cmd_failed;
 206                        }
 207                }
 208
 209                if (cmd_cancel || cmd_failed) {
 210                        SCSI_LOG_ERROR_RECOVERY(3,
 211                                sdev_printk(KERN_INFO, sdev,
 212                                            "%s: cmds failed: %d, cancel: %d\n",
 213                                            __func__, cmd_failed,
 214                                            cmd_cancel));
 215                        cmd_cancel = 0;
 216                        cmd_failed = 0;
 217                        ++devices_failed;
 218                }
 219        }
 220
 221        SCSI_LOG_ERROR_RECOVERY(2, printk("Total of %d commands on %d"
 222                                          " devices require eh work\n",
 223                                   total_failures, devices_failed));
 224}
 225#endif
 226
 227/**
 228 * scsi_check_sense - Examine scsi cmd sense
 229 * @scmd:       Cmd to have sense checked.
 230 *
 231 * Return value:
 232 *      SUCCESS or FAILED or NEEDS_RETRY or TARGET_ERROR
 233 *
 234 * Notes:
 235 *      When a deferred error is detected the current command has
 236 *      not been executed and needs retrying.
 237 */
 238static int scsi_check_sense(struct scsi_cmnd *scmd)
 239{
 240        struct scsi_device *sdev = scmd->device;
 241        struct scsi_sense_hdr sshdr;
 242
 243        if (! scsi_command_normalize_sense(scmd, &sshdr))
 244                return FAILED;  /* no valid sense data */
 245
 246        if (scmd->cmnd[0] == TEST_UNIT_READY && scmd->scsi_done != scsi_eh_done)
 247                /*
 248                 * nasty: for mid-layer issued TURs, we need to return the
 249                 * actual sense data without any recovery attempt.  For eh
 250                 * issued ones, we need to try to recover and interpret
 251                 */
 252                return SUCCESS;
 253
 254        if (scsi_sense_is_deferred(&sshdr))
 255                return NEEDS_RETRY;
 256
 257        if (sdev->scsi_dh_data && sdev->scsi_dh_data->scsi_dh &&
 258                        sdev->scsi_dh_data->scsi_dh->check_sense) {
 259                int rc;
 260
 261                rc = sdev->scsi_dh_data->scsi_dh->check_sense(sdev, &sshdr);
 262                if (rc != SCSI_RETURN_NOT_HANDLED)
 263                        return rc;
 264                /* handler does not care. Drop down to default handling */
 265        }
 266
 267        /*
 268         * Previous logic looked for FILEMARK, EOM or ILI which are
 269         * mainly associated with tapes and returned SUCCESS.
 270         */
 271        if (sshdr.response_code == 0x70) {
 272                /* fixed format */
 273                if (scmd->sense_buffer[2] & 0xe0)
 274                        return SUCCESS;
 275        } else {
 276                /*
 277                 * descriptor format: look for "stream commands sense data
 278                 * descriptor" (see SSC-3). Assume single sense data
 279                 * descriptor. Ignore ILI from SBC-2 READ LONG and WRITE LONG.
 280                 */
 281                if ((sshdr.additional_length > 3) &&
 282                    (scmd->sense_buffer[8] == 0x4) &&
 283                    (scmd->sense_buffer[11] & 0xe0))
 284                        return SUCCESS;
 285        }
 286
 287        switch (sshdr.sense_key) {
 288        case NO_SENSE:
 289                return SUCCESS;
 290        case RECOVERED_ERROR:
 291                return /* soft_error */ SUCCESS;
 292
 293        case ABORTED_COMMAND:
 294                if (sshdr.asc == 0x10) /* DIF */
 295                        return SUCCESS;
 296
 297                return NEEDS_RETRY;
 298        case NOT_READY:
 299        case UNIT_ATTENTION:
 300                /*
 301                 * if we are expecting a cc/ua because of a bus reset that we
 302                 * performed, treat this just as a retry.  otherwise this is
 303                 * information that we should pass up to the upper-level driver
 304                 * so that we can deal with it there.
 305                 */
 306                if (scmd->device->expecting_cc_ua) {
 307                        /*
 308                         * Because some device does not queue unit
 309                         * attentions correctly, we carefully check
 310                         * additional sense code and qualifier so as
 311                         * not to squash media change unit attention.
 312                         */
 313                        if (sshdr.asc != 0x28 || sshdr.ascq != 0x00) {
 314                                scmd->device->expecting_cc_ua = 0;
 315                                return NEEDS_RETRY;
 316                        }
 317                }
 318                /*
 319                 * if the device is in the process of becoming ready, we
 320                 * should retry.
 321                 */
 322                if ((sshdr.asc == 0x04) && (sshdr.ascq == 0x01))
 323                        return NEEDS_RETRY;
 324                /*
 325                 * if the device is not started, we need to wake
 326                 * the error handler to start the motor
 327                 */
 328                if (scmd->device->allow_restart &&
 329                    (sshdr.asc == 0x04) && (sshdr.ascq == 0x02))
 330                        return FAILED;
 331
 332                if (sshdr.asc == 0x3f && sshdr.ascq == 0x0e)
 333                        scmd_printk(KERN_WARNING, scmd,
 334                                    "Warning! Received an indication that the "
 335                                    "LUN assignments on this target have "
 336                                    "changed. The Linux SCSI layer does not "
 337                                    "automatically remap LUN assignments.\n");
 338                else if (sshdr.asc == 0x3f)
 339                        scmd_printk(KERN_WARNING, scmd,
 340                                    "Warning! Received an indication that the "
 341                                    "operating parameters on this target have "
 342                                    "changed. The Linux SCSI layer does not "
 343                                    "automatically adjust these parameters.\n");
 344
 345                if (sshdr.asc == 0x38 && sshdr.ascq == 0x07)
 346                        scmd_printk(KERN_WARNING, scmd,
 347                                    "Warning! Received an indication that the "
 348                                    "LUN reached a thin provisioning soft "
 349                                    "threshold.\n");
 350
 351                /*
 352                 * Pass the UA upwards for a determination in the completion
 353                 * functions.
 354                 */
 355                return SUCCESS;
 356
 357                /* these are not supported */
 358        case COPY_ABORTED:
 359        case VOLUME_OVERFLOW:
 360        case MISCOMPARE:
 361        case BLANK_CHECK:
 362        case DATA_PROTECT:
 363                return TARGET_ERROR;
 364
 365        case MEDIUM_ERROR:
 366                if (sshdr.asc == 0x11 || /* UNRECOVERED READ ERR */
 367                    sshdr.asc == 0x13 || /* AMNF DATA FIELD */
 368                    sshdr.asc == 0x14) { /* RECORD NOT FOUND */
 369                        return TARGET_ERROR;
 370                }
 371                return NEEDS_RETRY;
 372
 373        case HARDWARE_ERROR:
 374                if (scmd->device->retry_hwerror)
 375                        return ADD_TO_MLQUEUE;
 376                else
 377                        return TARGET_ERROR;
 378
 379        case ILLEGAL_REQUEST:
 380                if (sshdr.asc == 0x20 || /* Invalid command operation code */
 381                    sshdr.asc == 0x21 || /* Logical block address out of range */
 382                    sshdr.asc == 0x24 || /* Invalid field in cdb */
 383                    sshdr.asc == 0x26) { /* Parameter value invalid */
 384                        return TARGET_ERROR;
 385                }
 386                return SUCCESS;
 387
 388        default:
 389                return SUCCESS;
 390        }
 391}
 392
 393static void scsi_handle_queue_ramp_up(struct scsi_device *sdev)
 394{
 395        struct scsi_host_template *sht = sdev->host->hostt;
 396        struct scsi_device *tmp_sdev;
 397
 398        if (!sht->change_queue_depth ||
 399            sdev->queue_depth >= sdev->max_queue_depth)
 400                return;
 401
 402        if (time_before(jiffies,
 403            sdev->last_queue_ramp_up + sdev->queue_ramp_up_period))
 404                return;
 405
 406        if (time_before(jiffies,
 407            sdev->last_queue_full_time + sdev->queue_ramp_up_period))
 408                return;
 409
 410        /*
 411         * Walk all devices of a target and do
 412         * ramp up on them.
 413         */
 414        shost_for_each_device(tmp_sdev, sdev->host) {
 415                if (tmp_sdev->channel != sdev->channel ||
 416                    tmp_sdev->id != sdev->id ||
 417                    tmp_sdev->queue_depth == sdev->max_queue_depth)
 418                        continue;
 419                /*
 420                 * call back into LLD to increase queue_depth by one
 421                 * with ramp up reason code.
 422                 */
 423                sht->change_queue_depth(tmp_sdev, tmp_sdev->queue_depth + 1,
 424                                        SCSI_QDEPTH_RAMP_UP);
 425                sdev->last_queue_ramp_up = jiffies;
 426        }
 427}
 428
 429static void scsi_handle_queue_full(struct scsi_device *sdev)
 430{
 431        struct scsi_host_template *sht = sdev->host->hostt;
 432        struct scsi_device *tmp_sdev;
 433
 434        if (!sht->change_queue_depth)
 435                return;
 436
 437        shost_for_each_device(tmp_sdev, sdev->host) {
 438                if (tmp_sdev->channel != sdev->channel ||
 439                    tmp_sdev->id != sdev->id)
 440                        continue;
 441                /*
 442                 * We do not know the number of commands that were at
 443                 * the device when we got the queue full so we start
 444                 * from the highest possible value and work our way down.
 445                 */
 446                sht->change_queue_depth(tmp_sdev, tmp_sdev->queue_depth - 1,
 447                                        SCSI_QDEPTH_QFULL);
 448        }
 449}
 450
 451/**
 452 * scsi_eh_completed_normally - Disposition a eh cmd on return from LLD.
 453 * @scmd:       SCSI cmd to examine.
 454 *
 455 * Notes:
 456 *    This is *only* called when we are examining the status of commands
 457 *    queued during error recovery.  the main difference here is that we
 458 *    don't allow for the possibility of retries here, and we are a lot
 459 *    more restrictive about what we consider acceptable.
 460 */
 461static int scsi_eh_completed_normally(struct scsi_cmnd *scmd)
 462{
 463        /*
 464         * first check the host byte, to see if there is anything in there
 465         * that would indicate what we need to do.
 466         */
 467        if (host_byte(scmd->result) == DID_RESET) {
 468                /*
 469                 * rats.  we are already in the error handler, so we now
 470                 * get to try and figure out what to do next.  if the sense
 471                 * is valid, we have a pretty good idea of what to do.
 472                 * if not, we mark it as FAILED.
 473                 */
 474                return scsi_check_sense(scmd);
 475        }
 476        if (host_byte(scmd->result) != DID_OK)
 477                return FAILED;
 478
 479        /*
 480         * next, check the message byte.
 481         */
 482        if (msg_byte(scmd->result) != COMMAND_COMPLETE)
 483                return FAILED;
 484
 485        /*
 486         * now, check the status byte to see if this indicates
 487         * anything special.
 488         */
 489        switch (status_byte(scmd->result)) {
 490        case GOOD:
 491                scsi_handle_queue_ramp_up(scmd->device);
 492        case COMMAND_TERMINATED:
 493                return SUCCESS;
 494        case CHECK_CONDITION:
 495                return scsi_check_sense(scmd);
 496        case CONDITION_GOOD:
 497        case INTERMEDIATE_GOOD:
 498        case INTERMEDIATE_C_GOOD:
 499                /*
 500                 * who knows?  FIXME(eric)
 501                 */
 502                return SUCCESS;
 503        case RESERVATION_CONFLICT:
 504                if (scmd->cmnd[0] == TEST_UNIT_READY)
 505                        /* it is a success, we probed the device and
 506                         * found it */
 507                        return SUCCESS;
 508                /* otherwise, we failed to send the command */
 509                return FAILED;
 510        case QUEUE_FULL:
 511                scsi_handle_queue_full(scmd->device);
 512                /* fall through */
 513        case BUSY:
 514                return NEEDS_RETRY;
 515        default:
 516                return FAILED;
 517        }
 518        return FAILED;
 519}
 520
 521/**
 522 * scsi_eh_done - Completion function for error handling.
 523 * @scmd:       Cmd that is done.
 524 */
 525static void scsi_eh_done(struct scsi_cmnd *scmd)
 526{
 527        struct completion *eh_action;
 528
 529        SCSI_LOG_ERROR_RECOVERY(3,
 530                printk("%s scmd: %p result: %x\n",
 531                        __func__, scmd, scmd->result));
 532
 533        eh_action = scmd->device->host->eh_action;
 534        if (eh_action)
 535                complete(eh_action);
 536}
 537
 538/**
 539 * scsi_try_host_reset - ask host adapter to reset itself
 540 * @scmd:       SCSI cmd to send hsot reset.
 541 */
 542static int scsi_try_host_reset(struct scsi_cmnd *scmd)
 543{
 544        unsigned long flags;
 545        int rtn;
 546        struct Scsi_Host *host = scmd->device->host;
 547        struct scsi_host_template *hostt = host->hostt;
 548
 549        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Snd Host RST\n",
 550                                          __func__));
 551
 552        if (!hostt->eh_host_reset_handler)
 553                return FAILED;
 554
 555        rtn = hostt->eh_host_reset_handler(scmd);
 556
 557        if (rtn == SUCCESS) {
 558                if (!hostt->skip_settle_delay)
 559                        ssleep(HOST_RESET_SETTLE_TIME);
 560                spin_lock_irqsave(host->host_lock, flags);
 561                scsi_report_bus_reset(host, scmd_channel(scmd));
 562                spin_unlock_irqrestore(host->host_lock, flags);
 563        }
 564
 565        return rtn;
 566}
 567
 568/**
 569 * scsi_try_bus_reset - ask host to perform a bus reset
 570 * @scmd:       SCSI cmd to send bus reset.
 571 */
 572static int scsi_try_bus_reset(struct scsi_cmnd *scmd)
 573{
 574        unsigned long flags;
 575        int rtn;
 576        struct Scsi_Host *host = scmd->device->host;
 577        struct scsi_host_template *hostt = host->hostt;
 578
 579        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Snd Bus RST\n",
 580                                          __func__));
 581
 582        if (!hostt->eh_bus_reset_handler)
 583                return FAILED;
 584
 585        rtn = hostt->eh_bus_reset_handler(scmd);
 586
 587        if (rtn == SUCCESS) {
 588                if (!hostt->skip_settle_delay)
 589                        ssleep(BUS_RESET_SETTLE_TIME);
 590                spin_lock_irqsave(host->host_lock, flags);
 591                scsi_report_bus_reset(host, scmd_channel(scmd));
 592                spin_unlock_irqrestore(host->host_lock, flags);
 593        }
 594
 595        return rtn;
 596}
 597
 598static void __scsi_report_device_reset(struct scsi_device *sdev, void *data)
 599{
 600        sdev->was_reset = 1;
 601        sdev->expecting_cc_ua = 1;
 602}
 603
 604/**
 605 * scsi_try_target_reset - Ask host to perform a target reset
 606 * @scmd:       SCSI cmd used to send a target reset
 607 *
 608 * Notes:
 609 *    There is no timeout for this operation.  if this operation is
 610 *    unreliable for a given host, then the host itself needs to put a
 611 *    timer on it, and set the host back to a consistent state prior to
 612 *    returning.
 613 */
 614static int scsi_try_target_reset(struct scsi_cmnd *scmd)
 615{
 616        unsigned long flags;
 617        int rtn;
 618        struct Scsi_Host *host = scmd->device->host;
 619        struct scsi_host_template *hostt = host->hostt;
 620
 621        if (!hostt->eh_target_reset_handler)
 622                return FAILED;
 623
 624        rtn = hostt->eh_target_reset_handler(scmd);
 625        if (rtn == SUCCESS) {
 626                spin_lock_irqsave(host->host_lock, flags);
 627                __starget_for_each_device(scsi_target(scmd->device), NULL,
 628                                          __scsi_report_device_reset);
 629                spin_unlock_irqrestore(host->host_lock, flags);
 630        }
 631
 632        return rtn;
 633}
 634
 635/**
 636 * scsi_try_bus_device_reset - Ask host to perform a BDR on a dev
 637 * @scmd:       SCSI cmd used to send BDR
 638 *
 639 * Notes:
 640 *    There is no timeout for this operation.  if this operation is
 641 *    unreliable for a given host, then the host itself needs to put a
 642 *    timer on it, and set the host back to a consistent state prior to
 643 *    returning.
 644 */
 645static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
 646{
 647        int rtn;
 648        struct scsi_host_template *hostt = scmd->device->host->hostt;
 649
 650        if (!hostt->eh_device_reset_handler)
 651                return FAILED;
 652
 653        rtn = hostt->eh_device_reset_handler(scmd);
 654        if (rtn == SUCCESS)
 655                __scsi_report_device_reset(scmd->device, NULL);
 656        return rtn;
 657}
 658
 659static int scsi_try_to_abort_cmd(struct scsi_host_template *hostt, struct scsi_cmnd *scmd)
 660{
 661        if (!hostt->eh_abort_handler)
 662                return FAILED;
 663
 664        return hostt->eh_abort_handler(scmd);
 665}
 666
 667static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd)
 668{
 669        if (scsi_try_to_abort_cmd(scmd->device->host->hostt, scmd) != SUCCESS)
 670                if (scsi_try_bus_device_reset(scmd) != SUCCESS)
 671                        if (scsi_try_target_reset(scmd) != SUCCESS)
 672                                if (scsi_try_bus_reset(scmd) != SUCCESS)
 673                                        scsi_try_host_reset(scmd);
 674}
 675
 676/**
 677 * scsi_eh_prep_cmnd  - Save a scsi command info as part of error recovery
 678 * @scmd:       SCSI command structure to hijack
 679 * @ses:        structure to save restore information
 680 * @cmnd:       CDB to send. Can be NULL if no new cmnd is needed
 681 * @cmnd_size:  size in bytes of @cmnd (must be <= BLK_MAX_CDB)
 682 * @sense_bytes: size of sense data to copy. or 0 (if != 0 @cmnd is ignored)
 683 *
 684 * This function is used to save a scsi command information before re-execution
 685 * as part of the error recovery process.  If @sense_bytes is 0 the command
 686 * sent must be one that does not transfer any data.  If @sense_bytes != 0
 687 * @cmnd is ignored and this functions sets up a REQUEST_SENSE command
 688 * and cmnd buffers to read @sense_bytes into @scmd->sense_buffer.
 689 */
 690void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses,
 691                        unsigned char *cmnd, int cmnd_size, unsigned sense_bytes)
 692{
 693        struct scsi_device *sdev = scmd->device;
 694
 695        /*
 696         * We need saved copies of a number of fields - this is because
 697         * error handling may need to overwrite these with different values
 698         * to run different commands, and once error handling is complete,
 699         * we will need to restore these values prior to running the actual
 700         * command.
 701         */
 702        ses->cmd_len = scmd->cmd_len;
 703        ses->cmnd = scmd->cmnd;
 704        ses->data_direction = scmd->sc_data_direction;
 705        ses->sdb = scmd->sdb;
 706        ses->next_rq = scmd->request->next_rq;
 707        ses->result = scmd->result;
 708        ses->underflow = scmd->underflow;
 709        ses->prot_op = scmd->prot_op;
 710
 711        scmd->prot_op = SCSI_PROT_NORMAL;
 712        scmd->cmnd = ses->eh_cmnd;
 713        memset(scmd->cmnd, 0, BLK_MAX_CDB);
 714        memset(&scmd->sdb, 0, sizeof(scmd->sdb));
 715        scmd->request->next_rq = NULL;
 716
 717        if (sense_bytes) {
 718                scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE,
 719                                         sense_bytes);
 720                sg_init_one(&ses->sense_sgl, scmd->sense_buffer,
 721                            scmd->sdb.length);
 722                scmd->sdb.table.sgl = &ses->sense_sgl;
 723                scmd->sc_data_direction = DMA_FROM_DEVICE;
 724                scmd->sdb.table.nents = 1;
 725                scmd->cmnd[0] = REQUEST_SENSE;
 726                scmd->cmnd[4] = scmd->sdb.length;
 727                scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
 728        } else {
 729                scmd->sc_data_direction = DMA_NONE;
 730                if (cmnd) {
 731                        BUG_ON(cmnd_size > BLK_MAX_CDB);
 732                        memcpy(scmd->cmnd, cmnd, cmnd_size);
 733                        scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
 734                }
 735        }
 736
 737        scmd->underflow = 0;
 738
 739        if (sdev->scsi_level <= SCSI_2 && sdev->scsi_level != SCSI_UNKNOWN)
 740                scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) |
 741                        (sdev->lun << 5 & 0xe0);
 742
 743        /*
 744         * Zero the sense buffer.  The scsi spec mandates that any
 745         * untransferred sense data should be interpreted as being zero.
 746         */
 747        memset(scmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
 748}
 749EXPORT_SYMBOL(scsi_eh_prep_cmnd);
 750
 751/**
 752 * scsi_eh_restore_cmnd  - Restore a scsi command info as part of error recovery
 753 * @scmd:       SCSI command structure to restore
 754 * @ses:        saved information from a coresponding call to scsi_eh_prep_cmnd
 755 *
 756 * Undo any damage done by above scsi_eh_prep_cmnd().
 757 */
 758void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses)
 759{
 760        /*
 761         * Restore original data
 762         */
 763        scmd->cmd_len = ses->cmd_len;
 764        scmd->cmnd = ses->cmnd;
 765        scmd->sc_data_direction = ses->data_direction;
 766        scmd->sdb = ses->sdb;
 767        scmd->request->next_rq = ses->next_rq;
 768        scmd->result = ses->result;
 769        scmd->underflow = ses->underflow;
 770        scmd->prot_op = ses->prot_op;
 771}
 772EXPORT_SYMBOL(scsi_eh_restore_cmnd);
 773
 774/**
 775 * scsi_send_eh_cmnd  - submit a scsi command as part of error recovery
 776 * @scmd:       SCSI command structure to hijack
 777 * @cmnd:       CDB to send
 778 * @cmnd_size:  size in bytes of @cmnd
 779 * @timeout:    timeout for this request
 780 * @sense_bytes: size of sense data to copy or 0
 781 *
 782 * This function is used to send a scsi command down to a target device
 783 * as part of the error recovery process. See also scsi_eh_prep_cmnd() above.
 784 *
 785 * Return value:
 786 *    SUCCESS or FAILED or NEEDS_RETRY
 787 */
 788static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
 789                             int cmnd_size, int timeout, unsigned sense_bytes)
 790{
 791        struct scsi_device *sdev = scmd->device;
 792        struct Scsi_Host *shost = sdev->host;
 793        DECLARE_COMPLETION_ONSTACK(done);
 794        unsigned long timeleft;
 795        struct scsi_eh_save ses;
 796        int rtn;
 797
 798        scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes);
 799        shost->eh_action = &done;
 800
 801        scsi_log_send(scmd);
 802        scmd->scsi_done = scsi_eh_done;
 803        shost->hostt->queuecommand(shost, scmd);
 804
 805        timeleft = wait_for_completion_timeout(&done, timeout);
 806
 807        shost->eh_action = NULL;
 808
 809        scsi_log_completion(scmd, SUCCESS);
 810
 811        SCSI_LOG_ERROR_RECOVERY(3,
 812                printk("%s: scmd: %p, timeleft: %ld\n",
 813                        __func__, scmd, timeleft));
 814
 815        /*
 816         * If there is time left scsi_eh_done got called, and we will
 817         * examine the actual status codes to see whether the command
 818         * actually did complete normally, else tell the host-&e whI_L="line" nes" clas1ers/scsi/8csi_error.c#L719" id="L789" cl81s="line" name="L699"> 699timeoss="comment">         * command.
 700 */
scmd, cmnd) {
 722            int scsi_done =        d_* actualhref="+code=scsi_eh_don        d_* actualass="sref">scsi_log_send(scmd);
 723       >        SCSI_LOG_ERROR_RECOVERY(3,
="L812"> 812                printk("L813"> 813                        __fun     int timeleft));
 806
switchL6 class="sref">s     int cmnd) {
caid  class="sref">scmd, cmnd) {
caid  class="sref">s   SUCCESS a> = cmnd) {
caid  class="sref">smment"a> = cmnd) {
caid  class="sref">sTARGETY" claa> = cmnd) {
 732breakss="sref">timeleft));
caid  class="sref">sADD_TO_MLQUEUode=SCSI_SENSE_BADD_TO_MLQUEUoor" :class="sref">cmnd) {
 813                    int scsi_do   SUCCESS a> = timeleft));
"L813"> breakss="sref">timeleft));
default:class="sref">cmnd) {
 813                    int scsi_domment"a> = timeleft));
"L813"> breakss="sref">timeleft));
ne" name="L771"> 771}
 728        } else {
="sref">scsi_donescsi_log_send(scmd);
 722            int scsi_domment"a> = timeleft));
 771}
 814
 765 a>void s">scsi_eh_prep_cmnd(scmd, &scmd);
 806
 717            scmd->requeste=cmtyp scsi_leveREQ_TYPE_BLOCK_PCcmnd) {
="L791"> 791        stru">cmncmn="lin="sref">scsi_devicr/a> = sdevsi_cmcmtoru">cmncmnass="sref">scsi_log_send(scmd);
="L739"> 739     r/a> = shost->sense_bytes)
="L722"> 722            int scsi_do  r/a> = shost->scsi_log_completion(sses, cmnd, cmnd_s     int scmd);
 771}
 742
cmnd_s     int scmd);
 771}
 771}
 756/**
 757s="eh_e=reque_* @sen* screque * @sense_by      sn cliculara scsi ment">         * command.
 778         * command.
 779ent">         * command.
 780         * command.
 761 * @ses: , o staeout: immand structure to restore
 762
 783 * it>        sment">         * command.
 784 */
 788static e=reque_* @se">scsi_send_eh_cmnd(struct scsi_cmnd *sense_bytes)
cmnd) {
cmnd_s{
son = sense_buffer << 5 & 0xe0);
 748}
 748}
 780/**
 761         * command.
 762    ommentmd> The ehehat"finiscedment">         * command.
 753 * @t of thedcodes tosment">         * command.
 774ent">         * command.
 775         * command.
 776<<<         * command.
 777<8">="commh tolrmathref=sn* it>may causmmo stacodes tosallybe uecomd,ent">         * command.
 778<<<< to  The wransfdisan b whhe we are dorma * Zeus we retual wanmallent">         * command.
 779<<<    " class="s scsi_onch_weent">         * command.
 780<<<< re retdyallyleavomment">h tolrmatwe h tolh_" class="s  * @rcalment">         * command.
 781 */
 758voidfinisclasdode=scsi_eh_restore_cmnfinisclasd" cl>">scsi_send_eh_cmnd(struct scsi_cmnd *scmdlisa_hetd/a> *scsi_cre i_q/a> *sense_bytes)
cmnd) {
 764        scmd->sdev->sdev_failh       765        scmdcmneflag, &underflow = 0;
 766 * class="sref">scmdscmdcmnentrlhref="+code=scscmnentrl=scmd" class="sref">sre i_q/a> *underflow = 0;
 748}
s> 772EXPORT_SYMBOLfinisclasdode=scsi_eh_restore_cmnfinisclasd" cls"sref">underflow = 0;
 748}
 780/**
 761         * command.
 762ss=odes tosallyt of theent">         * command.
 753ss=p of thedcodes tosment">         * command.
 774ent">         * command.
 775         * command.
 786="Lwe ne"> * Trcreque * @se n> * @ses: .">="Lso,mentn si cie tell the host-&e whI_L="line" nes" clas1ers/scsi/8csi_error.c#L797" id="L787" cl89s="line" name="L777"> 777<8">nowd" otwe h vh_rebetttacidea>ss=whhe * Tdinterpreted as being zero.
 778terpreted as being zero.
 779         * command.
 780<<< * tunatd *ide effect  The ="L untrue adapttacdocodet">         * command.
 761 * @ses: ,twe is fupuntuttrmadet">         * command.
 762         * command.
 753ent">         * command.
 754<<< * @ses: red sentual entsenseys,ent">         * command.
 775<8">=ly, e>now on fI h vh_the ayent">ough>noogies ="Lyou is fupuin commment">         * command.
 786ent">         * command.
 777<8">XXX: L94timeossde ntransfgo away, but  The ne">s  naaudit ofent">         * command.
 778<<<<<<<<         * command.
 779 */
 788static cmngee_* @seode=scsi_eh_restore_cmngee_* @se" cl>">scsi_send_eh_cmnd *scsi_cwork_q/a> * */
 741scmdlisa_hetd/a> *scsi_cre i_q/a> *sense_bytes)
cmnd) {
scsi_send_eh_cmnd(struct scsi_cmnd *scsi_ce=ne/a> *scmd);
 796        int rtn;
 771}
 766(se=ne/a> *swork_q/a> *scmnentrlhref="+code=scscmnentrl=scml" class="sref">cmnd) {
="L7717"> 717            scmdcmneflag, &SCSI_2 &a_RECOEH_CANCEL_CM"a> = [1] & 0x1f) |
"L81">SCSI_2 &a_RECOeIZE" VALI"a> = scsi_log_send(sense_bytes)
 789contrmuetn" class="sref">rtn;
 810
="sref">scsi_do>        SCSI2lass="sref">__func__<_         scsi_log_KERN_INFO   stion( 810
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>class="sref">printk(,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(scmd9"> ( =scmdstn" class="sref">rtn;
96"> 796        int sdevsi_e=reque_* @sesref">scsi_log_send(rtn;
="L739"> 739        int scsi_levecmd, rtn;
>>>>>>>>contrmuetn" class="sref">rtn;
 797
="sref">scsi_do>        SCSI3d" class="sref">s         printk( * @ng">&q7;p, timeleftne" name="L797"> 797
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>class="sref">printk(stion( 810
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>c7"> 717            scmd->rtn;
="sref">scsi_do>        SCSI3d" class="sref">s;
printk(stion(rtn;
 742
96"> 796        int sdevsi_decide_disposif="+code=scsi_log_compledecide_disposif="+" cl>sref">scsi_log_send(rtn;
 814
="L815"> 815        /*
 816="Lent"de=res was"* actu,mentn just p="Laitda794/*
 817upper levelment">         * command.
 818 */
="L739"> 739        int scsi_levecmd, rtn;
="L722"> "L815"> 815        mwe ent'e wanmalimeoss="com"deissomd, justspan class="comment"> */
 761finiscedo"cthLent"* @sense_bd" otsse tell the host-&e whI_L="line" nes" clas9ers/scsi/9csi_error.c#L742" id="L792" cl94s="line" name="L762"> 762rerinne theent"max * T @s    ie tell the host-&e whI_L="line" nes" clas9ers/scsi/9csi_error.c#L743" id="L793" cl94s="line" name="L753"> 753wnt'e si cdeissomdc* */
 813                        scmdsdev       scmdon ow">     de=rtn" class="sref">rtn;
L728"="L739"> 739        int scsi_leve   SUCCESS a> = rtn;
>>>>>>>>contrmuetn" class="sref">rtn;
 797
sref">EXPORT_SYMBOLfinisclasdode=scsi_eh_restore_cmnfinisclasd" clfscsi_log_completion(sre i_q/a> *underflow = 0;
 748}
 810
cmnd_slisa_emptlhref="+code=scslisa_emptl" clfscsi_log_complework_q/a> *underflow = 0;
 748}
s> 772EXPORT_SYMBOLgee_* @seode=scsi_eh_restore_cmngee_* @se" cls"sref">underflow = 0;
 814
 775/**
 756         * command.
 757sspan class="c="srescsi_cmnd * This fTURent">         * command.
 778ent">         * command.
 779 * Return value:
 780<<<<0 - Dmmand meoutady. 1 - Dmmand NOToutady.omment"> * Return value:
 761 */
 788static cmnan ode=scsi_eh_restore_cmnan " cl>">scsi_send_eh_cmnd(struct scsi_cmnd *rtn;
cmnd) {
s="sref">scsi_can _>scsi_cTEST_UNITCCEAD a> = underflow = 0;
 796    etrl_c79(cmnd_s     int underflow = 0;
 806
 796    etrl_an ode=scsi_eh_res etrl_an ="li:class="sref">cmnd) {
 798sdevsi_int san _>sense_buffer << 5 & 0xe0);
 748}
 798        SCSI3d" class="sref">s         printk(&q +co scmd:x#37;p, timeleft: %ld\n",
="sref">scsi_do         __func__, s     int timeleft));
 742
s     int cmnd) {
s   SUCCESS a> = cmnd) {
="L739"> 739    etrl_c79(rtn;
>>>>>>>>go* T96"> 796    etrl_an ode=scsi_eh_res etrl_an ="liss="sref">timeleft));
ne" name="L775"> 775FALLTHRU> */
scmd, cmnd) {
rpan cl="sref">underflow = 0;
cmnd) {
rpan cl1"sref">underflow = 0;
 748}
 748}
 814
 775/**
 756="Ldmmandsn re respoformat     ment">reco>/*y.omment"> * Return value:
 757ss__<_lisaclas>
reco>/*y.omment"> * Return value:
 778 * @odes tosawhichL="commne"> mcommment">reco>/*yomment"> * Return value:
 779 * @odes tosawhichL re finiscedomment"> * Return value:
 780 * Return value:
 761omment"> * Return value:
 762         * command.
 753<<<         * command.
 774<<<         * command.
 775< << re ="commfaili4 * Tent"work_q> * @mcoment">         * command.
 786         * command.
 777> */
 788static cmnaque_dmmandsode=scsi_eh_restore_cmnaque_dmmands" cl>">scsi_send_eh_cmnd *scsi_c__<_lisa/a> * 810
>>>>>>>>>>>>>>>>">scsi_send_eh_cmnd *scsi_cwork_q/a> * */
>>>>>>>>>>>>>>>>">scsi_send_eh_cmnd *scsi_cre i_q/a> * 788sttrl_stuhref="+code=quearl_stu=scmcn"/pre>aaa50935832c8c05dd3c746_3/10ers>ss="comment"> */
cmnd) {
scsi_send_eh_cmnd(struct scsi_cmnd *scsi_ce=ne/a> *scmd);
scsi_send_eh_cmnd(str->) {
) {
62 href="dri9ers/scsi/9cs="sref5si37/8e/0Endsnwhichent">         /0Endcsi/>rtn;
         /0E> csi/>rtn;
ssi/7si37/8e/0Eof thrma ent">         /0Eofcsi/ft));
scsi_send_eh_cmnd(struct swork_q cl951lassne" namerpan cls="sr_eh_cmnd *f="dri10e2s/scsi/10esi_error.c#L792" id="L710esi>10es="linea href="+e=nede=rd" class="sref">swork_q/a> *) {
62 href="dri9ers/scsi/9cs="sref8si37/8e/0E777>(str->scmd 764        ) {
62 href="dri9ers/scsi/9cs="sref9si37/8e/0E="+__<_lisa=scmdne" nam/0E="csi/p; 0xe0);
 7>re>  797
sdevsi_int  764         &a_RECOEH_CANCEL_CM"a> = 35832c8c05ref="+work_q=scmdass="co05ref>re>*/
scsi_cre i_q/a> *scsi_cre i_q/a>>10ese" nsref"> class="sref">sdevsi_int  = 91" id="L7ref="+re i_q=scms="sref"L7ref>re>> 810
sdevsi_int  = e/a> *re>;,
sdevsi_int  = csi37/8e/0 href="+e=nede=r" class=/0 hr>re> 748}
re>> 814
 766(swork_q/a> *}
 764        ssi17si37/8e/0cscmnentrl=scml" class="/0csc>re>nd) {

lass="sre=/a>}
/0ANC>re>ft));
sref">EXPORT_SYMBOLfinisclasdode=scsi_eh_restore_cmnfinisclasd" clfscsi_log_completion(sre i_re>9si37/8e/0href="+code=scmds="sref"/0hre>re>> 810
sre i_re2a> *contrmuetn" clasre 78>re 7t));
 766 * class="sref">scmdcmnd_slisa_emptlhref="+code=scslisa_emptl" clfscsi_log_complework_re 35832c8c05="L790" cl92s="line" nam05="L>re */
re  = 0;
 *re > 742
cmnd_slisa_emptlhref="+code=scslisa_emptl" clfscsi_log_complework_re csi37/8e/0ref="+m"> =scmdstn" clas/0ref>re cmd);
re >rtn;
re  = 0;
>>>re d.
 7re 9si37/8e/0">&q7;p, timeleftne" nam/0">&>re e:
>>>>>>3" id=" id="L789" cl8c#L796" id="L796" cl99s="line" name="L786"> 7re3a> *re h:
>>>>>>3" id=="L783" cl89s="line" name="L753"> 753sre 35832c8c05"+code=result"dstn" clas05"+c>re e:
re e:
 *="Lent"de=res was"* actu,mentn justre csi37/8e/0href="+code=scmdtn" clas/0hre>re d.
 777="Lent"de=res was"* actu,mentn justre 6si37/8e/0a>        < 815        mwe ent'e wanmalimeosre 7si37/8e/094name=a> 753sre 8si37/8e/0per levelment">         /0per>re e:
static cmnaque_dmmandsode=scsi_eh_restore_cmnaque_dmmands" cl>">scsi_send_eh_cmnd *scsi_cwork_q4a> *re"+t));
 741scmdlisa_hetd/a> *scsi_cre ire"35832c8c05somd, justspan class="co05som>re"/span>
re"/a>) {
scsi_send_eh_cmnd(struct scsi_cmnd *scsi_ce=4e/a> *re"> 742
 "L79_cmndcode=scslisa_emptl" clfscsi_log_complework_re4csi37/8e/0eissomdc*);
 796 re"5si37/8e/0ef="+on ow">de=rtn" clas/0ef=>re">rtn;
re" 771}
 766(se=ne/a> *swork_q/a> *ssi47si37/8e/0>>>>>>>>contrmuetn" clas/0>>>>re"nd) {
="L7717"> 717            scmdcmneflag, &SCSIf="+lisa_hetd" class="sref">scsi_cre ire"8si37/8e/0="L797" cl94s="line" nam/0="L>re"ft));
u/0ef=>re"> 810
scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  abortd="L7md:ode=printk" class="sref">printk( *rel9t));
SCSI3d" class="s0x  >>>>>>>>>>>>>>>>>>>>>>>class="sne" name="L723">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(scsi_cwork_q535832c8c05="L790" cl95s="line" nam05="L>rel*/
sdevsi_int uL7ef=>rel> 810
sdevsi_int  764        scmd->scmd->ion( &a_RECOEH_CANCEL_CM"a> =  *rel;,
="L739"> 739        int ssi5csi37/8e/0mngee_* @se" cls"sref">u/0mng>rel*/
 813 717            scmdcmneflag, &SCSs/a> &a_RECOEH_CANCEL_CM"a> =  &a_RECOEH_CANCEL_CM"a> =  775sref">EXPORT_SYMBOLfinisclasdode=scsi_eh_restore_cmnfinisclasd" clfscsi_log_completion(sre i_re57si37/8e/0* Tdmmandment">         /0* T>relnd) {
sre i_re58si37/8e/0 This fTURent">         /0 Th>relft));
 766 * class="sref">scmd 766 "L79_cmndcode=scslisa_emptl" clfscsi_log_complework_re59si37/8e/0"> 778ent">         /0"> >rel> 810
sre i_re6a> * * Retren c>ren /
scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  abortd="ode=printk" class="sref">printk( * Ret05NOT>ren*/
printk( 7>ren> 810
printk( *ren;,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(scsi_cwork_q6csi37/8e/0"L793" cl96s="li class="/0"L7>ren*/
u/0d"0>ren> 814
);
u/0ren = 0;
 788 766 "L79_cmndcodea>(se=ne/a> *sense_bufferren8md);
 <&l/0 TI>renp; 0xe0);

re=d.
r.c#L756STARgt; 756re=e:
 756 * re=5si37/8e/0+c  SUCCESS or" :class="/0+c >re=d.
 780<<<<0 - Dmmand meoutady. re=6si37/8e/0+ etrl_c79de=r--cn" clas/0+ e>re=d.
re=7/
scsi_cre i_q/a>>10ese" nsref"> clas name="L788"> 788static cmnan ode=scsi_eh_restore_cmnan " cl>">scsi_send_eh_cmnd(struct scsi_cre=8si37/8e/0FALLTHRU>re=> 810
refscsi_log_completionrefscsi_ 810s="sref">s="sref">scsiSTARgtSTOPid="L790" cl970=TARgtSTOP href=6f=6f=6f=1si_cTEST_UNITCCEAD a> = rpan cl="sref">ure="L>re="; 0xe0);
 764        v" cl_rameardhref=l97s="line" name"witchL6 class="sref">ssi891" id="L7="L731">rpan cl1"sref">uL7="L>re=> 810
i> * = re=3; 0xe0);
re=*/
i> *<=&lL722sc="drivers/scsi/ii> *<++="+code=scsi_cmnd" class="sref">scsi_cre85si37/8e/0="L794" cl98s="line" nam/0="L>re=> 814
 798sdevsi_int refscsi_log_completionrefscsi_ 810ode=scmd" class="sre8csi_error.c#L747" id="L787" cl84s="line" name=ame="L764"> 764        sense_buffer 775reco>/*y.omment"> * Ret/0>re>re=nd) {
="L739"> 739        int scsi_cre88si37/8e/0>reco>/*y.omment"> * Ret/0>re>re=ft));
reco>/*yomment"> * Ret/0">r>re= = 0;
 * * Retree f>ree /a> = 0;
 * Ret05"+ >ree> 810
 761omment"> * RetL7"> >ree = 0;
          hecr>ree3; 0xe0);
         /0nds>ree*/
         /0and>reed.
r.ccl9ssSTARgt; 779 * @odes tree6si37/8e/0q> * @mcoment">         /0q> >reed.
 780<<<<0 - Dmmand meoutady. re97si37/8e/0 of thrma ent">         /0 of>reee:
>>>>>>3" id=" id="L789" cl8c#L796" id="L796" cl99s="line" name="L786"> 7re98si37/8e/0 777>>>>>>>3" id=="L783" cl89s="line" name="L753"> 753sre99si37/8e/0f="+__<_lisa=scmdne" nam/0f=">reee:
 753sr1/a> * *10h:
 r1935832c8c01dd3c746_3/10ers>ss="comme1t"> *10d.
 line"#L795" dumeameort7ine" f="+itializd="L789" cls    iwed,c#L759" id="L799" cl95s="line" name="L779"> r1925832c8c01d> 761omment"> * RetL1">cmn10e:
 753sr1ne/a> *sc10d.
) {
scsi_cre i_q/a>>10ese" f"> clas name="L788"> 788sS10esHs="sref">scmd-S10esHs="mnan " cl>">scsi_send_ss="sref">scmd-s>scsi_cwork_1f5si37/8e/1Endsnwhichent">         /1Endcs10> 814
static cmnaque_dmmandsode=scsi_eh_restore_cmnaque_dmmands" cl>">scsi_send_eh_cmnd *scsi_cwork_1/6si37/8e/1E> * @mcoment">         /1E> cs10>rtn;
 741scmdlisa_hetd/a> *scsi_cre ir1/7si37/8e/1Eof thrma ent">         /1Eofcs1/ftss1f8si37/8e/1E777>scsi_send_eh_cmnd(struct r_eh_cmnd(struct ">r_eh_href="+code=scsi_cmnd" class="sref">scsi_cmnd *scsi_ce1f9si37/8e/1E="+__<_lisa=scmdne" nam/1E="cs109 797
scsi_send_eh_cmnd(str-> * 77935832c8c01ref="+work_q=scmdass="co01ref>r1>*/
">scsi_send_ss="e" name="Lr.c#L793" id="L710esi>ss="e" name="Lr.c#L7 class="sref">sdevsi_mnd(str->scmd-s>ss1>91" id="L1ref="+re i_q=scms="sref"L1ref>r1>> 810
r_eh_cmnd(struct ">r_eh_href="L798" cl96s="lincUL_error.c#L753" icUL_ href="+co>(str-&/a>;
r1>;,
1" cl91s="line" name" name="L766"> class="sref">sdevsi_int se=ne/a> *swork_q/a> *(str-&/a>;
r11*/
 764        sdevsi_int  = 5si37/8e/1r1>> 814
10e"L79_href="+code=EXPORT_SYMBOLe"L79_href= class="sref">sdevsi_int ss1>6si37/8e/1="L895" cl91s="lie" name/1="L>r1>>rtn;
r_eh_cmnd(struct ">r_eh_href="L798" cl96s="lin_int  = 7si37/8e/1cscmnentrl=scml" class="/1csc>r1>nd) {
 = 8si37/8e/1ANCEL_CM"=scml"|cmnd/1ANC>r1>ft));
9si37/8e/1href="+code=scmds="sref"/1hre>r11p; 0xe0);
r1 7t));
r_eh_cmnd(struct ">r_eh_href=="+co>(str-&/a>;
r12ft));
scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  Sl9sd="LSTARgt;printk( =scmdstn" clas/1ref>r12*/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(sense_bufferr1 >rtn;
r12>rtn;
scsi_cre i_q/a>>10ese" nsref"> clascode=scsi_cmnd"f">r_eh_cmnd(struct ">r_eh_href==l97s="line" name"witchL6 class="sref">ss1 7si37/8e/1>>>>>>>>contrmuetn" clas/1>>>>r12nd) {
sdevsi_mnd(str-> &a_RECOEH_CANCEL_CM"a> = !ri9ers/scsi/9cs>10ese" nor.c#L762" id="L792" cl9ss="line"s="sref">sdevsi_">r_eh_cmnd(struct ">r_eh_href==l97s="line" name"witchL6 class="sref">ss1 9si37/8e/1">&q7;p, timeleftne" nam/1">&>r12> 810
16" id="L896" cl91s="line" name="L766"> 766ss13a> *r139t));
se=ne/a> *swork_q/a> *ss1 35832c8c01"+code=result"dstn" clas01"+c>r13*/
 764        (str-&/a>;
r13> 810
10ese" #L748" id="L798" cl94s="line" name="L718">sref">EXPORT_SYMBOLfinisclasdode=scsi_eh_restore_cmnfinisclasd" clfscsi_log_completion(sre i_r1 e/a> *r13*/
ss1 6si37/8e/1a>        scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798  7s="line" name"witchL6 class="sref">ss1 7si37/8e/194SCSI3d" class="sref">s  STARgt;printk(         /1per>r13ft));
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(sense_buffersense_buffer *r1"+t));
sense_buffersense_bufferr1"/a>) {
cmnd_slisa_emptlhref="+code=scslisa_emptl" clfscsi_log_complework_r14e/a> *r14 748}
r14 748}
de=rtn" clas/1ef=>r1">rtn;
r14d.
>>>>>>>contrmuetn" clas/1>>>>r14e:
 779 * @odes tr1"8si37/8e/1="L797" cl94s="line" nam/1="L>r14e:
 780<<<<0 - Dmmand meoutady. r1"9si37/8e/1ef="+re i_q=scms"sref">u/1ef=>r14e:
>>>>>>3" id=" id="L789" cl8c#L796" id="L796" cl99s="line" name="L786"> 7r15a> *r15h:
>>>>>>3" id=="L783" cl89s="line" name="L753"> 753sr1535832c8c01="L790" cl95s="line" nam01="L>r15e:
uL1ef=>r15e:
 r15e/a> *r15d.
u/1mng>r15d.
 775>>ne" name="L753"> 753sr157si37/8e/1* Tdmmandment">         /1* T>r15e:
         /1 Th>r15*/
 788sS10esHs="sref">scmd-S10esHs="mnan " cl>">scsi_send_ss="sref">scmd-s>scsi_cwork_159si37/8e/1"> 778ent">         /1"> >r1l> 810
">scsi_send_eh_cmnd *scsi_cwork_16a> * * Retr1n c>r1n /
">scsi_sendf">scmdlisa_hetd/a> *scsi_cre ir1635832c8c01NOToutady.omment"> * Ret01NOT>r16/span>
 7>r16/a>) {
scsi_send_eh_cmnd(struct (structbdrr_eh_href="+code=scsi_cmnd" class="sref">scsi_cmnd *scsi_ce16e/a> *r16);
scsi_send_eh_cmnd(str->r1n*/
 796 r165si37/8e/1d"0d"0d"0d"0d"0}"sref">u/1d"0>r16>rtn;
u/1r16 771}
sdevsi_mnd(str->scmd-s>ss167si37/8e/1="L796" cl96s="line" nam/1="L>r16ft));
scsi_sendbdrr_eh_cmnd(structbdrr_eh_href="L798" cl96s="lincUL_error.c#L753" icUL_ href="+co>(str-&/a>;
1" cl91s="line" name" name="L766"> class="sref">sdevsi_int se=ne/a> *swork_q/a> *(str-&/a>;
 <&l/1 TI>r16> 810
 764        ss17a> *scsi_sendbdrr_eh_cmnd(structbdrr_eh_href="L798" cl96s="lin_int  = r17*/
 = r17> 810
 *(structbdrr_eh_href=="+co>(str-&/a>;
r17 = 0;
scsi_send">scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  Sl9sd="LBDRLt;printk(
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(printk(r17> 810
scsi_send_mnd(str->sense_buffer *rpan cl="sref">ur1="L>r18  797
sdevsibdrr_eh_cmnd(structbdrr_eh_href=ef">sense_buffer="L739"> 739        int ss1891" id="L1="L731">rpan cl1"sref">uL1="L>r1=> 810
sdevsi_mnd(str-> &a_RECOEH_CANCEL_CM"a> =  *r18;,
 &a_RECOEH_CANCEL_CM"a> = r1=*/
sdevsibdrr_eh_cmnd(structbdrr_eh_href==l97s="line" name"witchL6 class="sref">ss185si37/8e/1="L794" cl98s="line" nam/1="L>r1=> 814
16" id="L896" cl91s="line" name="L766"> 766ss186si37/8e/1> 775se=ne/a> *swork_q/a> *ss187si37/8e/1>reco>/*y.omment"> * Ret/1>re>r1=nd) {
 764        ss188si37/8e/1>reco>/*y.omment"> * Ret/1>re>r1=ft));
sref">EXPORT_SYMBOLfinisclasdode=scsi_eh_rest7s="line" name"witchL6 class="sref">ss189si37/8e/1">reco>/*yomment"> * Ret/1">r>r18> 810
(sre i_r19a> * * Retr1e f>r19 /
 * Ret01"+ >r19*/
 761omment"> * RetL1"> >r19> 810
ss1ee/a> *          1ecr>r19;,
scsi_send">scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  BDRode=printk" class="sref">printk(         /1nds>r19*/
printk(         /1and>r19> 814
printk( * @mcoment">         /1q> >r19>rtn;
>>>>>>>class="sne" name="L723">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(printk(         /1 of>r19nd) {
>>>>>>>class="s_mnd(str->sense_buffer>}
 * *20 /a> = 0;
 *20> 810
cmnd_slisa_emptlhref="+code=scslisa_emptl" clfscsi_log_complework_r2925832c8c02d> 761omment"> * RetL2">cmn20 = 0;
sc203; 0xe0);

         /2Endcs20d.
 779 * @odes tr2/6si37/8e/2E> * @mcoment">         /2E> cs20d.
 780<<<<0 - Dmmand meoutady. r2/7si37/8e/2Eof thrma ent">         /2Eofcs20e:
>>>>>>3" id=" id="L789" cl8c#L796" id="L796" cl99s="line" name="L786"> 7r2f8si37/8e/2E777>>>>>>>3" id=="L783" cl89s="line" name="L753"> 753sr2f9si37/8e/2E="+__<_lisa=scmdne" nam/2E="cs20e:
 753sr21a> * 779 r2>35832c8c02ref="+work_q=scmdass="co02ref>r21d.
 753sr2>91" id="L2ref="+re i_q=scms="sref"L2ref>r21e:
 *r2>;
 788sS10esHs="sref">scmd-S10esHs="mnan " cl>">scsi_send_ss="sref">scmd-s>scsi_cwork_21csi37/8e/2 href="+e=nede=r" class=/2 hr>r21*/
">scsi_send_eh_cmnd *scsi_cwork_2>5si37/8e/2r2>> 814
static cmnaque_dmmandsode=scsi_eh_restore_cmnaque_dmmands" cl>">scsi_sendf">scmdlisa_hetd/a> *scsi_cre ir2>6si37/8e/2="L895" cl91s="lie" name/2="L>r2>>rtn<97s="line" name"witchL6 class="sref">ss2>7si37/8e/2cscmnentrl=scml" class="/2csc>r2>nd) {
">scsi_sendLIST_HEAamp;8si37/8e/2ANCEL_CM"=scml"|cmnd/2ANC>r2>ft));
">scsi_sendLIST_HEAamp; "L79_cmndcode=scslisa_emptl" clfscsi_log_complework_r2>9si37/8e/2href="+code=scmds="sref"/2hre>r21p; 0xe0);
r2 7t));
cmnd_slisa_emptlhref="+code"+me="L766"> 766tmp_cmndcode=scslisa_emptl" clfscsi_log_complework_r2 35832c8c02="L790" cl92s="line" nam02="L>r22/spanf">sense_bufferr22> 810
 766tmp_cmndcode==l97s="line" name"witchL6 class="sref">ss22e/a> *r22;,
scsi_sende"srefscsi_log_completionscsi_send_eh_cmnd(struct  =scmdstn" clas/2ref>r22*/
 796 r2 5si37/8e/2href="+code=scmdtn" clas/2hre>r22> 814
(structi hrefscslisa_emptl" clfscsi_log_complework_r2 6si37/8e/2"+code=SUCCESS" cn" clas/2"+c>r22 = 0;
>>>r22nd) {
scsi_send_eh_cmnd(struct 1" cl91s="line" name766"> class="sref">sdevsitmp_cmndtmp_cmndcode.name">scsi_sende"srefscsi_log_completionswork_q/a> *EXPORT_SYMBOLfinisclasdode=scsi_eh_res=scslisa_emptl" clfscsi_log_complework_r2 9si37/8e/2">&q7;p, timeleftne" nam/2">&>r22p; 0xe0);
r239t));
scsi_send">scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  Sl9sd="Ltarget resetrode=printk" class="sref">printk(r23*/
SCSI3d" class="same=arget ref">d>>>>>>>>>>>>>>>>lass="sref">printk(r23> 810
>>>>>>>class="sne" name="L723">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(sense_buffer *EXPORT_SYMBOLfinisclasdode=scsi_eh_res=scslisa_emptl" clfscsi_log_complework_r2 csi37/8e/2href="+code=scmdtn" clas/2hre>r23*/
="L739"> 739        int scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  Target resetode=printk" class="sref">printk(        >799" cl9ss="line" name="L72ref="+dnarget:rode=printk" class="sref">printk(>799" cl9ss="line" name="L7ref">d>>>>>>>>>>>>>>>>lass="sref">printk(         /2per>r23ft));
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(sense_buffer16" id="L896" cl91s="line" name="L766"> 766 766tmp_cmndcodea href="+e=nede=rd" class="sref">swork_q/a> *ss24a> *r24 /
(struct_int_i_ref">EXPORT_SYMBOLfinisclasdode=scsi_eh_res=s!"line" name="L729i_cmnd(structi hrefc7s="line" name"witchL6 class="sref">ss2435832c8c02somd, justspan class="co02som>r24*/
r24ft));
="L739"> 739        int scsi_cr24csi37/8e/2eissomdc* 766swork_q/a> * 766 "L79_cmndcode=scslisa_emptl" clfscsi_log_complework_r2"5si37/8e/2ef="+on ow">de=rtn" clas/2ef=>r24> 814
r24>rtn;
sref">EXPORT_SYMBOLfinisclasdode=scsi_eh_rest9="dri9ers/scsi/d" clfscsi_log_completion(sre i_r247si37/8e/2>>>>>>>>contrmuetn" clas/2>>>>r24nd) {
sre i_r248si37/8e/2="L797" cl94s="line" nam/2="L>r24ft));
u/2ef=>r24> 810
 766swork_q/a> *cmnd_slisa_emptlhref="+code=scslisa_emptl" clfscsi_log_complework_r25a> *r25 /
uL2ef=>r25ft));
r25;,
<<<.c#L762" id="L792" cl9ssode=<< 766 "L79_cmndcodend_eh_cmnd" class=scmd" class="sref">se=ne/a> *(sense_bufferu/2mng>r25d. 775         /2* T>r25e:
         /2 Th>r25e:
 780<<<<0 - Dmmand meoutady. r259si37/8e/2"> 778ent">         /2"> >r25e:
>>>>>>3" id=" id="L789" cl8c#L796" id="L796" cl99s="line" name="L786"> 7r26a> * * Retr2n c>r26h:
>>>>>>3" id=="L783" cl89s="line" name="L753"> 753sr2635832c8c02NOToutady.omment"> * Ret02NOT>r26d.
 7>r26/a>) pan>
 788sS10esHs="sref">scmd-S10esHs="mnan " cl>">scsi_send_ss="sref">scmd-s>scsi_cwork_26e/a> *r26;,
">scsi_send_eh_cmnd *scsi_cwork_26csi37/8e/2"L793" cl96s="li class="/2"L7>r26*/
">scsi_sendf">scmdlisa_hetd/a> *scsi_cre ir265si37/8e/2d"0d"0d"0d"0d"0}"sref">u/2d"0>r26>rtn<97s="line" name"witchL6 class="sref">ss266si37/8e/2u/2r26 771}
scsi_send_eh_cmnd(struct (structchan__eh_href="+code=scsi_cmnd" class="sref">scsi_cmnd *scsi_ce267si37/8e/2="L796" cl96s="line" nam/2="L>r26nd) {
">scsi_sendLIST_HEAamp; "L79_cmndcode=scslisa_emptl" clfscsi_log_complework_r2n8si37/8e/2res etrl_an ="li:class="/2res>r26> 797
 *scsi_ce269si37/8e/2 TIMEOUT=NUL="/a> <&l/2 TI>r26> 810
 796 r27a> *r27*/

r27e:
 *<<<,7="l if so, skipccccccc*>="Lent"de=res was"* actu,mentn justr2=5si37/8e/2+c  SUCCESS or" :class="/2+c >r27d.
 753sr2=6si37/8e/2+ etrl_c79de=r--cn" clas/2+ e>r27d.
r27ft = 0sc="drivers/scsi/_"anneld="L896" cl91s=channel <"L798" cl96s="liness="sref">scmd-s>++=l97s="line" name"witchL6 class="sref">ss2=9si37/8e/2"+code=SUCCESS" :class="/2"+c>r27> 810
(structchan__eh_href="L798" cl96s="lincUL_error.c#L753" icUL_ href="+co>(str-&/a>;
rpan cl="sref">ur2="L>r28  797
1" cl91s="line" name" name="L766"> class="sref">sdevsi_int se=ne/a> *swork_q/a> *ss2835832c8c02ine" namedefault:class="02ine>r28*/
 ="L798" cl96s="lin_int__"anneld="L896" cl91s=_int__"annelref">EXPORT_SYMBOLfinisclasdode=scsi_eh_res==l97s="line" name"witchL6 class="sref">ss2891" id="L2="L731">rpan cl1"sref">uL2="L>r2=> 810
(structchan__eh_href="L798" cl96s="lin_eh_cmnd(struct  *r28;,
 = r2=*/

 775<< 753sr287si37/8e/2>reco>/*y.omment"> * Ret/2>re>r28e:
reco>/*y.omment"> * Ret/2>re>r2=ft));
reco>/*yomment"> * Ret/2">r>r28> 810
 * * Retr2e f>r29 /a> = 0;
 * Ret02"+ >r29*/
(structchan__eh_hreff="+lisa_hetd" class="sref">scsi_cre ir2991" id="L2"> 761omment"> * RetL2"> >r29> 810
 *          2ecr>r29;,
scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  Sl9sd="LBRST9chan:ode=printk" class="sref">printk(         /2nds>r29*/
d>>>>>>>>>>>>>>>>>>>>>>>>class="sne" name="L723">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(printk(         /2and>r29> 814
cref">sense_buffer * @mcoment">         /2q> >r29>rtn;
EXPORT_SYMBOL(structchan__eh_hreffef">sense_buffer         /2 of>r29nd) {
="L739"> 739        int ss298si37/8e/2 777>16" id="L896" cl91s="line" name="L766"> 766se=ne/a> *swork_q/a> *ss299si37/8e/2f="+__<_lisa=scmdne" nam/2f=">r29> 810
 ="L798" cl96s="lin_int__"anneld="L896" cl91s=_int__"annelref">EXPORT_SYMBOLfinisclasdode=scsi_eh_res==l97s="line" name"witchL6 class="sref">ss3/a> * *309t));
ss="comme3t"> *30*/
sref">EXPORT_SYMBOLfinisclasdode=scsi_eh_restcslisa_emptl" clfscsi_log_complework_r3925832c8c03d> 761omment"> * RetL3">cmn30> 810
 href="dra href="code=scsi_cmnd"d" clfscsi_log_completion(sre i_r3ne/a> *sc30;,
sre i_r33csi37/8e/3E3) {
 766swork_q/a> *sre i_r335si37/8e/3Endsnwhichent">         /3Endcs30> 814
 766 "L79_cmndcode=scslisa_emptl" clfscsi_log_complework_r3/6si37/8e/3E> * @mcoment">         /3E> cs30>rtn;
         /3Eofcs30nd) {
>ss3f9si37/8e/3E="+__<_lisa=scmdne" nam/3E="cs30> 810
scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  BRSTode=printk" class="sref">printk( * 779
d>>>>>>>>>>>>>>>>lass="sref">printk(35832c8c03ref="+work_q=scmdass="co03ref>r31*/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(printk(91" id="L3ref="+re i_q=scms="sref"L3ref>r31> 810
 href="ds/scsi/9csi_err_"anneld="L896" cl91s=channelcref">sense_buffer *r31;,
r31*/
r3>> 814
<<<.c#L762" id="L792" cl9ssode=<< 766 "L79_cmndcodend_eh_cmnd" class=scmd" class="sref">se=ne/a> *(sense_buffer<9ers/scsi/9csi_error.r316si37/8e/3="L895" cl91s="lie" name/3="L>r3>>rtn<= 0;
8si37/8e/3ANCEL_CM"=scml"|cmnd/3ANC>r31e:
9si37/8e/3href="+code=scmds="sref"/3hre>r31e:
 *contrmuetn" clasr3 78>r32h:
>>>>>>3" id=="L783" cl89s="line" name="L753"> 753sr3 35832c8c03="L790" cl92s="line" nam03="L>r32d.
>>>>>>3" id=="L783" cl89s="line" name="L753"> 753sr3 91" id="L3 href="+code=scmdne" namL3 hr>r32e:
 *r32;
static cmnaque_dmmandsode=scsi_eh_restore_cmnaque_dmmands" cl>">scsi_send_eh_cmnd *scsi_cwork_3 csi37/8e/3ref="+m"> =scmdstn" clas/3ref>r32*/
">scsi_sendf">scmdlisa_hetd/a> *scsi_cre ir3 5si37/8e/3href="+code=scmdtn" clas/3hre>r32>rtn<97s="line" name"witchL6 class="sref">ss3 6si37/8e/3"+code=SUCCESS" cn" clas/3"+c>r32 771}
scsi_send_eh_cmnd(struct scsi_cmnd *scsi_ce3 7si37/8e/3>>>>>>>>contrmuetn" clas/3>>>>r32nd) {
">scsi_sendLIST_HEAamp; "L79_cmndcode=scslisa_emptl" clfscsi_log_complework_r3 8si37/8e/3="L797" cl92s="line" nam/3="L>r32ft));
 796 r3 9si37/8e/3">&q7;p, timeleftne" nam/3">&>r32p; 0xe0);
r339t));
cmnd_slisa_emptlhref="+code==l97s="line" name"witchL6 class="sref">ss3 35832c8c03"+code=result"dstn" clas03"+c>r33*/
scsi_send_eh_cmnd(struct 1" cl91s="line" name766"> class="sref">sdevsief">cmnd_slisa_emptlhref="+code>>>>>>>>>>>>>>>>>ccle"srefscsi_log_completionss3 91" id="L3ref="+code=scmdstn" clasL3ref>r33> 810
swork_q/a> * *r33*/
scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  Sl9sd="LHRST>>>>>>>>>>>>>>>e0);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(sense_buffer        EXPORT_SYMBOLfinisclasdode=scsi_eh_res=ef">sense_buffer         /3per>r33ft));
="L739"> 739        int ss3 9si37/8e/3cccccccc*cmnd_slisa_emptlhref="+code"+me="L766"> 766 "L79_cmndcode=scslisa_emptl" clfscsi_log_complework_r34a> *r34 /
ss3435832c8c03somd, justspan class="co03som>r34*/
16" id="L896" cl91s="line" name="L766"> 766se=ne/a> *swork_q/a> *ss3491" id="L3_bd" otsse tell the hostL3_bd>r34> 810
sref">EXPORT_SYMBOLfinisclasdode=scsi_eh_rest"code=scsi_cmnd"d" clfscsi_log_completion(sre i_r34e/a> *r34;,
ss3"5si37/8e/3ef="+on ow">de=rtn" clas/3ef=>r34> 814
scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 798        SCSI3d" class="sref">s  HRSTode=printk" class="sref">printk(r34>rtn;
>>>>>>>>>>>>>>>lass="sref">printk(>>>>>>>contrmuetn" clas/3>>>>r34nd) {
>>>>>class="sne" name="L723">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>cclass="sref">cmurr779(sense_bufferu/3ef=>r34> 810
r35 /
<<<.c#L762" id="L792" cl9ssode=<< 766 "L79_cmndcodend_eh_cmnd" class=scmd" class="sref">se=ne/a> *(sense_bufferuL3ef=>r35ft));
r35d.
u/3mng>r35d.
 <<< that2ref=97" >>>>>>3" id=="L783" cl89s="line" name="L753"> 753sr356si37/8e/3> 775>>>>>>3" id=="L783" cl89s="line" name="L753"> 753sr357si37/8e/3* Tdmmandment">         /3* T>r35e:
         /3 Th>r35e:
static cmnaque_dmmandsode=scsi_eh_restore_cmnaque_dmmands" cl>">scsi_send_eh_cmnd *scsi_cwork_359si37/8e/3"> 778ent">         /3"> >r35> 810
">scsi_sendf">scmdlisa_hetd/a> *scsi_cre ir36a> * * Retr3n c>r36h:ss3635832c8c03NOToutady.omment"> * Ret03NOT>r36*/
scsi_send_eh_cmnd(struct scsi_cmnd *scsi_ce3691" id="L3> 761 *r36;,
16" id="L896" cl91s="line" name="L766"> 766se=ne/a> *swork_q/a> *ss36csi37/8e/3"L793" cl96s="li class="/3"L7>r36*/
<lisa_hetd/a/a><<> *printk(u/3d"0>r36> 814
sense_bufferu/3r36>rtn;
<lisa_hetd/a/a><<> *(sre i_r367si37/8e/3="L796" cl96s="line" nam/3="L>r36nd) {
ode=sc="drivers/scsi/="linEH_CANCEL_CMamp;ss368si37/8e/3res etrl_an ="li:class="/3res>r36ft));

 <&l/3 TI>r36e:
 753sr37a> *r37*/
r37> 810
sref">EXPORT_SYMBOLfinisclasdode=scsi_eh_rest"code=scsi_cmnd"d" clfscsi_log_completion(sre i_r3=e/a> *sre i_r3=5si37/8e/3+c  SUCCESS or" :class="/3+c >r37d.r37 = 0;
 _eh - determde=rli9el89s="l s&gnameb99ref="+dfastre9csi_error.c#L785" id="L795" cl98s="line" r3=9si37/8e/3"+code=SUCCESS" :class="/3"+c>r37e:
 753sr38a> *rpan cl="sref">ur3="L>r38h:
 _eh"L798" cl94s="line" nohre"> _ehne" n/a>static cmnaque_dmma_error.c#L792" id="L710esi>10es="line" name">scsi_send_eh_cmnd(struct scsi_cre ir3891" id="L3="L731">rpan cl1"sref">uL3="L>r3=> 81097s="line" name"witchL6 class="sref">ss38e/a> *r38;,
lisa_hetd/>sby>ss38csi37/8e/3"L793" cl9ss="line" name/3"L7>r3=*/
ss385si37/8e/3="L794" cl98s="line" nam/3="L>r38> 814
 =  775ss387si37/8e/3>reco>/*y.omment"> * Ret/3>re>r38nd) {
requend>>>>>>>>>>>>>>>>>>>>>cclamd_flags.c#L762" id="L7amd_flagsdode=sc="drivers/scsi/REQ_FAI_FAST_TRANSPORT.c#L762" id="L7REQ_FAI_FAST_TRANSPORTa>(sre i_r388si37/8e/3>reco>/*y.omment"> * Ret/3>re>r3=ft));
ss389si37/8e/3">reco>/*yomment"> * Ret/3">r>r38> 810
requend>>>>>>>>>>>>>>>>>>>>>cclamd_flags.c#L762" id="L7amd_flagsdode=sc="drivers/scsi/REQ_FAI_FAST_DEV.c#L762" id="L7REQ_FAI_FAST_DEVa>(sre i_r39a> * * Retr3e f>r390t));
ss3935832c8c03"+ * TTUR.omment"> * Ret03"+ >r39*/
ode=sode=s7s="line" name"witchL6 class="sref">ss3991" id="L3"> 761omment"> * RetL3"> >r39> 810
scsi_cre ir3ee/a> *          3ecr>r39;,
ss39csi37/8e/3ndsnnow inent">         /3nds>r39*/
         /3and>r39> 814
ss396si37/8e/3q> * @mcoment">         /3q> >r39>rtn;
requend>>>>>>>>>>>>>>>>>>>>>cclamd_flags.c#L762" id="L7amd_flagsdode=sc="drivers/scsi/REQ_FAI_FAST_DRIVE"id="L790" cl970REQ_FAI_FAST_DRIVE"a>(sre i_r397si37/8e/3 of thrma ent">         /3 of>r39nd) {
r39ftss4/a> * *400t));
ss4935832c8c04dd3c746_3/10ers>ss="comme4t"> *40*/
 761omment"> * RetL4">cmn40e:
          4f">sc40d.
 753sr43csi37/8e/4E3) {
         /4Endcs40> 814
requend>>>>>>>>>>>>>>>>>>>>>cclamd_flags.c#L762" id="L7amd_flagsdode=sc="drivers/scsi/REQ_FAI_FAST_DEV.c#L762" id="L7REQ_FAI_FAST_DEVa>(< ||rror.c#L797" id="L797" cl99s="line" nr436si37/8e/4E> * @mcoment">         /4E> cs40>rtn;
requend>>>>>>>>>>>>>>>>>>>>>cclamd_typlisa_hetd/amd_typscsi_cre ir4/7si37/8e/4Eof thrma ent">         /4Eofcs40nd) {
sre i_r4/8si37/8e/4E777> * 779ss4>35832c8c04ref="+work_q=scmdass="co04ref>r41*/r41ft));
r41d.
r41d.
 753sr415si37/8e/4r41d.
 753sr416si37/8e/4="L895" cl91s="lie" name/4="L>r41d.
 753sr417si37/8e/4cscmnentrl=scml" class="/4csc>r41e:
 753sr418si37/8e/4ANCEL_CM"=scml"|cmnd/4ANC>r41e:
 753sr419si37/8e/4href="+code=scmds="sref"/4hre>r41e:
3" ids=Qece" name="L753"> 753sr42a> *contrmuetn" clasr4 78>r42h:
 753sr4 35832c8c04="L790" cl92s="line" nam04="L>r42d.
 753sr4 91" id="L4 href="+code=scmdne" namL4 hr>r42e:
 753sr4 e/a> *r42d.
 753sr4 csi37/8e/4ref="+m"> =scmdstn" clas/4ref>r42d.
 753sr4 5si37/8e/4href="+code=scmdtn" clas/4hre>r42d.
 753sr4 6si37/8e/4"+code=SUCCESS" cn" clas/4"+c>r42d.
>>>>>>>contrmuetn" clas/4>>>>r42ndstatic cmnaque_dmma_error.c#L792" id="L710esi>10es="line" name">scsi_send_eh_cmnd(struct scsi_cre ir4 8si37/8e/4="L797" cl92s="line" nam/4="L>r42ftss4 9si37/8e/4">&q7;p, timeleftne" nam/4">&>r42> 810
 796 r43a> *r43 /a> = 0;
r43*/

r43e:
 * 753sr4 csi37/8e/4href="+code=scmdtn" clas/4hre>r43d.
<<_onls="li/a>lisa_hetd/MEOUTa/a><<_onls="/alisa_eouteacmnentrl_safeode=scsi_eh_reslisa_e" cl84s="line" name=<lisa_hetd/a/a><<> *<==l97s="line" name"witchL6 class="sref">ss4 6si37/8e/4a>        scmcsi_error.c#L770" id="L790" cl970="line" name="L798"> 7985       SCSI3d" class="sref">s  d/a><< off" cl - reportode=printk" class="sref">printk(printk(         /4per>r43ft));
 *<==94" cl91s="line" name="L796"> 796 r439si37/8e/4cccccccc*="L739"> 739        int  796 r44a> *r44 /
r44*/r44> 810

 *r44d.
<,97" cle if thereLid ="ycling in there/9csi_error.c#L797" id="L797" cl99s="line" nr44csi37/8e/4eissomdc* 753sr4"5si37/8e/4ef="+on ow">de=rtn" clas/4ef=>r44d.
r44>rtn;
lisa_hetd/>sby>ss447si37/8e/4>>>>>>>>contrmuetn" clas/4>>>>r44nd) {
ss448si37/8e/4="L797" cl94s="line" nam/4="L>r44ft));
u/4ef=>r44e:
 753sr45a> *r45h:
 753sr4535832c8c04="L790" cl95s="line" nam04="L>r45d.
 753sr4591" id="L4ef="+work_q=scms"sref">uL4ef=>r45e:
 *r45;,
ode=s= 0xff00ffff94" cl91s="line" name="L796"> 796 r45csi37/8e/4mngee_* @se" cls"sref">u/4mng>r45*/
="L739"> 739        int  796 r455si37/8e/4="L794" cl95s="line" nam/4="L>r45> 814
ss456si37/8e/4> 775
         /4* T>r45e:
 753sr458si37/8e/4 This fTURent">         /4 Th>r45e:
 778ent">         /4"> >r45> 810
 =  * * Retr4n c>r460t));
ss4635832c8c04NOToutady.omment"> * Ret04NOT>r46*/
ss4691" id="L4> 761ss46e/a> *r46;,
r46d.
u/4d"0>r46d.
u/4r46d.
 753sr467si37/8e/4="L796" cl96s="line" nam/4="L>r46e:
r46ft));
="L739"> 739        int  796 r469si37/8e/4 TIMEOUT=NUL="/a> <&l/4 TI>r46> 810
 *r47d.

r47e:
 *r47d.
 753sr477si37/8e/4res etrl_an ="liss="sref/4res>r47e:
ss4=9si37/8e/4"+code=SUCCESS" :class="/4"+c>r47> 810
 796 r48a> *rpan cl="sref">ur4="L>r480t));
ss4835832c8c04ine" namedefault:class="04ine>r48*/
 796 r4891" id="L4="L731">rpan cl1"sref">uL4="L>r48ft));
r48;,
ss48csi37/8e/4"L793" cl9ss="line" name/4"L7>r48*/
 796 r485si37/8e/4="L794" cl98s="line" nam/4="L>r48> 814
ss486si37/8e/4> 775
reco>/*y.omment"> * Ret/4>re>r48e:
 753sr488si37/8e/4>reco>/*y.omment"> * Ret/4>re>r48e:
reco>/*yomment"> * Ret/4">r>r48e:
 * * Retr4e f>r49h:
 * Ret04"+ >r49d.
 753sr4991" id="L4"> 761omment"> * RetL4"> >r49e:
 *          4ecr>r49;,
 796 r49csi37/8e/4ndsnnow inent">         /4nds>r49*/
ss495si37/8e/4andsnwhichent">         /4and>r49> 814
 * @mcoment">         /4q> >r49d.
         /4 of>r49e:
 753sr498si37/8e/4 777>="L739"> 739        int  796 r5/a> * *500t));
ss5935832c8c05dd3c746_3/10ers>ss="comme5t"> *50*/
ode=sode=s7s="line" name"witchL6 class="sref">ss5925832c8c05d> 761omment"> * RetL5">cmn50> 810
ss5935832c8c05dcrips="scent">          5f">sc50;,

) {
         /5Endcs50d.
 * @mcoment">         /5E> cs50d.
         /5Eofcs50nd) {
 = >
ss51a> * 779ss5>35832c8c05ref="+work_q=scmdass="co05ref>r51*/
 796 r5>91" id="L5ref="+re i_q=scms="sref"L5ref>r512/
ss5>35832c8c05"L892" cl9ss="li class=" 5"L8>r51;,
r51d.
r51d.
<< avef=ablene" name="L753"> 753sr516si37/8e/5="L895" cl91s="lie" name/5="L>r51d.
 753sr517si37/8e/5cscmnentrl=scml" class="/5csc>r51e:
/5ANC>r51ft));
||rror.c#L797" id="L797" cl99s="line" nr519si37/8e/5href="+code=scmds="sref"/5hre>r51> 810
ss52a> *contrmuetn" clasr5 78>r52 /
="L739"> 739        int  796 r5 35832c8c05="L790" cl92s="line" nam05="L>r52*/
ss5 91" id="L5 href="+code=scmdne" namL5 hr>r52> 810
 796 r5 35832c8c05e#37;p, timeleft: %l 5e#3>r52;,
 =scmdstn" clas/5ref>r52*/
ss5 5si37/8e/5href="+code=scmdtn" clas/5hre>r52> 814
="L739"> 739        int  796 r5 6si37/8e/5"+code=SUCCESS" cn" clas/5"+c>r52>rtn;
ss5 7si37/8e/5>>>>>>>>contrmuetn" clas/5>>>>r52nd) {
 796 r5 8si37/8e/5="L797" cl92s="line" nam/5="L>r52ft));
&q7;p, timeleftne" nam/5">&>r52p; 0xe0);
r53 /

r53d.
 753sr5 91" id="L5ref="+code=scmdstn" clasL5ref>r53e:
 *ss5 csi37/8e/5href="+code=scmdtn" clas/5hre>r53*/
 796 r5 5si37/8e/5="L794" cl93s="line" nam/5="L>r53> 8144" cl91s="line" name="L796"> 796 r5 6si37/8e/5a>        <97" cle if this i9sdcasod ="ycling sp/cialne" name="L753"> 753sr5 8si37/8e/5per levelment">         /5per>r53e:
ss54a> *r540t));
ss5435832c8c05somd, justspan class="co05som>r54*/
<lisa_hetd/a/a><<> *<=94" cl91s="line" name="L796"> 796 r5491" id="L5_bd" otsse tell the hostL5_bd>r54> 810
 *r54d.
 753sr5"5si37/8e/5ef="+on ow">de=rtn" clas/5ef=>r54d.
r546/
ss547si37/8e/5>>>>>>>>contrmuetn" clas/5>>>>r54nd) {
<< can'1 talk7to us atLcl99moi9er.  S&gnameonly/9csi_error.c#L797" id="L797" cl99s="line" nr549si37/8e/5ef="+re i_q=scms"sref">u/5ef=>r54e:
 *r55h:
< 753sr5591" id="L5ef="+work_q=scms"sref">uL5ef=>r55e:
 *r55;,
 796 r55csi37/8e/5mngee_* @se" cls"sref">u/5mng>r55*/
ss555si37/8e/5="L794" cl95s="line" nam/5="L>r55> 814
<lisa_hetd/a/a><<> *<=94" cl91s="line" name="L796"> 796 r556si37/8e/5> 775ss557si37/8e/5* Tdmmandment">         /5* T>r55nd) {
="L739"> 739        int  796 r558si37/8e/5 This fTURent">         /5 Th>r55ft));
ss559si37/8e/5"> 778ent">         /5"> >r55> 810
 796 r56a> * * Retr5n c>r560t));
ss5635832c8c05NOToutady.omment"> * Ret05NOT>r56*/
 796 r5691" id="L5> 761ss56e/a> *r56;,
 796 r56csi37/8e/5"L793" cl96s="li class="/5"L7>r56*/
ss565si37/8e/5d"0d"0d"0d"0d"0}"sref">u/5d"0>r56> 814

u/5r56d.
r56e:
 <&l/5 TI>r56> 810
lisa_hetd/let_>sby> 796 r57a> *="L739"> 739        int  796 r5735832c8c05x#37;p, timeleft: %l05x#3>r57*/
 796 r5791" id="L5 href="+code=rlass="srefL5 hr>r57> 810
printk( * 753sr57csi37/8e/5 href="+code=rl" class="/5 hr>r57d.
 753sr575si37/8e/5+c  SUCCESS or" :class="/5+c >r57d.
r57>rtn;
 796 r577si37/8e/5res etrl_an ="liss="sref/5res>r57nd) {
ss578si37/8e/5FALLTHRU>ss579si37/8e/5"+code=SUCCESS" :class="/5"+c>r579t));
ss58a> *rpan cl="sref">ur5="L>r580t));
ss5835832c8c05ine" namedefault:class="05ine>r58*/
rpan cl1"sref">uL5="L>r58e:
 *r58d.
r58*/
="L739"> 739        int  796 r585si37/8e/5="L794" cl98s="line" nam/5="L>r58> 8144" cl91s="line" name="L796"> 796 r586si37/8e/5> 775ss587si37/8e/5>reco>/*y.omment"> * Ret/5>re>r58nd) {
<lisa_hetd/a/a><<> *<>lass="sref">printk(reco>/*y.omment"> * Ret/5>re>r58ft));
 796 r589si37/8e/5">reco>/*yomment"> * Ret/5">r>r58> 810
 796 r59a> * * Retr5e f>r59 /
="L739"> 739        int 
 * Ret05"+ >r59*/
ss5991" id="L5"> 761omment"> * RetL5"> >r59> 810
 796 r5ee/a> *          5ecr>r59;,
 796 r59csi37/8e/5ndsnnow inent">         /5nds>r59*/
 796 r5e5si37/8e/5andsnwhichent">         /5and>r59> 8144" cl91s="line" name="L796"> 796 r596si37/8e/5q> * @mcoment">         /5q> >r596/
ss597si37/8e/5 of thrma ent">         /5 of>r59e:ss598si37/8e/5 777>3"astLref=. sNote7that2lbove,/9csi_error.c#L797" id="L797" cl99s="line" nr6/a> * *60h:
 * * Ret06t"> *60d.
 761omment"> * RetL6">cmn60> 810
ss6935832c8c06dcrips="scent">          6f">sc60;,
ss63csi37/8e/6E3) {
 796 r635si37/8e/6Endsnwhichent">         /6Endcs60> 814
ss636si37/8e/6E> * @mcoment">         /6E> cs60>rtn;
         /6Eofcs60e:
 753sr6/8si37/8e/6E777>="L739"> 739        int  796 r61a> * 77935832c8c06ref="+work_q=scmdass="co06ref>r61*/r61ft));
r61;lisa_hetd/eh_lo79_door_donstatic cmnaque_dmmarequendefscsi_log_comprequend/ss61csi37/8e/6 href="+e=nede=r" class=/6 hr>r61d.ss615si37/8e/6r61> 814
 796 r616si37/8e/6="L895" cl91s="lie" name/6="L>r61d.ss618si37/8e/6ANCEL_CM"=scml"|cmnd/6ANC>r61e:
r61e:
<<> csi_error.c#L797" id="L797" cl99s="line" nr62a> *contrmuetn" clasr6 78>r62h:
<< to preventLm7diumrhrmoval> csi_error.c#L797" id="L797" cl99s="line" nr6235832c8c06="L790" cl92s="line" nam06="L>r62d.
r62e:
r62d.
 753sr6 csi37/8e/6ref="+m"> =scmdstn" clas/6ref>r62d.
r62d.
r62d.
>>>>>>>contrmuetn" clas/6>>>>r62e:
 753sr6 8si37/8e/6="L797" cl92s="line" nam/6="L>r62e:
&q7;p, timeleftne" nam/6">&>r62p; 0xltatic voiddri8ers/scsi/8cscl99s=h_lo79_doorfeode=scsi_eh_resOUT=h_lo79_door/alis/a>static cmnaque_dmmaesOUT<lisa_hetd/esOUT<ss63a> *r63 /ss6 35832c8c06"+code=result"dstn" clas06"+c>r63*/
static cmnaque_dmmarequendefscsi_log_comprequend/ 796 r6 91" id="L6ref="+code=scmdstn" clasL6ref>r63ft));
r63d.
         796 r6 8si37/8e/6per levelment">         /6per>r63e: 796 r6 9si37/8e/6cccccccc* 796 r64a> *r640t));
 796 r6435832c8c06somd, justspan class="co06som>r64*/
 796 r6491" id="L6_bd" otsse tell the hostL6_bd>r64> 810
 796 r64e/a> *r643 810
 796 r64csi37/8e/6eissomdc* 796 r645si37/8e/6ef="+on ow">de=rtn" clas/6ef=>r64> 8144" cl91s="line" name="L796"> 796 r646si37/8e/6+c  SUCCESS or" cn" clas/6+c >r646/
 796 r647si37/8e/6>>>>>>>>contrmuetn" clas/6>>>>r64e:ss648si37/8e/6="L797" cl94s="line" nam/6="L>r648/
 796 r649si37/8e/6ef="+re i_q=scms"sref">u/6ef=>r64> 810
 796 r65a> *r650t));
 796 r6535832c8c06="L790" cl95s="line" nam06="L>r65*/
 796 r6591" id="L6ef="+work_q=scms"sref">uL6ef=>r65ft));
r653 810
 796 r65csi37/8e/6mngee_* @se" cls"sref">u/6mng>r65*/ 796 r656si37/8e/6> 775         /6* T>r65e:
 753sr658si37/8e/6 This fTURent">         /6 Th>r65e:
 753sr659si37/8e/6"> 778ent">         /6"> >r65e:
 753sr66a> * * Retr6n c>r66h:
 * Ret06NOT>r66d.
 7>r66e:
 753sr66e/a> *r66d.
r66*/lisa_hetd/esOUTrendart_operations/alis/a>static cmnaque_dmmaSsOUTHgt;.c#L762" id="L7=sOUTHgt;/ss665si37/8e/6d"0d"0d"0d"0d"0}"sref">u/6d"0>r66> 81497s="line" name"witchL6 class="sref">ss666si37/8e/6u/6r666/
static cmnaque_dmmaesOUT<lisa_hetd/esOUT< 796 r667si37/8e/6="L796" cl96s="line" nam/6="L>r667 814
 796 r668si37/8e/6res etrl_an ="li:class="/6res>r66e: 796 r669si37/8e/6 TIMEOUT=NUL="/a> <&l/6 TI>r66> 810

 *r67d.
<r67e:

< 753sr67e/a> *<lisa_hetd/ehgt;_" i_eachT<ss675si37/8e/6+c  SUCCESS or" :class="/6+c >r67> 814
lisa_hetd/esOUT<<_on or"/alisa_eouteacmnentrldevCSI_LOG_ERROR_Rldev ss6=6si37/8e/6+ etrl_c79de=r--cn" clas/6+ e>r67>rtn;
 796 r677si37/8e/6res etrl_an ="liss="sref/6res>r67nd) {
r67e: 796 r679si37/8e/6"+code=SUCCESS" :class="/6"+c>r67> 810

 *rpan cl="sref">ur6="L>r68h:
<< operations,t="l also3" i/9csi_error.c#L797" id="L797" cl99s="line" nr6891" id="L6="L731">rpan cl1"sref">uL6="L>r68e:
 753sr68e/a> *r68d.
r684 810
printk(
 796 r686si37/8e/6> 775 796 r687si37/8e/6>reco>/*y.omment"> * Ret/6>re>r687 814
lisa_hetd/epin_lo79_irqsav"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r688si37/8e/6>reco>/*y.omment"> * Ret/6>re>r68ft));
lisa_hetd/esOUThgt;_let_ltat"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r689si37/8e/6">reco>/*yomment"> * Ret/6">r>r68> 810
lisa_hetd/esOUThgt;_let_ltat"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r69a> * * Retr6e f>r69 /
lisa_hetd/esOUThgt;_let_ltat"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r6935832c8c06"+ * TTUR.omment"> * Ret06"+ >r69*/
lisa_hetd/epin_unlo79_irqrendor"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r6991" id="L6"> 761omment"> * RetL6"> >r69ft));
          6ecr>r693 810
 796 r69csi37/8e/6ndsnnow inent">         /6nds>r69*/ 796 r695si37/8e/6andsnwhichent">         /6and>r69> 814

 * @mcoment">         /6q> >r69d.
         /6 of>r69e:
> 753sr7/a> * *70h:
 * * Ret07t"> *70*/
lisa_hetd/esOUTrunThgt;_quL78s/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r7925832c8c07d> 761omment"> * RetL7">cmn70ft));
          7f">sc70;,

) {
         /7Endcs70d.
 * @mcoment">         /7E> cs70d.
         /7Eofcs70e:
><<_unbusy()7will wakeLus again whenccl9se/9csi_error.c#L797" id="L797" cl99s="line" nr7f9si37/8e/7E="+__<_lisa=scmdne" nam/7E="cs70e:
 753sr71a> * 77935832c8c07ref="+work_q=scmdass="co07ref>r71*/
lisa_hetd/epin_lo79_irqsav"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r7>25832c8c07ref="+re i_q=scms="sref"L7ref>r71> 810
.c#L762" id="L7hgt;_eh_schedul8> ss7>35832c8c07"L892" cl9ss="li class=" 7"L8>r71;,
lisa_hetd/esOUThgt;_let_ltat"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r71csi37/8e/7 href="+e=nede=r" class=/7 hr>r71*/
lisa_hetd/esOUThgt;_let_ltat"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r715si37/8e/7r71> 814
lisa_hetd/epin_unlo79_irqrendor"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r716si37/8e/7="L895" cl91s="lie" name/7="L>r71d.ss718si37/8e/7ANCEL_CM"=scml"|cmnd/7ANC>r71e:
r71e:
<< r_dmy9ltatet="l recoverri9eno;ne" name="L753"> 753sr72a> *contrmuetn" clasr7 78>r72h:
 753sr7235832c8c07="L790" cl92s="line" nam07="L>r72d.
 753sr7225832c8c07 href="+code=scmdne" namL7 hr>r72e:
 753sr7235832c8c07e#37;p, timeleft: %l 7e#3>r72d.
 =scmdstn" clas/7ref>r72d.static cmnaque_dmmaSsOUTHgt;.c#L762" id="L7=sOUTHgt;/printk(r72> 814
static cmnaque_dmmalit;_headCSI_LOG_ERROR_Rlit;_head/lass="sref">printk(r72>rtn;
ss7 7si37/8e/7>>>>>>>>contrmuetn" clas/7>>>>r72e:ss7 8si37/8e/7="L797" cl92s="line" nam/7="L>r72ft));
      ss7 9si37/8e/7">&q7;p, timeleftne" nam/7">&>r72> 810
<<_rese;.c#L762" id="L7lEOUTeh_busT<<_rese;/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt; ss73a> *r73 /
      ss7335832c8c07"+code=result"dstn" clas07"+c>r73*/

      ss7325832c8c07ref="+code=scmdstn" clasL7ref>r73> 810

ss7335832c8c07="L792" cl93s="line" nam 7="L>r73;,
="+"line" name"witchL6 class="sref">ss73csi37/8e/7href="+code=scmdtn" clas/7hre>r73*/
 796 r7 5si37/8e/7="L794" cl93s="line" nam/7="L>r73d. >r73d. 796 r7 7si37/8e/794ss7 8si37/8e/7per levelment">         /7per>r73e:
 753sr74a> *r74h:
 753sr7435832c8c07somd, justspan class="co07som>r74d.
r74> 810voiddri8ers/scsi/8cscl99s=h_flush_don<_qfeode=scsi_eh_resOUT=h_flush_don<_q/alis/a>static cmnaque_dmmalit;_headCSI_LOG_ERROR_Rlit;_head/ss74e/a> *r743 81097s="line" name"witchL6 class="sref">ss74csi37/8e/7eissomdc* 796 r745si37/8e/7ef="+on ow">de=rtn" clas/7ef=>r74> 8144" cl91s="line" name="L796"> 796 r746si37/8e/7+c  SUCCESS or" cn" clas/7+c >r746/
lisa_hetd/lit;_" i_eachT9e1ry_saf"/alisa_eouteacmnentrlssafeode=scsi_eh_reslisa_e       ss747si37/8e/7>>>>>>>>contrmuetn" clas/7>>>>r74nd) {
 796 r748si37/8e/7="L797" cl94s="line" nam/7="L>r74ft));
lisa_hetd/esOUT<<_on or"/alisa_eouteacmnentrl_safeode=scsi_eh_reslisa_e" cl84s="line" name=<lisa_hetd/a/a><<> *<)fode=sode=s4" cl91s="line" name="L796"> 796 r749si37/8e/7ef="+re i_q=scms"sref">u/7ef=>r74> 810
 796 r75a> *r75 /
ss7535832c8c07="L790" cl95s="line" nam07="L>r75*/

ss7591" id="L7ef="+work_q=scms"sref">uL7ef=>r75> 810


printk( *r75;,
ss75csi37/8e/7mngee_* @se" cls"sref">u/7mng>r75*/
 796 r755si37/8e/7="L794" cl95s="line" nam/7="L>r75> 814
 796 r756si37/8e/7> 775ss757si37/8e/7* Tdmmandment">         /7* T>r75nd) {

         /7 Th>r75e:
<< (call8>/9csi_error.c#L797" id="L797" cl99s="line" nr759si37/8e/7"> 778ent">         /7"> >r75e:
 * * Retr7n c>r76h:
 753sr7635832c8c07NOToutady.omment"> * Ret07NOT>r76d.
 7>r76> 810
ss76e/a> *r76;,
 796 r76csi37/8e/7"L793" cl96s="li class="/7"L7>r76*/
ss765si37/8e/7d"0d"0d"0d"0d"0}"sref">u/7d"0>r76> 814

printk(u/7r76>rtn;

 796 r767si37/8e/7="L796" cl96s="line" nam/7="L>r76nd) {
 796 r768si37/8e/7res etrl_an ="li:class="/7res>r76ft));
 <&l/7 TI>r76> 810
r77d. 796 r7791" id="L7 href="+code=rlass="srefL7 hr>r77ft));
 753sr775si37/8e/7+c  SUCCESS or" :class="/7+c >r77d.
 753sr776si37/8e/7+ etrl_c79de=r--cn" clas/7+ e>r77d.
 753sr777si37/8e/7res etrl_an ="liss="sref/7res>r77e:
r77e:
 *rpan cl="sref">ur7="L>r78h:
 753sr7891" id="L7="L731">rpan cl1"sref">uL7="L>r78e:
 753sr78e/a> *r78d.
r78d.
 775
reco>/*y.omment"> * Ret/7>re>r78e:
reco>/*y.omment"> * Ret/7>re>r78e:
reco>/*yomment"> * Ret/7">r>r78e:
 753sr79a> * * Retr7e f>r79h:
 753sr7935832c8c07"+ * TTUR.omment"> * Ret07"+ >r79d.
 761omment"> * RetL7"> >r79e:
 *          7ecr>r79d.
         /7nds>r79d.
 753sr795si37/8e/7andsnwhichent">         /7and>r79d.
 * @mcoment">         /7q> >r79d.static cmnaque_dmmaScOUTHgt;.c#L762" id="L7=sOUTHgt;/ss797si37/8e/7 of thrma ent">         /7 of>r79e:ss798si37/8e/7 777> 796 r799si37/8e/7f="+__<_lisa=scmdne" nam/7f=">r79> 810
 796 r8/a> * *800t));
 796 r8/1> * * Ret08t"> *80*/ 796 r8/2> * 761omment"> * RetL8">cmn80> 810
lisa_hetd/epin_lo79_irqsav"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r8935832c8c08dcrips="scent">          8f">sc803 810
<<_inid :/a>lisa_hetd/lit;_spl><<_inid/alisode=sa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r8/45832c8c08ddsnnow inent">         /8s/scs804 810
lisa_hetd/epin_unlo79_irqrendor"/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 r835si37/8e/8Endsnwhichent">         /8Endcs80> 8144" cl91s="line" name="L796"> 796 r836si37/8e/8E> * @mcoment">         /8E> cs806/
 796 r837si37/8e/8Eof thrma ent">         /8Eofcs80e:ss838si37/8e/8E777>ss8f9si37/8e/8E="+__<_lisa=scmdne" nam/8E="cs80> 810
ss81a> * 779
 796 r8>35832c8c08ref="+work_q=scmdass="co08ref>r81*/ 796 r8>25832c8c08ref="+re i_q=scms="sref"L8ref>r81> 810
 796 r8>35832c8c08"L892" cl9ss="li class=" 8"L8>r81;r81*/ 796 r815si37/8e/8r81d.

 753sr818si37/8e/8ANCEL_CM"=scml"|cmnd/8ANC>r81e:
 753sr819si37/8e/8href="+code=scmds="sref"/8hre>r81e:
 *contrmuetn" clasr8 78>r82h:
 753sr8225832c8c08 href="+code=scmdne" namL8 hr>r82e:
r82d.ss8 csi37/8e/8ref="+m"> =scmdstn" clas/8ref>r82d.ss8 5si37/8e/8href="+code=scmdtn" clas/8hre>r82> 814
static cmnaque_dmmaScOUTHgt;.c#L762" id="L7=sOUTHgt;/ 796 r8 6si37/8e/8"+code=SUCCESS" cn" clas/8"+c>r826/ 796 r8 7si37/8e/8>>>>>>>>contrmuetn" clas/8>>>>r827 814

&q7;p, timeleftne" nam/8">&>r82e:
 753sr83a> *r83h:
r83d.
 753sr8325832c8c08ref="+code=scmdstn" clasL8ref>r83e:
ss83csi37/8e/8href="+code=scmdtn" clas/8hre>r83*/
lisa_hetd/eet_lurr9e1_ltat"/alisa_eouteacmnentrTASK_INTameUPTIBLE :/a>lisa_hetd/TASK_INTameUPTIBLE/ali=94" cl91s="line" name="L796"> 796 r8 5si37/8e/8="L794" cl93s="line" nam/8="L>r83> 814
.c#L762" id="L7hgt;_eh_schedul8>  796 r8 6si37/8e/8a>        a_eouteacmnentrlhgt;.c#L762" id="L7lhgt; ss837si37/8e/894ss838si37/8e/8per levelment">         /8per>r83ft));
>>>>>>>>>>>>>>>lass="sref">printk(;
 796 r84a> *r84 /
 796 r8435832c8c08somd, justspan class="co08som>r84*/

 796 r8425832c8c08_bd" otsse tell the hostL8_bd>r84> 810
 *r843 810 0;
r84*/
lisa_hetd/__let_lurr9e1_ltat"/alisa_eouteacmnentrTASK_RUNNINGid="L790" cl970TASK_RUNNING/ali=94" cl91s="line" name="L796"> 796 r845si37/8e/8ef="+on ow">de=rtn" clas/8ef=>r84> 814
ss846si37/8e/8+c  SUCCESS or" cn" clas/8+c >r84>rtn;
>>>>>>>>>>>>>>>lass="sref">printk(>>>>>>>contrmuetn" clas/8>>>>r84nd) {

 796 r848si37/8e/8="L797" cl94s="line" nam/8="L>r84ft 796 r849si37/8e/8ef="+re i_q=scms"sref">u/8ef=>r84> 810
 *r85h:
 753sr8591" id="L8ef="+work_q=scms"sref">uL8ef=>r85e:
 753sr85e/a> *r85d.
u/8mng>r85*/
lisa_hetd/eh_noresum"/ss855si37/8e/8="L794" cl95s="line" nam/8="L>r85> 814
ss856si37/8e/8> 775>>>>>>>>>>>>7s="line" name"witchL6 class="sref">ss857si37/8e/8* Tdmmandment">         /8* T>r85nd) {
>>>>>>>>>>>>>>>lass="sref">printk(         /8 Th>r85ft));
 796 r859si37/8e/8"> 778ent">         /8"> >r85> 810
 796 r86a> * * Retr8n c>r86 /
 * Ret08NOT>r86*/ 796 r8691" id="L8> 761ss86e/a> *r86;,
 796 r86csi37/8e/8"L793" cl96s="li class="/8"L7>r86*/
 796 r865si37/8e/8d"0d"0d"0d"0d"0}"sref">u/8d"0>r86> 814
 796 r866si37/8e/8u/8r866/ 796 r867si37/8e/8="L796" cl96s="line" nam/8="L>r86nd) {
r86e:
 <&l/8 TI>r86e:
 *r87d.
r87e:
 753sr87e/a> * 796 r875si37/8e/8+c  SUCCESS or" :class="/8+c >r87> 814
lisa_hetd/eh_noresum"/ss876si37/8e/8+ etrl_c79de=r--cn" clas/8+ e>r87>rtn;
 796 r877si37/8e/8res etrl_an ="liss="sref/8res>r87nd) {
r87ft));
lisa_hetd/__let_lurr9e1_ltat"/alisa_eouteacmnentrTASK_RUNNINGid="L790" cl970TASK_RUNNING/ali=94" cl91s="line" name="L796"> 796 r879si37/8e/8"+code=SUCCESS" :class="/8"+c>r87e: 796 r88a> *rpan cl="sref">ur8="L>r880t));
ss8835832c8c08ine" namedefault:class="08ine>r88*/

>>>>>>>>>>>>>>>rcode=scsi_cmnd"ehgt;.c#L762" id="L7lhgt;  796 r8891" id="L8="L731">rpan cl1"sref">uL8="L>r88> 810
 796 r88e/a> *r88;,
 796 r88csi37/8e/8"L793" cl9ss="line" name/8"L7>r88d. 796 r886si37/8e/8> 775reco>/*y.omment"> * Ret/8>re>r88e:
reco>/*y.omment"> * Ret/8>re>r88e:
reco>/*yomment"> * Ret/8">r>r88e:
 * * Retr8e f>r89h:
 753sr8935832c8c08"+ * TTUR.omment"> * Ret08"+ >r89d.
 753sr8991" id="L8"> 761omment"> * RetL8"> >r89e:
 *          8ecr>r89d.
 753sr89csi37/8e/8ndsnnow inent">         /8nds>r89d.
 753sr895si37/8e/8andsnwhichent">         /8and>r89d.
 753sr896si37/8e/8q> * @mcoment">         /8q> >r89d.
 753sr897si37/8e/8 of thrma ent">         /8 of>r89e:
 753sr898si37/8e/8 777>3ifLcl99rese; is  ne which/9csi_error.c#L797" id="L797" cl99s="line" nr9/a> * *90h:

 * * Ret09t"> *90d.
 * 761omment"> * RetL9">cmn90e:
 753sr9935832c8c09dcrips="scent">          9f">sc90d.
 753sr9945832c8c09ddsnnow inent">         /9s/scs90d.
 753sr9955832c8c09dndsnwhichent">         /9Endcs90d.
 753sr9965832c8c09d> * @mcoment">         /9E> cs90d.
         /9Eofcs90e:static cmnaque_dmmaScOUTHgt;.c#L762" id="L7=sOUTHgt;/ss938si37/8e/9E777>ss9f9si37/8e/9E="+__<_lisa=scmdne" nam/9E="cs90> 810
static cmnaque_dmmaesOUT<lisa_hetd/esOUT<lisa_hetd/e 796 r91a> * 779 796 r911> *r91*/
<lisa_hetd/__lhgt;_" i_eachT<lisa_hetd/ercode=scsi_cmnd"ehgt;.c#L762" id="L7lhgt; ss9>25832c8c09ref="+re i_q=scms="sref"L9ref>r91> 810
lisa_hetd/ess9>35832c8c09"L892" cl9ss="li class=" 9"L8>r91;,
 796 r91csi37/8e/9 href="+e=nede=r" class=/9 hr>r91*/
r91d. 796 r917si37/8e/9cscmnentrl=scml" class="/9csc>r91e:ss918si37/8e/9ANCEL_CM"=scml"|cmnd/9ANC>r91e:
r91e:
 *contrmuetn" clasr9 78>r92h:
 *
r92e:
<< rese;  n the d/a><< bee"  h="lledne" name="L753"> 753sr9235832c8c09e#37;p, timeleft: %l 9e#3>r92d.
 753sr9 csi37/8e/9ref="+m"> =scmdstn" clas/9ref>r92d.
r92d.
r92d.
>>>>>>>contrmuetn" clas/9>>>>r92e:

 753sr9 9si37/8e/9">&q7;p, timeleftne" nam/9">&>r92e:
 *r93h:
 *r93d.
r93e:
3ifLcl99rese; is  ne which/9csi_error.c#L797" id="L797" cl99s="line" nr9335832c8c09="L792" cl93s="line" nam 9="L>r93d.

r93d.
 753sr9 6si37/8e/9a>         753sr937si37/8e/994
<<<<<<<<<< 753sr938si37/8e/9per levelment">         /9per>r93e:
 753sr9 9si37/8e/9cccccccc* *r94 /<<_rese;feode=scsi_eh_rlsOUTreport_<<_rese;/alis/a>static cmnaque_dmmaScOUTHgt;.c#L762" id="L7=sOUTHgt;/ss9435832c8c09somd, justspan class="co09som>r94*/ss9425832c8c09_bd" otsse tell the hostL9_bd>r94> 810
static cmnaque_dmmaesOUT<lisa_hetd/esOUT<lisa_hetd/e 796 r94e/a> *r943 810 0;
r94*/
<lisa_hetd/__lhgt;_" i_eachT<lisa_hetd/ercode=scsi_cmnd"ehgt;.c#L762" id="L7lhgt; ss945si37/8e/9ef="+on ow">de=rtn" clas/9ef=>r94> 814
lisa_hetd/ess946si37/8e/9+c  SUCCESS or" cn" clas/9+c >r94>rtn;
lisa_hetd/ess947si37/8e/9>>>>>>>>contrmuetn" clas/9>>>>r94nd) {
<<_rese;feode=scsi_eh_r__lsOUTreport_<<_rese;/alisa_eouteacmnentrllisa_hetd/ercode=scsi_cmnd"NULL.c#L762" id="L7NULL  796 r948si37/8e/9="L797" cl94s="line" nam/9="L>r94ft));
u/9ef=>r94> 810= 0;
r95h: 796 r9535832c8c09="L790" cl95s="line" nam09="L>r95*/ 796 r9591" id="L9ef="+work_q=scms"sref">uL9ef=>r95e: 796 r95e/a> *r95d.static cmnaque_dmmaesOUTcm"lfeode=scsi_eh_resOUTcm"l/ss95csi37/8e/9mngee_* @se" cls"sref">u/9mng>r95d.ss955si37/8e/9="L794" cl95s="line" nam/9="L>r95d. 7>r956/ 796 r957si37/8e/9* Tdmmandment">         /9* T>r95e:
         /9 Th>r95e:
 778ent">         /9"> >r95e:
 * * Retr9n c>r96h:
< 753sr9635832c8c09NOToutady.omment"> * Ret09NOT>r96d.
 7>r96e:
 *r96d.
r96d.
 753sr965si37/8e/9d"0d"0d"0d"0d"0}"sref">u/9d"0>r96d.
 753sr966si37/8e/9u/9r96d.
 753sr967si37/8e/9="L796" cl96s="line" nam/9="L>r96e:
ttod=="videe" name="L753"> 753sr968si37/8e/9res etrl_an ="li:class="/9res>r96e:
 753sr969si37/8e/9 TIMEOUT=NUL="/a> <&l/9 TI>r96e:
 *r97d.static cmnaque_dmmaesOUT<lisa_hetd/esOUT<lisa_hetd/rhrefa_eouteacmnentrflagdlisa_hetd/flag/ss9791" id="L9 href="+code=rlass="srefL9 hr>r97e:ss97e/a> * 796 r97csi37/8e/9 href="+code=rl" class="/9 hr>r97*/
static cmnaque_dmmaScOUTHgt;.c#L762" id="L7=sOUTHgt;/lisa_hetd/hgt;  796 r975si37/8e/9+c  SUCCESS or" :class="/9+c >r97> 814
static cmnaque_dmmarequLstdlisa_hetd/requLst 814lisa_hetd/req  796 r976si37/8e/9+ etrl_c79de=r--cn" clas/9+ e>r97>rtn;
 796 r977si37/8e/9res etrl_an ="liss="sref/9res>r97nd) {
lisa_hetd/rtn 81094" cl91s="line" name="L796"> 796 r978si37/8e/9FALLTHRU> 796 r979si37/8e/9"+code=SUCCESS" :class="/9"+c>r97> 810
autopm_get_hgt;feode=scsi_eh_resOUTautopm_get_hgt;/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt; ss98a> *rpan cl="sref">ur9="L>r98 /
 796 r9835832c8c09ine" namedefault:class="09ine>r98*/ 796 r9891" id="L9="L731">rpan cl1"sref">uL9="L>r98> 810
get_l89s="lfeode=scsi_eh_resOUTget_l89s="l/alisa_eouteacmnentrlisa_hetd/ra_eouteacmnentrGFP_KERNEL.c#L762" id="L7GFP_KERNEL/ali)94" cl91s="line" name="L796"> 796 r98e/a> *r983 810
lisa_hetd/blk_rq_inid/alisa_eouteacmnentrNULL.c#L762" id="L7NULL lisa_hetd/req  796 r98csi37/8e/9"L793" cl9ss="line" name/9"L7>r984 810
lisa_hetd/requLst 814<= ode=sa_eouteacmnentrreqdlisa_hetd/req  796 r985si37/8e/9="L794" cl98s="line" nam/9="L>r98> 8144" cl91s="line" name="L796"> 796 r986si37/8e/9> 775 796 r987si37/8e/9>reco>/*y.omment"> * Ret/9>re>r98e:ss988si37/8e/9>reco>/*y.omment"> * Ret/9>re>r98ft));
lisa_hetd/esOUT
relet_=="vider_don<_l89s="lfeode=scsi_eh_resOUTrelet_=="vider_don<_l89s="l/ali94" cl91s="line" name="L796"> 796 r989si37/8e/9">reco>/*yomment"> * Ret/9">r>r989t));
lisa_hetd/elisa_hetd/e 796 r99a> * * Retr9e f>r99 / 796 r9935832c8c09"+ * TTUR.omment"> * Ret09"+ >r99*/
lisa_hetd/cmd_lend) {
 796 r9991" id="L9"> 761omment"> * RetL9"> >r99e: 796 r99e/a> *          9ecr>r993 810

 796 r99csi37/8e/9ndsnnow inent">         /9nds>r99*/ 796 r995si37/8e/9andsnwhichent">         /9and>r995 810
lisa_hetd/epin_lo79_irqsavlisa_hetd/hgt;_lo79 ra_eouteacmnentrflagsefscsi_log_compflags 810)94" cl91s="line" name="L796"> 796 r996si37/8e/9q> * @mcoment">         /9q> >r996/
 796 r997si37/8e/9 of thrma ent">         /9 of>r997 810
lisa_hetd/epin_unlo79_irqrendorlisa_hetd/hgt;_lo79 ra_eouteacmnentrflagsefscsi_log_compflags 810)94" cl91s="line" name="L796"> 796 r998si37/8e/9 777> 796 r999si37/8e/9f="+__<_lisa=scmdne" nam/9f=">r99> 810
lisa_hetd/flag/s20/a> * __<_lisa=scmdne" nam20/a>>20/a 810
>s="line" name"witchL6 class="sref">s20/1> * * Ret20/+ >20/*/

lisa_hetd/rtn 810h"line" name="L729796">try_busT<<_rese;feode=scsi_eh_rlsOUTtry_busT<<_rese;/alisa_eouteacmnentrlsmlfeode=scsi_eh_resmd/ 796 20/2> * 761omment"> * Ret20/> >20/> 810
s20/3> *         20/cr>20/;,
 796 20/4> *         20/ds>20/*/
 *         20/nd>20/5 810
 * * @mcoment">         20/> >20/>rtn;
lisa_hetd/rtn 810h"line" name="L729796">try_target_rese;feode=scsi_eh_rlsOUTtry_target_rese;/alisa_eouteacmnentrlsmlfeode=scsi_eh_resmd/ 796 20/7> *         20/of>20/nd) {
s20/8> *> 796 20/9> *20/> 810
 * 779 *20>*/

lisa_hetd/rtn 810h"line" name="L729796">try_busTrese;feode=scsi_eh_rlsOUTtry_busTrese;/alisa_eouteacmnentrlsmlfeode=scsi_eh_resmd/ 796 2012> *20>> 810
s2013> *20>;,
 796 2014> *20>*/
 *20>5 810
 *lisa_hetd/rtn 810h"line" name="L729796">try_hgt;_rese;feode=scsi_eh_rlsOUTtry_hgt;_rese;/alisa_eouteacmnentrlsmlfeode=scsi_eh_resmd/ 796 2017> * 796 2018> *20ANC>20>ft));
 *20>> 810
lisa_hetd/rtn 810h"line" name="L729FAILED.c#L762" id="L7FAILED 81094" cl91s="line" name="L796"> 796 202a> *contrmuetn" clas20 78>20 7 810
 796 20 2> *20 > 810
lisa_hetd/epin_lo79_irqsavlisa_hetd/hgt;_lo79 ra_eouteacmnentrflagsefscsi_log_compflags 810)94" cl91s="line" name="L796"> 796 20 3> *20 3 810
 796 20 4> * =scmdstn" clas20ref>20 4 810
lisa_hetd/epin_unlo79_irqrendorlisa_hetd/hgt;_lo79 ra_eouteacmnentrflagsefscsi_log_compflags 810)94" cl91s="line" name="L796"> 796 20 5> *20 > 8144" cl91s="line" name="L796"> 796 20 6> *20 6/

 *>>>>>>>contrmuetn" clas20>>>>20 e:
 * 753s20 9> *&q7;p, timeleftne" nam20">&>20 e:
 *20 h 810
s20 1> *20 */

printk( *20 > 810
 796 20 3> * *20 4 810
lisa_hetd/hgt;_waid 810)94" cl91s="line" name="L796"> 796 2035> * 796 2036> *         796 2037> *s20 8> *         20per>20 ft));
 796 2039> *autopm_put_hgt;feode=scsi_eh_resOUTautopm_put_hgt;/alisa_eouteacmnentrlhgt;.c#L762" id="L7lhgt;  796 204a> *20"+t));
lisa_hetd/rtn 81094" cl91s="line" name="L796"> 796 20"1> *20"e: 796 2043> *20"3 810 0;
20"d.
 *de=rtn" clas20ef=>20"d.
 *20"d.
 753s2047> *>>>>>>>contrmuetn" clas20>>>>20"e:
 *
 *u20ef=>20"e:
 *20l9:
 * 753s2052> *u20ef=>20le:
 753s2053> *20ld.
 753s2054> *u20mng>20ld.
 753s2055> * 753s2056> * 775 753s20l7> *         20* T>20le:
 *         20 Th>20le:
 753s2059> * 778ent">         20"> >20le:
 * * Ret20n c>20n :
 753s2061> * * Ret20NOT>20nd.
 753s2062> * 761 *20nd.*ic cmnaque_dmmalense_bufferfeode=scsi_eh_reense_buffer/rhrefa_eouteacmnentrsb_lenfeode=scsi_eh_reb_lendlass="sref">printk( *20n*/
s2065> *u20d"0>20nd.s2066> *u2020n6/
s2067> * 796 20n8> *20nft 796 20n9> * <&l20 TI>20n9t));
static cmnaque_dmmaesOUTeense_hdrfeode=scsi_eh_resOUTeense_hdrt 796 207a> * 796 2071> *20=*/
lisa_hetd/renponse_nent/ 796 2072> *20=e: 796 20=3> *s20=4> * 796 2075> * 796 2076> *20=6/
lisa_hetd/renponse_nent/s2077> *20=nd) {
 * *20=e:
 *rpan cl="sref">u20="L>20=" 810
s2081> * 796 2082> *rpan cl1"sref">u20="L>20=> 810
s2083> *20=;,
 796 2084> *20=*/
s2085> *lisa_hetd/ascq 810h"line" name="L7297ense_bufferfeode=scsi_eh_reense_buffer/ 796 2086> * 775s2087> *reco>/*y.omment"> * Ret20>re>20=nd) {
lisa_hetd/additional_length 810h"line" name="L7297ense_bufferfeode=scsi_eh_reense_buffer/ 796 2088> *reco>/*y.omment"> * Ret20>re>20=ft));
s2089> *reco>/*yomment"> * Ret20">r>20=> 810
 * * Ret20e f>20e :
 * * Ret20"+ >20ed.
 * 761omment"> * Ret20"> >20e> 810
s2093> *         20ecr>20e;,
 796 2094> *         20nds>20e*/
s2095> *         20and>20e> 814
s2096> * * @mcoment">         20q> >20e>rtn;
 796 2097> *         20 of>20end) {
s2098> *> 796 2099> *s21/a> * __<_lisa=scmdne" nam21/a>>210" 810
lisa_hetd/ascq 810h"line" name="L7297ense_bufferfeode=scsi_eh_reense_buffer/ 796 21/1> * * Ret21/+ >21/*/

 * Ret21/> >21/> 810
         21/cr>2103 810 0;
         21/ds>21/*/
 796 21/5> *         21/nd>210d.         21/> >21/>rtn 796 21/7> *         21/of>210e:s21/8> *>static cmnaque_dmmaesOUTcm"lfeode=scsi_eh_resOUTcm"l/lass="sref">printk( *21/> 810
s211a> * 779s2111> *21>*/
7s="line" name"witchL6 class="sref">s2112> *21>> 810
 796 2113> *21>;21>*/ 796 2115> *211> 8144" cl91s="line" name="L796"> 796 2116> * * 753s2118> *21ANC>211e:
 753s2119> *211e:
 *contrmuetn" clas21 78>2129:
 * *212e:
 753s21 3> *212d.
 753s21 4> * =scmdstn" clas21ref>212d.
 *212d.
 *212d.
 753s21 7> *>>>>>>>contrmuetn" clas21>>>>21 e:
 753s21 8> * *&q7;p, timeleftne" nam21">&>21 e:*tic cmnaque_dmmaesOUTeense_7/sc_findfeode=scsi_eh_resOUTeense_7/sc_find/alisconsefa_eouteacmnentru8feode=scsi_eh_ruft*tic cmnaque_dmmaeense_bufferfeode=scsi_eh_reense_buffer/rhrefa_eouteacmnentrsb_lenfeode=scsi_eh_reb_lendlass="sref">printk( *213" 810
s21 1> *21 */s21 2> *21 > 810
 796 21 3> * 796 21 4> *213*/ 796 2135> *s2136> *         796 21 7> *s2138> *         21per>213ft));
 796 21 9> *s214a> *214" 810
 796 21"1> * 796 2142> *214> 810
s2143> *214;,
 796 2144> * 796 2145> *de=rtn" clas21ef=>214> 814
 796 2146> *214>rtn;
s2147> *>>>>>>>contrmuetn" clas21>>>>214nd) {
 796 21"8> *
 *u21ef=>214> 810
 796 215a> *2157 810
 796 2152> *u21ef=>21le:21ld. 796 2154> *u21mng>215*/ 796 2155> * * 775 *         21* T>21le:
 753s21l8> *         21 Th>21le:
 * 778ent">         21"> >21le:
 * * Ret21n c>21n :
 753s2161> * * Ret21NOT>21nd.
 753s2162> * 761 753s2163> *216d.
 753s2164> *216d.
 *u21d"0>21nd.*tic cmnaque_dmmaeense_bufferfeode=scsi_eh_reense_buffer/rhrefa_eouteacmnentrsb_lenfeode=scsi_eh_reb_lendlass="sref">printk( *u21216>rtn;
s2167> *s21n8> *216ft));
 796 21n9> * <&l21 TI>21n9t));
*tic cmnaque_dmmaucpCSI_LOG_ERROR_Rucp/ali94" cl91s="line" name="L796"> 796 217a> * 796 2171> *217*/ 796 2172> *217> 810
s21=3> * 796 21=4> *s2175> * *21=6/
 *21=nd) {
s2178> *s2179> *217> 810
s218a> *rpan cl="sref">u21="L>21=" 810
 796 2181> * 796 2182> *rpan cl1"sref">u21="L>21=> 810
 796 2183> *21=;,
 796 2184> *21=*/
 * * 775eense_7/sc_findfeode=scsi_eh_resOUTeense_7/sc_find/alisic cmnaque_dmmaeense_bufferfeode=scsi_eh_reense_buffer/ra_eouteacmnentrsb_lenfeode=scsi_eh_reb_lendlass="sref">printk( *reco>/*y.omment"> * Ret21>re>21=nd) {

 796 2188> *reco>/*y.omment"> * Ret21>re>218ft));
s2189> *reco>/*yomment"> * Ret21">r>21=> 810
 796 219a> * * Ret21e f>219" 810
s2191> * * Ret21"+ >219*/


s2192> * 761omment"> * Ret21"> >21e> 810
s2193> *         21ecr>21e;,
 796 2194> *         21nds>21e*/
 *         21and>21e> 814
 796 2196> * * @mcoment">         21q> >21e>rtn;
 796 2197> *         21 of>21end) {
 796 2198> *> 796 2199> * * __<_lisa=scmdne" nam22/a>>220" 810
 796 22/1> * * Ret22/+ >22/*/
 * Ret22/> >220e:         22/cr>220d. 796 22/4> *         22/ds>220*/ 796 22/5> *         22/nd>220d.
 * * @mcoment">         22/> >220d.
 *         22/of>220e:
 753s22/8> *> *220e:
 * 779 *221d.
 *221e:
 *221d.
 *221d.
 *221> 814voidline" name="L729796">build_eense_bufferfeode=scsi_eh_resOUTbuild_eense_buffer/alishrefa_eouteacmnentr7/scCSI_LOG_ERROR_R7/sc/ra_eouteacmnentru8feode=scsi_eh_ruft*ic cmnaque_dmmabuffeode=scsi_eh_rbuf/ra_eouteacmnentru8feode=scsi_eh_ruftic cmnaque_dmmaSeyfeode=scsi_eh_rkey/ra_eouteacmnentru8feode=scsi_eh_ruftic cmnaque_dmmaascfeode=scsi_eh_rasc 810>ra_eouteacmnentru8feode=scsi_eh_ruftic cmnaque_dmmaascqdlisa_hetd/ascq 810f="+"line" name"witchL6 class="sref">s2216> *s2217> *s2218> *22ANC>221ft));

 *221> 810
 796 222a> *contrmuetn" clas22 78>222" 810
 796 2221> *lisa_hetd/ascq 81094" cl91s="line" name="L796"> 796 2222> *222> 810
 796 22 3> *222;,
s22 4> * =scmdstn" clas22ref>222*/

 *222> 814
 796 2226> *222>rtn;
 796 2227> *>>>>>>>contrmuetn" clas22>>>>222nd) {
 796 2228> *lisa_hetd/ascq 81094" cl91s="line" name="L796"> 796 2229> *&q7;p, timeleftne" nam22">&>222> 810
223" 810= 0;
22 */ 796 22 2> *22 > 810


The original LXR softwlineby the " cl91s="http://sourceforge.net/projects/lxrf>LXR "driunity/rclis experii9eral e" nion by " cl91s="mailto:lxr@scmux.no">lxr@scmux.no/ lxr.scmux.no kindly hosted by " cl91s="http://www.redpill-scmpro.no">Redpill Lcmpro AS/rprovider9of Lcmux consulting ="l opera;ions sera><