Merge branch 'stable/for-jens-3.13-take-two' of git://git.kernel.org/pub/scm/linux...
[linux-2.6/btrfs-unstable.git] / drivers / scsi / scsi.c
blobfe0bcb18fb2698d573123ce3bf9565572546e3c4
1 /*
2 * scsi.c Copyright (C) 1992 Drew Eckhardt
3 * Copyright (C) 1993, 1994, 1995, 1999 Eric Youngdale
4 * Copyright (C) 2002, 2003 Christoph Hellwig
6 * generic mid-level SCSI driver
7 * Initial versions: Drew Eckhardt
8 * Subsequent revisions: Eric Youngdale
10 * <drew@colorado.edu>
12 * Bug correction thanks go to :
13 * Rik Faith <faith@cs.unc.edu>
14 * Tommy Thorn <tthorn>
15 * Thomas Wuensche <tw@fgb1.fgb.mw.tu-muenchen.de>
17 * Modified by Eric Youngdale eric@andante.org or ericy@gnu.ai.mit.edu to
18 * add scatter-gather, multiple outstanding request, and other
19 * enhancements.
21 * Native multichannel, wide scsi, /proc/scsi and hot plugging
22 * support added by Michael Neuffer <mike@i-connect.net>
24 * Added request_module("scsi_hostadapter") for kerneld:
25 * (Put an "alias scsi_hostadapter your_hostadapter" in /etc/modprobe.conf)
26 * Bjorn Ekwall <bj0rn@blox.se>
27 * (changed to kmod)
29 * Major improvements to the timeout, abort, and reset processing,
30 * as well as performance modifications for large queue depths by
31 * Leonard N. Zubkoff <lnz@dandelion.com>
33 * Converted cli() code to spinlocks, Ingo Molnar
35 * Jiffies wrap fixes (host->resetting), 3 Dec 1998 Andrea Arcangeli
37 * out_of_space hacks, D. Gilbert (dpg) 990608
40 #include <linux/module.h>
41 #include <linux/moduleparam.h>
42 #include <linux/kernel.h>
43 #include <linux/timer.h>
44 #include <linux/string.h>
45 #include <linux/slab.h>
46 #include <linux/blkdev.h>
47 #include <linux/delay.h>
48 #include <linux/init.h>
49 #include <linux/completion.h>
50 #include <linux/unistd.h>
51 #include <linux/spinlock.h>
52 #include <linux/kmod.h>
53 #include <linux/interrupt.h>
54 #include <linux/notifier.h>
55 #include <linux/cpu.h>
56 #include <linux/mutex.h>
57 #include <linux/async.h>
58 #include <asm/unaligned.h>
60 #include <scsi/scsi.h>
61 #include <scsi/scsi_cmnd.h>
62 #include <scsi/scsi_dbg.h>
63 #include <scsi/scsi_device.h>
64 #include <scsi/scsi_driver.h>
65 #include <scsi/scsi_eh.h>
66 #include <scsi/scsi_host.h>
67 #include <scsi/scsi_tcq.h>
69 #include "scsi_priv.h"
70 #include "scsi_logging.h"
72 #define CREATE_TRACE_POINTS
73 #include <trace/events/scsi.h>
75 static void scsi_done(struct scsi_cmnd *cmd);
78 * Definitions and constants.
82 * Note - the initial logging level can be set here to log events at boot time.
83 * After the system is up, you may enable logging via the /proc interface.
85 unsigned int scsi_logging_level;
86 #if defined(CONFIG_SCSI_LOGGING)
87 EXPORT_SYMBOL(scsi_logging_level);
88 #endif
90 /* sd, scsi core and power management need to coordinate flushing async actions */
91 ASYNC_DOMAIN(scsi_sd_probe_domain);
92 EXPORT_SYMBOL(scsi_sd_probe_domain);
94 /* NB: These are exposed through /proc/scsi/scsi and form part of the ABI.
95 * You may not alter any existing entry (although adding new ones is
96 * encouraged once assigned by ANSI/INCITS T10
98 static const char *const scsi_device_types[] = {
99 "Direct-Access ",
100 "Sequential-Access",
101 "Printer ",
102 "Processor ",
103 "WORM ",
104 "CD-ROM ",
105 "Scanner ",
106 "Optical Device ",
107 "Medium Changer ",
108 "Communications ",
109 "ASC IT8 ",
110 "ASC IT8 ",
111 "RAID ",
112 "Enclosure ",
113 "Direct-Access-RBC",
114 "Optical card ",
115 "Bridge controller",
116 "Object storage ",
117 "Automation/Drive ",
121 * scsi_device_type - Return 17 char string indicating device type.
122 * @type: type number to look up
125 const char * scsi_device_type(unsigned type)
127 if (type == 0x1e)
128 return "Well-known LUN ";
129 if (type == 0x1f)
130 return "No Device ";
131 if (type >= ARRAY_SIZE(scsi_device_types))
132 return "Unknown ";
133 return scsi_device_types[type];
136 EXPORT_SYMBOL(scsi_device_type);
138 struct scsi_host_cmd_pool {
139 struct kmem_cache *cmd_slab;
140 struct kmem_cache *sense_slab;
141 unsigned int users;
142 char *cmd_name;
143 char *sense_name;
144 unsigned int slab_flags;
145 gfp_t gfp_mask;
148 static struct scsi_host_cmd_pool scsi_cmd_pool = {
149 .cmd_name = "scsi_cmd_cache",
150 .sense_name = "scsi_sense_cache",
151 .slab_flags = SLAB_HWCACHE_ALIGN,
154 static struct scsi_host_cmd_pool scsi_cmd_dma_pool = {
155 .cmd_name = "scsi_cmd_cache(DMA)",
156 .sense_name = "scsi_sense_cache(DMA)",
157 .slab_flags = SLAB_HWCACHE_ALIGN|SLAB_CACHE_DMA,
158 .gfp_mask = __GFP_DMA,
161 static DEFINE_MUTEX(host_cmd_pool_mutex);
164 * scsi_pool_alloc_command - internal function to get a fully allocated command
165 * @pool: slab pool to allocate the command from
166 * @gfp_mask: mask for the allocation
168 * Returns a fully allocated command (with the allied sense buffer) or
169 * NULL on failure
171 static struct scsi_cmnd *
172 scsi_pool_alloc_command(struct scsi_host_cmd_pool *pool, gfp_t gfp_mask)
174 struct scsi_cmnd *cmd;
176 cmd = kmem_cache_zalloc(pool->cmd_slab, gfp_mask | pool->gfp_mask);
177 if (!cmd)
178 return NULL;
180 cmd->sense_buffer = kmem_cache_alloc(pool->sense_slab,
181 gfp_mask | pool->gfp_mask);
182 if (!cmd->sense_buffer) {
183 kmem_cache_free(pool->cmd_slab, cmd);
184 return NULL;
187 return cmd;
191 * scsi_pool_free_command - internal function to release a command
192 * @pool: slab pool to allocate the command from
193 * @cmd: command to release
195 * the command must previously have been allocated by
196 * scsi_pool_alloc_command.
198 static void
199 scsi_pool_free_command(struct scsi_host_cmd_pool *pool,
200 struct scsi_cmnd *cmd)
202 if (cmd->prot_sdb)
203 kmem_cache_free(scsi_sdb_cache, cmd->prot_sdb);
205 kmem_cache_free(pool->sense_slab, cmd->sense_buffer);
206 kmem_cache_free(pool->cmd_slab, cmd);
210 * scsi_host_alloc_command - internal function to allocate command
211 * @shost: SCSI host whose pool to allocate from
212 * @gfp_mask: mask for the allocation
214 * Returns a fully allocated command with sense buffer and protection
215 * data buffer (where applicable) or NULL on failure
217 static struct scsi_cmnd *
218 scsi_host_alloc_command(struct Scsi_Host *shost, gfp_t gfp_mask)
220 struct scsi_cmnd *cmd;
222 cmd = scsi_pool_alloc_command(shost->cmd_pool, gfp_mask);
223 if (!cmd)
224 return NULL;
226 if (scsi_host_get_prot(shost) >= SHOST_DIX_TYPE0_PROTECTION) {
227 cmd->prot_sdb = kmem_cache_zalloc(scsi_sdb_cache, gfp_mask);
229 if (!cmd->prot_sdb) {
230 scsi_pool_free_command(shost->cmd_pool, cmd);
231 return NULL;
235 return cmd;
239 * __scsi_get_command - Allocate a struct scsi_cmnd
240 * @shost: host to transmit command
241 * @gfp_mask: allocation mask
243 * Description: allocate a struct scsi_cmd from host's slab, recycling from the
244 * host's free_list if necessary.
246 struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *shost, gfp_t gfp_mask)
248 struct scsi_cmnd *cmd = scsi_host_alloc_command(shost, gfp_mask);
250 if (unlikely(!cmd)) {
251 unsigned long flags;
253 spin_lock_irqsave(&shost->free_list_lock, flags);
254 if (likely(!list_empty(&shost->free_list))) {
255 cmd = list_entry(shost->free_list.next,
256 struct scsi_cmnd, list);
257 list_del_init(&cmd->list);
259 spin_unlock_irqrestore(&shost->free_list_lock, flags);
261 if (cmd) {
262 void *buf, *prot;
264 buf = cmd->sense_buffer;
265 prot = cmd->prot_sdb;
267 memset(cmd, 0, sizeof(*cmd));
269 cmd->sense_buffer = buf;
270 cmd->prot_sdb = prot;
274 return cmd;
276 EXPORT_SYMBOL_GPL(__scsi_get_command);
279 * scsi_get_command - Allocate and setup a scsi command block
280 * @dev: parent scsi device
281 * @gfp_mask: allocator flags
283 * Returns: The allocated scsi command structure.
285 struct scsi_cmnd *scsi_get_command(struct scsi_device *dev, gfp_t gfp_mask)
287 struct scsi_cmnd *cmd;
289 /* Bail if we can't get a reference to the device */
290 if (!get_device(&dev->sdev_gendev))
291 return NULL;
293 cmd = __scsi_get_command(dev->host, gfp_mask);
295 if (likely(cmd != NULL)) {
296 unsigned long flags;
298 cmd->device = dev;
299 INIT_LIST_HEAD(&cmd->list);
300 spin_lock_irqsave(&dev->list_lock, flags);
301 list_add_tail(&cmd->list, &dev->cmd_list);
302 spin_unlock_irqrestore(&dev->list_lock, flags);
303 cmd->jiffies_at_alloc = jiffies;
304 } else
305 put_device(&dev->sdev_gendev);
307 return cmd;
309 EXPORT_SYMBOL(scsi_get_command);
312 * __scsi_put_command - Free a struct scsi_cmnd
313 * @shost: dev->host
314 * @cmd: Command to free
315 * @dev: parent scsi device
317 void __scsi_put_command(struct Scsi_Host *shost, struct scsi_cmnd *cmd,
318 struct device *dev)
320 unsigned long flags;
322 /* changing locks here, don't need to restore the irq state */
323 spin_lock_irqsave(&shost->free_list_lock, flags);
324 if (unlikely(list_empty(&shost->free_list))) {
325 list_add(&cmd->list, &shost->free_list);
326 cmd = NULL;
328 spin_unlock_irqrestore(&shost->free_list_lock, flags);
330 if (likely(cmd != NULL))
331 scsi_pool_free_command(shost->cmd_pool, cmd);
333 put_device(dev);
335 EXPORT_SYMBOL(__scsi_put_command);
338 * scsi_put_command - Free a scsi command block
339 * @cmd: command block to free
341 * Returns: Nothing.
343 * Notes: The command must not belong to any lists.
345 void scsi_put_command(struct scsi_cmnd *cmd)
347 struct scsi_device *sdev = cmd->device;
348 unsigned long flags;
350 /* serious error if the command hasn't come from a device list */
351 spin_lock_irqsave(&cmd->device->list_lock, flags);
352 BUG_ON(list_empty(&cmd->list));
353 list_del_init(&cmd->list);
354 spin_unlock_irqrestore(&cmd->device->list_lock, flags);
356 __scsi_put_command(cmd->device->host, cmd, &sdev->sdev_gendev);
358 EXPORT_SYMBOL(scsi_put_command);
360 static struct scsi_host_cmd_pool *scsi_get_host_cmd_pool(gfp_t gfp_mask)
362 struct scsi_host_cmd_pool *retval = NULL, *pool;
364 * Select a command slab for this host and create it if not
365 * yet existent.
367 mutex_lock(&host_cmd_pool_mutex);
368 pool = (gfp_mask & __GFP_DMA) ? &scsi_cmd_dma_pool :
369 &scsi_cmd_pool;
370 if (!pool->users) {
371 pool->cmd_slab = kmem_cache_create(pool->cmd_name,
372 sizeof(struct scsi_cmnd), 0,
373 pool->slab_flags, NULL);
374 if (!pool->cmd_slab)
375 goto fail;
377 pool->sense_slab = kmem_cache_create(pool->sense_name,
378 SCSI_SENSE_BUFFERSIZE, 0,
379 pool->slab_flags, NULL);
380 if (!pool->sense_slab) {
381 kmem_cache_destroy(pool->cmd_slab);
382 goto fail;
386 pool->users++;
387 retval = pool;
388 fail:
389 mutex_unlock(&host_cmd_pool_mutex);
390 return retval;
393 static void scsi_put_host_cmd_pool(gfp_t gfp_mask)
395 struct scsi_host_cmd_pool *pool;
397 mutex_lock(&host_cmd_pool_mutex);
398 pool = (gfp_mask & __GFP_DMA) ? &scsi_cmd_dma_pool :
399 &scsi_cmd_pool;
401 * This may happen if a driver has a mismatched get and put
402 * of the command pool; the driver should be implicated in
403 * the stack trace
405 BUG_ON(pool->users == 0);
407 if (!--pool->users) {
408 kmem_cache_destroy(pool->cmd_slab);
409 kmem_cache_destroy(pool->sense_slab);
411 mutex_unlock(&host_cmd_pool_mutex);
415 * scsi_allocate_command - get a fully allocated SCSI command
416 * @gfp_mask: allocation mask
418 * This function is for use outside of the normal host based pools.
419 * It allocates the relevant command and takes an additional reference
420 * on the pool it used. This function *must* be paired with
421 * scsi_free_command which also has the identical mask, otherwise the
422 * free pool counts will eventually go wrong and you'll trigger a bug.
424 * This function should *only* be used by drivers that need a static
425 * command allocation at start of day for internal functions.
427 struct scsi_cmnd *scsi_allocate_command(gfp_t gfp_mask)
429 struct scsi_host_cmd_pool *pool = scsi_get_host_cmd_pool(gfp_mask);
431 if (!pool)
432 return NULL;
434 return scsi_pool_alloc_command(pool, gfp_mask);
436 EXPORT_SYMBOL(scsi_allocate_command);
439 * scsi_free_command - free a command allocated by scsi_allocate_command
440 * @gfp_mask: mask used in the original allocation
441 * @cmd: command to free
443 * Note: using the original allocation mask is vital because that's
444 * what determines which command pool we use to free the command. Any
445 * mismatch will cause the system to BUG eventually.
447 void scsi_free_command(gfp_t gfp_mask, struct scsi_cmnd *cmd)
449 struct scsi_host_cmd_pool *pool = scsi_get_host_cmd_pool(gfp_mask);
452 * this could trigger if the mask to scsi_allocate_command
453 * doesn't match this mask. Otherwise we're guaranteed that this
454 * succeeds because scsi_allocate_command must have taken a reference
455 * on the pool
457 BUG_ON(!pool);
459 scsi_pool_free_command(pool, cmd);
461 * scsi_put_host_cmd_pool is called twice; once to release the
462 * reference we took above, and once to release the reference
463 * originally taken by scsi_allocate_command
465 scsi_put_host_cmd_pool(gfp_mask);
466 scsi_put_host_cmd_pool(gfp_mask);
468 EXPORT_SYMBOL(scsi_free_command);
471 * scsi_setup_command_freelist - Setup the command freelist for a scsi host.
472 * @shost: host to allocate the freelist for.
474 * Description: The command freelist protects against system-wide out of memory
475 * deadlock by preallocating one SCSI command structure for each host, so the
476 * system can always write to a swap file on a device associated with that host.
478 * Returns: Nothing.
480 int scsi_setup_command_freelist(struct Scsi_Host *shost)
482 struct scsi_cmnd *cmd;
483 const gfp_t gfp_mask = shost->unchecked_isa_dma ? GFP_DMA : GFP_KERNEL;
485 spin_lock_init(&shost->free_list_lock);
486 INIT_LIST_HEAD(&shost->free_list);
488 shost->cmd_pool = scsi_get_host_cmd_pool(gfp_mask);
490 if (!shost->cmd_pool)
491 return -ENOMEM;
494 * Get one backup command for this host.
496 cmd = scsi_host_alloc_command(shost, gfp_mask);
497 if (!cmd) {
498 scsi_put_host_cmd_pool(gfp_mask);
499 shost->cmd_pool = NULL;
500 return -ENOMEM;
502 list_add(&cmd->list, &shost->free_list);
503 return 0;
507 * scsi_destroy_command_freelist - Release the command freelist for a scsi host.
508 * @shost: host whose freelist is going to be destroyed
510 void scsi_destroy_command_freelist(struct Scsi_Host *shost)
513 * If cmd_pool is NULL the free list was not initialized, so
514 * do not attempt to release resources.
516 if (!shost->cmd_pool)
517 return;
519 while (!list_empty(&shost->free_list)) {
520 struct scsi_cmnd *cmd;
522 cmd = list_entry(shost->free_list.next, struct scsi_cmnd, list);
523 list_del_init(&cmd->list);
524 scsi_pool_free_command(shost->cmd_pool, cmd);
526 shost->cmd_pool = NULL;
527 scsi_put_host_cmd_pool(shost->unchecked_isa_dma ? GFP_DMA : GFP_KERNEL);
530 #ifdef CONFIG_SCSI_LOGGING
531 void scsi_log_send(struct scsi_cmnd *cmd)
533 unsigned int level;
536 * If ML QUEUE log level is greater than or equal to:
538 * 1: nothing (match completion)
540 * 2: log opcode + command of all commands
542 * 3: same as 2 plus dump cmd address
544 * 4: same as 3 plus dump extra junk
546 if (unlikely(scsi_logging_level)) {
547 level = SCSI_LOG_LEVEL(SCSI_LOG_MLQUEUE_SHIFT,
548 SCSI_LOG_MLQUEUE_BITS);
549 if (level > 1) {
550 scmd_printk(KERN_INFO, cmd, "Send: ");
551 if (level > 2)
552 printk("0x%p ", cmd);
553 printk("\n");
554 scsi_print_command(cmd);
555 if (level > 3) {
556 printk(KERN_INFO "buffer = 0x%p, bufflen = %d,"
557 " queuecommand 0x%p\n",
558 scsi_sglist(cmd), scsi_bufflen(cmd),
559 cmd->device->host->hostt->queuecommand);
566 void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
568 unsigned int level;
571 * If ML COMPLETE log level is greater than or equal to:
573 * 1: log disposition, result, opcode + command, and conditionally
574 * sense data for failures or non SUCCESS dispositions.
576 * 2: same as 1 but for all command completions.
578 * 3: same as 2 plus dump cmd address
580 * 4: same as 3 plus dump extra junk
582 if (unlikely(scsi_logging_level)) {
583 level = SCSI_LOG_LEVEL(SCSI_LOG_MLCOMPLETE_SHIFT,
584 SCSI_LOG_MLCOMPLETE_BITS);
585 if (((level > 0) && (cmd->result || disposition != SUCCESS)) ||
586 (level > 1)) {
587 scmd_printk(KERN_INFO, cmd, "Done: ");
588 if (level > 2)
589 printk("0x%p ", cmd);
591 * Dump truncated values, so we usually fit within
592 * 80 chars.
594 switch (disposition) {
595 case SUCCESS:
596 printk("SUCCESS\n");
597 break;
598 case NEEDS_RETRY:
599 printk("RETRY\n");
600 break;
601 case ADD_TO_MLQUEUE:
602 printk("MLQUEUE\n");
603 break;
604 case FAILED:
605 printk("FAILED\n");
606 break;
607 case TIMEOUT_ERROR:
609 * If called via scsi_times_out.
611 printk("TIMEOUT\n");
612 break;
613 default:
614 printk("UNKNOWN\n");
616 scsi_print_result(cmd);
617 scsi_print_command(cmd);
618 if (status_byte(cmd->result) & CHECK_CONDITION)
619 scsi_print_sense("", cmd);
620 if (level > 3)
621 scmd_printk(KERN_INFO, cmd,
622 "scsi host busy %d failed %d\n",
623 cmd->device->host->host_busy,
624 cmd->device->host->host_failed);
628 #endif
631 * scsi_cmd_get_serial - Assign a serial number to a command
632 * @host: the scsi host
633 * @cmd: command to assign serial number to
635 * Description: a serial number identifies a request for error recovery
636 * and debugging purposes. Protected by the Host_Lock of host.
638 void scsi_cmd_get_serial(struct Scsi_Host *host, struct scsi_cmnd *cmd)
640 cmd->serial_number = host->cmd_serial_number++;
641 if (cmd->serial_number == 0)
642 cmd->serial_number = host->cmd_serial_number++;
644 EXPORT_SYMBOL(scsi_cmd_get_serial);
647 * scsi_dispatch_command - Dispatch a command to the low-level driver.
648 * @cmd: command block we are dispatching.
650 * Return: nonzero return request was rejected and device's queue needs to be
651 * plugged.
653 int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
655 struct Scsi_Host *host = cmd->device->host;
656 int rtn = 0;
658 atomic_inc(&cmd->device->iorequest_cnt);
660 /* check if the device is still usable */
661 if (unlikely(cmd->device->sdev_state == SDEV_DEL)) {
662 /* in SDEV_DEL we error all commands. DID_NO_CONNECT
663 * returns an immediate error upwards, and signals
664 * that the device is no longer present */
665 cmd->result = DID_NO_CONNECT << 16;
666 scsi_done(cmd);
667 /* return 0 (because the command has been processed) */
668 goto out;
671 /* Check to see if the scsi lld made this device blocked. */
672 if (unlikely(scsi_device_blocked(cmd->device))) {
674 * in blocked state, the command is just put back on
675 * the device queue. The suspend state has already
676 * blocked the queue so future requests should not
677 * occur until the device transitions out of the
678 * suspend state.
681 scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
683 SCSI_LOG_MLQUEUE(3, printk("queuecommand : device blocked \n"));
686 * NOTE: rtn is still zero here because we don't need the
687 * queue to be plugged on return (it's already stopped)
689 goto out;
693 * If SCSI-2 or lower, store the LUN value in cmnd.
695 if (cmd->device->scsi_level <= SCSI_2 &&
696 cmd->device->scsi_level != SCSI_UNKNOWN) {
697 cmd->cmnd[1] = (cmd->cmnd[1] & 0x1f) |
698 (cmd->device->lun << 5 & 0xe0);
701 scsi_log_send(cmd);
704 * Before we queue this command, check if the command
705 * length exceeds what the host adapter can handle.
707 if (cmd->cmd_len > cmd->device->host->max_cmd_len) {
708 SCSI_LOG_MLQUEUE(3,
709 printk("queuecommand : command too long. "
710 "cdb_size=%d host->max_cmd_len=%d\n",
711 cmd->cmd_len, cmd->device->host->max_cmd_len));
712 cmd->result = (DID_ABORT << 16);
714 scsi_done(cmd);
715 goto out;
718 if (unlikely(host->shost_state == SHOST_DEL)) {
719 cmd->result = (DID_NO_CONNECT << 16);
720 scsi_done(cmd);
721 } else {
722 trace_scsi_dispatch_cmd_start(cmd);
723 cmd->scsi_done = scsi_done;
724 rtn = host->hostt->queuecommand(host, cmd);
727 if (rtn) {
728 trace_scsi_dispatch_cmd_error(cmd, rtn);
729 if (rtn != SCSI_MLQUEUE_DEVICE_BUSY &&
730 rtn != SCSI_MLQUEUE_TARGET_BUSY)
731 rtn = SCSI_MLQUEUE_HOST_BUSY;
733 scsi_queue_insert(cmd, rtn);
735 SCSI_LOG_MLQUEUE(3,
736 printk("queuecommand : request rejected\n"));
739 out:
740 SCSI_LOG_MLQUEUE(3, printk("leaving scsi_dispatch_cmnd()\n"));
741 return rtn;
745 * scsi_done - Enqueue the finished SCSI command into the done queue.
746 * @cmd: The SCSI Command for which a low-level device driver (LLDD) gives
747 * ownership back to SCSI Core -- i.e. the LLDD has finished with it.
749 * Description: This function is the mid-level's (SCSI Core) interrupt routine,
750 * which regains ownership of the SCSI command (de facto) from a LLDD, and
751 * enqueues the command to the done queue for further processing.
753 * This is the producer of the done queue who enqueues at the tail.
755 * This function is interrupt context safe.
757 static void scsi_done(struct scsi_cmnd *cmd)
759 trace_scsi_dispatch_cmd_done(cmd);
760 blk_complete_request(cmd->request);
764 * scsi_finish_command - cleanup and pass command back to upper layer
765 * @cmd: the command
767 * Description: Pass command off to upper layer for finishing of I/O
768 * request, waking processes that are waiting on results,
769 * etc.
771 void scsi_finish_command(struct scsi_cmnd *cmd)
773 struct scsi_device *sdev = cmd->device;
774 struct scsi_target *starget = scsi_target(sdev);
775 struct Scsi_Host *shost = sdev->host;
776 struct scsi_driver *drv;
777 unsigned int good_bytes;
779 scsi_device_unbusy(sdev);
782 * Clear the flags which say that the device/host is no longer
783 * capable of accepting new commands. These are set in scsi_queue.c
784 * for both the queue full condition on a device, and for a
785 * host full condition on the host.
787 * XXX(hch): What about locking?
789 shost->host_blocked = 0;
790 starget->target_blocked = 0;
791 sdev->device_blocked = 0;
794 * If we have valid sense information, then some kind of recovery
795 * must have taken place. Make a note of this.
797 if (SCSI_SENSE_VALID(cmd))
798 cmd->result |= (DRIVER_SENSE << 24);
800 SCSI_LOG_MLCOMPLETE(4, sdev_printk(KERN_INFO, sdev,
801 "Notifying upper driver of completion "
802 "(result %x)\n", cmd->result));
804 good_bytes = scsi_bufflen(cmd);
805 if (cmd->request->cmd_type != REQ_TYPE_BLOCK_PC) {
806 int old_good_bytes = good_bytes;
807 drv = scsi_cmd_to_driver(cmd);
808 if (drv->done)
809 good_bytes = drv->done(cmd);
811 * USB may not give sense identifying bad sector and
812 * simply return a residue instead, so subtract off the
813 * residue if drv->done() error processing indicates no
814 * change to the completion length.
816 if (good_bytes == old_good_bytes)
817 good_bytes -= scsi_get_resid(cmd);
819 scsi_io_completion(cmd, good_bytes);
821 EXPORT_SYMBOL(scsi_finish_command);
824 * scsi_adjust_queue_depth - Let low level drivers change a device's queue depth
825 * @sdev: SCSI Device in question
826 * @tagged: Do we use tagged queueing (non-0) or do we treat
827 * this device as an untagged device (0)
828 * @tags: Number of tags allowed if tagged queueing enabled,
829 * or number of commands the low level driver can
830 * queue up in non-tagged mode (as per cmd_per_lun).
832 * Returns: Nothing
834 * Lock Status: None held on entry
836 * Notes: Low level drivers may call this at any time and we will do
837 * the right thing depending on whether or not the device is
838 * currently active and whether or not it even has the
839 * command blocks built yet.
841 void scsi_adjust_queue_depth(struct scsi_device *sdev, int tagged, int tags)
843 unsigned long flags;
846 * refuse to set tagged depth to an unworkable size
848 if (tags <= 0)
849 return;
851 spin_lock_irqsave(sdev->request_queue->queue_lock, flags);
854 * Check to see if the queue is managed by the block layer.
855 * If it is, and we fail to adjust the depth, exit.
857 * Do not resize the tag map if it is a host wide share bqt,
858 * because the size should be the hosts's can_queue. If there
859 * is more IO than the LLD's can_queue (so there are not enuogh
860 * tags) request_fn's host queue ready check will handle it.
862 if (!sdev->host->bqt) {
863 if (blk_queue_tagged(sdev->request_queue) &&
864 blk_queue_resize_tags(sdev->request_queue, tags) != 0)
865 goto out;
868 sdev->queue_depth = tags;
869 switch (tagged) {
870 case MSG_ORDERED_TAG:
871 sdev->ordered_tags = 1;
872 sdev->simple_tags = 1;
873 break;
874 case MSG_SIMPLE_TAG:
875 sdev->ordered_tags = 0;
876 sdev->simple_tags = 1;
877 break;
878 default:
879 sdev_printk(KERN_WARNING, sdev,
880 "scsi_adjust_queue_depth, bad queue type, "
881 "disabled\n");
882 case 0:
883 sdev->ordered_tags = sdev->simple_tags = 0;
884 sdev->queue_depth = tags;
885 break;
887 out:
888 spin_unlock_irqrestore(sdev->request_queue->queue_lock, flags);
890 EXPORT_SYMBOL(scsi_adjust_queue_depth);
893 * scsi_track_queue_full - track QUEUE_FULL events to adjust queue depth
894 * @sdev: SCSI Device in question
895 * @depth: Current number of outstanding SCSI commands on this device,
896 * not counting the one returned as QUEUE_FULL.
898 * Description: This function will track successive QUEUE_FULL events on a
899 * specific SCSI device to determine if and when there is a
900 * need to adjust the queue depth on the device.
902 * Returns: 0 - No change needed, >0 - Adjust queue depth to this new depth,
903 * -1 - Drop back to untagged operation using host->cmd_per_lun
904 * as the untagged command depth
906 * Lock Status: None held on entry
908 * Notes: Low level drivers may call this at any time and we will do
909 * "The Right Thing." We are interrupt context safe.
911 int scsi_track_queue_full(struct scsi_device *sdev, int depth)
915 * Don't let QUEUE_FULLs on the same
916 * jiffies count, they could all be from
917 * same event.
919 if ((jiffies >> 4) == (sdev->last_queue_full_time >> 4))
920 return 0;
922 sdev->last_queue_full_time = jiffies;
923 if (sdev->last_queue_full_depth != depth) {
924 sdev->last_queue_full_count = 1;
925 sdev->last_queue_full_depth = depth;
926 } else {
927 sdev->last_queue_full_count++;
930 if (sdev->last_queue_full_count <= 10)
931 return 0;
932 if (sdev->last_queue_full_depth < 8) {
933 /* Drop back to untagged */
934 scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun);
935 return -1;
938 if (sdev->ordered_tags)
939 scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, depth);
940 else
941 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth);
942 return depth;
944 EXPORT_SYMBOL(scsi_track_queue_full);
947 * scsi_vpd_inquiry - Request a device provide us with a VPD page
948 * @sdev: The device to ask
949 * @buffer: Where to put the result
950 * @page: Which Vital Product Data to return
951 * @len: The length of the buffer
953 * This is an internal helper function. You probably want to use
954 * scsi_get_vpd_page instead.
956 * Returns 0 on success or a negative error number.
958 static int scsi_vpd_inquiry(struct scsi_device *sdev, unsigned char *buffer,
959 u8 page, unsigned len)
961 int result;
962 unsigned char cmd[16];
964 cmd[0] = INQUIRY;
965 cmd[1] = 1; /* EVPD */
966 cmd[2] = page;
967 cmd[3] = len >> 8;
968 cmd[4] = len & 0xff;
969 cmd[5] = 0; /* Control byte */
972 * I'm not convinced we need to try quite this hard to get VPD, but
973 * all the existing users tried this hard.
975 result = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buffer,
976 len, NULL, 30 * HZ, 3, NULL);
977 if (result)
978 return result;
980 /* Sanity check that we got the page back that we asked for */
981 if (buffer[1] != page)
982 return -EIO;
984 return 0;
988 * scsi_get_vpd_page - Get Vital Product Data from a SCSI device
989 * @sdev: The device to ask
990 * @page: Which Vital Product Data to return
991 * @buf: where to store the VPD
992 * @buf_len: number of bytes in the VPD buffer area
994 * SCSI devices may optionally supply Vital Product Data. Each 'page'
995 * of VPD is defined in the appropriate SCSI document (eg SPC, SBC).
996 * If the device supports this VPD page, this routine returns a pointer
997 * to a buffer containing the data from that page. The caller is
998 * responsible for calling kfree() on this pointer when it is no longer
999 * needed. If we cannot retrieve the VPD page this routine returns %NULL.
1001 int scsi_get_vpd_page(struct scsi_device *sdev, u8 page, unsigned char *buf,
1002 int buf_len)
1004 int i, result;
1006 if (sdev->skip_vpd_pages)
1007 goto fail;
1009 /* Ask for all the pages supported by this device */
1010 result = scsi_vpd_inquiry(sdev, buf, 0, buf_len);
1011 if (result)
1012 goto fail;
1014 /* If the user actually wanted this page, we can skip the rest */
1015 if (page == 0)
1016 return 0;
1018 for (i = 0; i < min((int)buf[3], buf_len - 4); i++)
1019 if (buf[i + 4] == page)
1020 goto found;
1022 if (i < buf[3] && i >= buf_len - 4)
1023 /* ran off the end of the buffer, give us benefit of doubt */
1024 goto found;
1025 /* The device claims it doesn't support the requested page */
1026 goto fail;
1028 found:
1029 result = scsi_vpd_inquiry(sdev, buf, page, buf_len);
1030 if (result)
1031 goto fail;
1033 return 0;
1035 fail:
1036 return -EINVAL;
1038 EXPORT_SYMBOL_GPL(scsi_get_vpd_page);
1041 * scsi_report_opcode - Find out if a given command opcode is supported
1042 * @sdev: scsi device to query
1043 * @buffer: scratch buffer (must be at least 20 bytes long)
1044 * @len: length of buffer
1045 * @opcode: opcode for command to look up
1047 * Uses the REPORT SUPPORTED OPERATION CODES to look up the given
1048 * opcode. Returns -EINVAL if RSOC fails, 0 if the command opcode is
1049 * unsupported and 1 if the device claims to support the command.
1051 int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer,
1052 unsigned int len, unsigned char opcode)
1054 unsigned char cmd[16];
1055 struct scsi_sense_hdr sshdr;
1056 int result;
1058 if (sdev->no_report_opcodes || sdev->scsi_level < SCSI_SPC_3)
1059 return -EINVAL;
1061 memset(cmd, 0, 16);
1062 cmd[0] = MAINTENANCE_IN;
1063 cmd[1] = MI_REPORT_SUPPORTED_OPERATION_CODES;
1064 cmd[2] = 1; /* One command format */
1065 cmd[3] = opcode;
1066 put_unaligned_be32(len, &cmd[6]);
1067 memset(buffer, 0, len);
1069 result = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buffer, len,
1070 &sshdr, 30 * HZ, 3, NULL);
1072 if (result && scsi_sense_valid(&sshdr) &&
1073 sshdr.sense_key == ILLEGAL_REQUEST &&
1074 (sshdr.asc == 0x20 || sshdr.asc == 0x24) && sshdr.ascq == 0x00)
1075 return -EINVAL;
1077 if ((buffer[1] & 3) == 3) /* Command supported */
1078 return 1;
1080 return 0;
1082 EXPORT_SYMBOL(scsi_report_opcode);
1085 * scsi_device_get - get an additional reference to a scsi_device
1086 * @sdev: device to get a reference to
1088 * Description: Gets a reference to the scsi_device and increments the use count
1089 * of the underlying LLDD module. You must hold host_lock of the
1090 * parent Scsi_Host or already have a reference when calling this.
1092 int scsi_device_get(struct scsi_device *sdev)
1094 if (sdev->sdev_state == SDEV_DEL)
1095 return -ENXIO;
1096 if (!get_device(&sdev->sdev_gendev))
1097 return -ENXIO;
1098 /* We can fail this if we're doing SCSI operations
1099 * from module exit (like cache flush) */
1100 try_module_get(sdev->host->hostt->module);
1102 return 0;
1104 EXPORT_SYMBOL(scsi_device_get);
1107 * scsi_device_put - release a reference to a scsi_device
1108 * @sdev: device to release a reference on.
1110 * Description: Release a reference to the scsi_device and decrements the use
1111 * count of the underlying LLDD module. The device is freed once the last
1112 * user vanishes.
1114 void scsi_device_put(struct scsi_device *sdev)
1116 #ifdef CONFIG_MODULE_UNLOAD
1117 struct module *module = sdev->host->hostt->module;
1119 /* The module refcount will be zero if scsi_device_get()
1120 * was called from a module removal routine */
1121 if (module && module_refcount(module) != 0)
1122 module_put(module);
1123 #endif
1124 put_device(&sdev->sdev_gendev);
1126 EXPORT_SYMBOL(scsi_device_put);
1128 /* helper for shost_for_each_device, see that for documentation */
1129 struct scsi_device *__scsi_iterate_devices(struct Scsi_Host *shost,
1130 struct scsi_device *prev)
1132 struct list_head *list = (prev ? &prev->siblings : &shost->__devices);
1133 struct scsi_device *next = NULL;
1134 unsigned long flags;
1136 spin_lock_irqsave(shost->host_lock, flags);
1137 while (list->next != &shost->__devices) {
1138 next = list_entry(list->next, struct scsi_device, siblings);
1139 /* skip devices that we can't get a reference to */
1140 if (!scsi_device_get(next))
1141 break;
1142 next = NULL;
1143 list = list->next;
1145 spin_unlock_irqrestore(shost->host_lock, flags);
1147 if (prev)
1148 scsi_device_put(prev);
1149 return next;
1151 EXPORT_SYMBOL(__scsi_iterate_devices);
1154 * starget_for_each_device - helper to walk all devices of a target
1155 * @starget: target whose devices we want to iterate over.
1156 * @data: Opaque passed to each function call.
1157 * @fn: Function to call on each device
1159 * This traverses over each device of @starget. The devices have
1160 * a reference that must be released by scsi_host_put when breaking
1161 * out of the loop.
1163 void starget_for_each_device(struct scsi_target *starget, void *data,
1164 void (*fn)(struct scsi_device *, void *))
1166 struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
1167 struct scsi_device *sdev;
1169 shost_for_each_device(sdev, shost) {
1170 if ((sdev->channel == starget->channel) &&
1171 (sdev->id == starget->id))
1172 fn(sdev, data);
1175 EXPORT_SYMBOL(starget_for_each_device);
1178 * __starget_for_each_device - helper to walk all devices of a target (UNLOCKED)
1179 * @starget: target whose devices we want to iterate over.
1180 * @data: parameter for callback @fn()
1181 * @fn: callback function that is invoked for each device
1183 * This traverses over each device of @starget. It does _not_
1184 * take a reference on the scsi_device, so the whole loop must be
1185 * protected by shost->host_lock.
1187 * Note: The only reason why drivers would want to use this is because
1188 * they need to access the device list in irq context. Otherwise you
1189 * really want to use starget_for_each_device instead.
1191 void __starget_for_each_device(struct scsi_target *starget, void *data,
1192 void (*fn)(struct scsi_device *, void *))
1194 struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
1195 struct scsi_device *sdev;
1197 __shost_for_each_device(sdev, shost) {
1198 if ((sdev->channel == starget->channel) &&
1199 (sdev->id == starget->id))
1200 fn(sdev, data);
1203 EXPORT_SYMBOL(__starget_for_each_device);
1206 * __scsi_device_lookup_by_target - find a device given the target (UNLOCKED)
1207 * @starget: SCSI target pointer
1208 * @lun: SCSI Logical Unit Number
1210 * Description: Looks up the scsi_device with the specified @lun for a given
1211 * @starget. The returned scsi_device does not have an additional
1212 * reference. You must hold the host's host_lock over this call and
1213 * any access to the returned scsi_device. A scsi_device in state
1214 * SDEV_DEL is skipped.
1216 * Note: The only reason why drivers should use this is because
1217 * they need to access the device list in irq context. Otherwise you
1218 * really want to use scsi_device_lookup_by_target instead.
1220 struct scsi_device *__scsi_device_lookup_by_target(struct scsi_target *starget,
1221 uint lun)
1223 struct scsi_device *sdev;
1225 list_for_each_entry(sdev, &starget->devices, same_target_siblings) {
1226 if (sdev->sdev_state == SDEV_DEL)
1227 continue;
1228 if (sdev->lun ==lun)
1229 return sdev;
1232 return NULL;
1234 EXPORT_SYMBOL(__scsi_device_lookup_by_target);
1237 * scsi_device_lookup_by_target - find a device given the target
1238 * @starget: SCSI target pointer
1239 * @lun: SCSI Logical Unit Number
1241 * Description: Looks up the scsi_device with the specified @lun for a given
1242 * @starget. The returned scsi_device has an additional reference that
1243 * needs to be released with scsi_device_put once you're done with it.
1245 struct scsi_device *scsi_device_lookup_by_target(struct scsi_target *starget,
1246 uint lun)
1248 struct scsi_device *sdev;
1249 struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
1250 unsigned long flags;
1252 spin_lock_irqsave(shost->host_lock, flags);
1253 sdev = __scsi_device_lookup_by_target(starget, lun);
1254 if (sdev && scsi_device_get(sdev))
1255 sdev = NULL;
1256 spin_unlock_irqrestore(shost->host_lock, flags);
1258 return sdev;
1260 EXPORT_SYMBOL(scsi_device_lookup_by_target);
1263 * __scsi_device_lookup - find a device given the host (UNLOCKED)
1264 * @shost: SCSI host pointer
1265 * @channel: SCSI channel (zero if only one channel)
1266 * @id: SCSI target number (physical unit number)
1267 * @lun: SCSI Logical Unit Number
1269 * Description: Looks up the scsi_device with the specified @channel, @id, @lun
1270 * for a given host. The returned scsi_device does not have an additional
1271 * reference. You must hold the host's host_lock over this call and any access
1272 * to the returned scsi_device.
1274 * Note: The only reason why drivers would want to use this is because
1275 * they need to access the device list in irq context. Otherwise you
1276 * really want to use scsi_device_lookup instead.
1278 struct scsi_device *__scsi_device_lookup(struct Scsi_Host *shost,
1279 uint channel, uint id, uint lun)
1281 struct scsi_device *sdev;
1283 list_for_each_entry(sdev, &shost->__devices, siblings) {
1284 if (sdev->channel == channel && sdev->id == id &&
1285 sdev->lun ==lun)
1286 return sdev;
1289 return NULL;
1291 EXPORT_SYMBOL(__scsi_device_lookup);
1294 * scsi_device_lookup - find a device given the host
1295 * @shost: SCSI host pointer
1296 * @channel: SCSI channel (zero if only one channel)
1297 * @id: SCSI target number (physical unit number)
1298 * @lun: SCSI Logical Unit Number
1300 * Description: Looks up the scsi_device with the specified @channel, @id, @lun
1301 * for a given host. The returned scsi_device has an additional reference that
1302 * needs to be released with scsi_device_put once you're done with it.
1304 struct scsi_device *scsi_device_lookup(struct Scsi_Host *shost,
1305 uint channel, uint id, uint lun)
1307 struct scsi_device *sdev;
1308 unsigned long flags;
1310 spin_lock_irqsave(shost->host_lock, flags);
1311 sdev = __scsi_device_lookup(shost, channel, id, lun);
1312 if (sdev && scsi_device_get(sdev))
1313 sdev = NULL;
1314 spin_unlock_irqrestore(shost->host_lock, flags);
1316 return sdev;
1318 EXPORT_SYMBOL(scsi_device_lookup);
1320 MODULE_DESCRIPTION("SCSI core");
1321 MODULE_LICENSE("GPL");
1323 module_param(scsi_logging_level, int, S_IRUGO|S_IWUSR);
1324 MODULE_PARM_DESC(scsi_logging_level, "a bit mask of logging levels");
1326 static int __init init_scsi(void)
1328 int error;
1330 error = scsi_init_queue();
1331 if (error)
1332 return error;
1333 error = scsi_init_procfs();
1334 if (error)
1335 goto cleanup_queue;
1336 error = scsi_init_devinfo();
1337 if (error)
1338 goto cleanup_procfs;
1339 error = scsi_init_hosts();
1340 if (error)
1341 goto cleanup_devlist;
1342 error = scsi_init_sysctl();
1343 if (error)
1344 goto cleanup_hosts;
1345 error = scsi_sysfs_register();
1346 if (error)
1347 goto cleanup_sysctl;
1349 scsi_netlink_init();
1351 printk(KERN_NOTICE "SCSI subsystem initialized\n");
1352 return 0;
1354 cleanup_sysctl:
1355 scsi_exit_sysctl();
1356 cleanup_hosts:
1357 scsi_exit_hosts();
1358 cleanup_devlist:
1359 scsi_exit_devinfo();
1360 cleanup_procfs:
1361 scsi_exit_procfs();
1362 cleanup_queue:
1363 scsi_exit_queue();
1364 printk(KERN_ERR "SCSI subsystem failed to initialize, error = %d\n",
1365 -error);
1366 return error;
1369 static void __exit exit_scsi(void)
1371 scsi_netlink_exit();
1372 scsi_sysfs_unregister();
1373 scsi_exit_sysctl();
1374 scsi_exit_hosts();
1375 scsi_exit_devinfo();
1376 scsi_exit_procfs();
1377 scsi_exit_queue();
1378 async_unregister_domain(&scsi_sd_probe_domain);
1381 subsys_initcall(init_scsi);
1382 module_exit(exit_scsi);