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