[SCSI] Add Documentation and integrate into docbook build
[safe/jmp/linux-2.6] / drivers / scsi / scsi.c
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
5  *
6  *  generic mid-level SCSI driver
7  *      Initial versions: Drew Eckhardt
8  *      Subsequent revisions: Eric Youngdale
9  *
10  *  <drew@colorado.edu>
11  *
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>
16  *
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.
20  *
21  *  Native multichannel, wide scsi, /proc/scsi and hot plugging
22  *  support added by Michael Neuffer <mike@i-connect.net>
23  *
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)
28  *
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>
32  *
33  *  Converted cli() code to spinlocks, Ingo Molnar
34  *
35  *  Jiffies wrap fixes (host->resetting), 3 Dec 1998 Andrea Arcangeli
36  *
37  *  out_of_space hacks, D. Gilbert (dpg) 990608
38  */
39
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
58 #include <scsi/scsi.h>
59 #include <scsi/scsi_cmnd.h>
60 #include <scsi/scsi_dbg.h>
61 #include <scsi/scsi_device.h>
62 #include <scsi/scsi_driver.h>
63 #include <scsi/scsi_eh.h>
64 #include <scsi/scsi_host.h>
65 #include <scsi/scsi_tcq.h>
66
67 #include "scsi_priv.h"
68 #include "scsi_logging.h"
69
70 static void scsi_done(struct scsi_cmnd *cmd);
71
72 /*
73  * Definitions and constants.
74  */
75
76 #define MIN_RESET_DELAY (2*HZ)
77
78 /* Do not call reset on error if we just did a reset within 15 sec. */
79 #define MIN_RESET_PERIOD (15*HZ)
80
81 /*
82  * Macro to determine the size of SCSI command. This macro takes vendor
83  * unique commands into account. SCSI commands in groups 6 and 7 are
84  * vendor unique and we will depend upon the command length being
85  * supplied correctly in cmd_len.
86  */
87 #define CDB_SIZE(cmd)   (((((cmd)->cmnd[0] >> 5) & 7) < 6) ? \
88                                 COMMAND_SIZE((cmd)->cmnd[0]) : (cmd)->cmd_len)
89
90 /*
91  * Note - the initial logging level can be set here to log events at boot time.
92  * After the system is up, you may enable logging via the /proc interface.
93  */
94 unsigned int scsi_logging_level;
95 #if defined(CONFIG_SCSI_LOGGING)
96 EXPORT_SYMBOL(scsi_logging_level);
97 #endif
98
99 /* NB: These are exposed through /proc/scsi/scsi and form part of the ABI.
100  * You may not alter any existing entry (although adding new ones is
101  * encouraged once assigned by ANSI/INCITS T10
102  */
103 static const char *const scsi_device_types[] = {
104         "Direct-Access    ",
105         "Sequential-Access",
106         "Printer          ",
107         "Processor        ",
108         "WORM             ",
109         "CD-ROM           ",
110         "Scanner          ",
111         "Optical Device   ",
112         "Medium Changer   ",
113         "Communications   ",
114         "ASC IT8          ",
115         "ASC IT8          ",
116         "RAID             ",
117         "Enclosure        ",
118         "Direct-Access-RBC",
119         "Optical card     ",
120         "Bridge controller",
121         "Object storage   ",
122         "Automation/Drive ",
123 };
124
125 /**
126  * scsi_device_type - Return 17 char string indicating device type.
127  * @type: type number to look up
128  */
129
130 const char * scsi_device_type(unsigned type)
131 {
132         if (type == 0x1e)
133                 return "Well-known LUN   ";
134         if (type == 0x1f)
135                 return "No Device        ";
136         if (type >= ARRAY_SIZE(scsi_device_types))
137                 return "Unknown          ";
138         return scsi_device_types[type];
139 }
140
141 EXPORT_SYMBOL(scsi_device_type);
142
143 struct scsi_host_cmd_pool {
144         struct kmem_cache       *slab;
145         unsigned int    users;
146         char            *name;
147         unsigned int    slab_flags;
148         gfp_t           gfp_mask;
149 };
150
151 static struct scsi_host_cmd_pool scsi_cmd_pool = {
152         .name           = "scsi_cmd_cache",
153         .slab_flags     = SLAB_HWCACHE_ALIGN,
154 };
155
156 static struct scsi_host_cmd_pool scsi_cmd_dma_pool = {
157         .name           = "scsi_cmd_cache(DMA)",
158         .slab_flags     = SLAB_HWCACHE_ALIGN|SLAB_CACHE_DMA,
159         .gfp_mask       = __GFP_DMA,
160 };
161
162 static DEFINE_MUTEX(host_cmd_pool_mutex);
163
164 /**
165  * __scsi_get_command - Allocate a struct scsi_cmnd
166  * @shost: host to transmit command
167  * @gfp_mask: allocation mask
168  *
169  * Description: allocate a struct scsi_cmd from host's slab, recycling from the
170  *              host's free_list if necessary.
171  */
172 struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *shost, gfp_t gfp_mask)
173 {
174         struct scsi_cmnd *cmd;
175
176         cmd = kmem_cache_alloc(shost->cmd_pool->slab,
177                         gfp_mask | shost->cmd_pool->gfp_mask);
178
179         if (unlikely(!cmd)) {
180                 unsigned long flags;
181
182                 spin_lock_irqsave(&shost->free_list_lock, flags);
183                 if (likely(!list_empty(&shost->free_list))) {
184                         cmd = list_entry(shost->free_list.next,
185                                          struct scsi_cmnd, list);
186                         list_del_init(&cmd->list);
187                 }
188                 spin_unlock_irqrestore(&shost->free_list_lock, flags);
189         }
190
191         return cmd;
192 }
193 EXPORT_SYMBOL_GPL(__scsi_get_command);
194
195 /**
196  * scsi_get_command - Allocate and setup a scsi command block
197  * @dev: parent scsi device
198  * @gfp_mask: allocator flags
199  *
200  * Returns:     The allocated scsi command structure.
201  */
202 struct scsi_cmnd *scsi_get_command(struct scsi_device *dev, gfp_t gfp_mask)
203 {
204         struct scsi_cmnd *cmd;
205
206         /* Bail if we can't get a reference to the device */
207         if (!get_device(&dev->sdev_gendev))
208                 return NULL;
209
210         cmd = __scsi_get_command(dev->host, gfp_mask);
211
212         if (likely(cmd != NULL)) {
213                 unsigned long flags;
214
215                 memset(cmd, 0, sizeof(*cmd));
216                 cmd->device = dev;
217                 init_timer(&cmd->eh_timeout);
218                 INIT_LIST_HEAD(&cmd->list);
219                 spin_lock_irqsave(&dev->list_lock, flags);
220                 list_add_tail(&cmd->list, &dev->cmd_list);
221                 spin_unlock_irqrestore(&dev->list_lock, flags);
222                 cmd->jiffies_at_alloc = jiffies;
223         } else
224                 put_device(&dev->sdev_gendev);
225
226         return cmd;
227 }
228 EXPORT_SYMBOL(scsi_get_command);
229
230 /**
231  * __scsi_put_command - Free a struct scsi_cmnd
232  * @shost: dev->host
233  * @cmd: Command to free
234  * @dev: parent scsi device
235  */
236 void __scsi_put_command(struct Scsi_Host *shost, struct scsi_cmnd *cmd,
237                         struct device *dev)
238 {
239         unsigned long flags;
240
241         /* changing locks here, don't need to restore the irq state */
242         spin_lock_irqsave(&shost->free_list_lock, flags);
243         if (unlikely(list_empty(&shost->free_list))) {
244                 list_add(&cmd->list, &shost->free_list);
245                 cmd = NULL;
246         }
247         spin_unlock_irqrestore(&shost->free_list_lock, flags);
248
249         if (likely(cmd != NULL))
250                 kmem_cache_free(shost->cmd_pool->slab, cmd);
251
252         put_device(dev);
253 }
254 EXPORT_SYMBOL(__scsi_put_command);
255
256 /**
257  * scsi_put_command - Free a scsi command block
258  * @cmd: command block to free
259  *
260  * Returns:     Nothing.
261  *
262  * Notes:       The command must not belong to any lists.
263  */
264 void scsi_put_command(struct scsi_cmnd *cmd)
265 {
266         struct scsi_device *sdev = cmd->device;
267         unsigned long flags;
268
269         /* serious error if the command hasn't come from a device list */
270         spin_lock_irqsave(&cmd->device->list_lock, flags);
271         BUG_ON(list_empty(&cmd->list));
272         list_del_init(&cmd->list);
273         spin_unlock_irqrestore(&cmd->device->list_lock, flags);
274
275         __scsi_put_command(cmd->device->host, cmd, &sdev->sdev_gendev);
276 }
277 EXPORT_SYMBOL(scsi_put_command);
278
279 /**
280  * scsi_setup_command_freelist - Setup the command freelist for a scsi host.
281  * @shost: host to allocate the freelist for.
282  *
283  * Description: The command freelist protects against system-wide out of memory
284  * deadlock by preallocating one SCSI command structure for each host, so the
285  * system can always write to a swap file on a device associated with that host.
286  *
287  * Returns:     Nothing.
288  */
289 int scsi_setup_command_freelist(struct Scsi_Host *shost)
290 {
291         struct scsi_host_cmd_pool *pool;
292         struct scsi_cmnd *cmd;
293
294         spin_lock_init(&shost->free_list_lock);
295         INIT_LIST_HEAD(&shost->free_list);
296
297         /*
298          * Select a command slab for this host and create it if not
299          * yet existent.
300          */
301         mutex_lock(&host_cmd_pool_mutex);
302         pool = (shost->unchecked_isa_dma ? &scsi_cmd_dma_pool : &scsi_cmd_pool);
303         if (!pool->users) {
304                 pool->slab = kmem_cache_create(pool->name,
305                                 sizeof(struct scsi_cmnd), 0,
306                                 pool->slab_flags, NULL);
307                 if (!pool->slab)
308                         goto fail;
309         }
310
311         pool->users++;
312         shost->cmd_pool = pool;
313         mutex_unlock(&host_cmd_pool_mutex);
314
315         /*
316          * Get one backup command for this host.
317          */
318         cmd = kmem_cache_alloc(shost->cmd_pool->slab,
319                         GFP_KERNEL | shost->cmd_pool->gfp_mask);
320         if (!cmd)
321                 goto fail2;
322         list_add(&cmd->list, &shost->free_list);                
323         return 0;
324
325  fail2:
326         if (!--pool->users)
327                 kmem_cache_destroy(pool->slab);
328         return -ENOMEM;
329  fail:
330         mutex_unlock(&host_cmd_pool_mutex);
331         return -ENOMEM;
332
333 }
334
335 /**
336  * scsi_destroy_command_freelist - Release the command freelist for a scsi host.
337  * @shost: host whose freelist is going to be destroyed
338  */
339 void scsi_destroy_command_freelist(struct Scsi_Host *shost)
340 {
341         while (!list_empty(&shost->free_list)) {
342                 struct scsi_cmnd *cmd;
343
344                 cmd = list_entry(shost->free_list.next, struct scsi_cmnd, list);
345                 list_del_init(&cmd->list);
346                 kmem_cache_free(shost->cmd_pool->slab, cmd);
347         }
348
349         mutex_lock(&host_cmd_pool_mutex);
350         if (!--shost->cmd_pool->users)
351                 kmem_cache_destroy(shost->cmd_pool->slab);
352         mutex_unlock(&host_cmd_pool_mutex);
353 }
354
355 #ifdef CONFIG_SCSI_LOGGING
356 void scsi_log_send(struct scsi_cmnd *cmd)
357 {
358         unsigned int level;
359
360         /*
361          * If ML QUEUE log level is greater than or equal to:
362          *
363          * 1: nothing (match completion)
364          *
365          * 2: log opcode + command of all commands
366          *
367          * 3: same as 2 plus dump cmd address
368          *
369          * 4: same as 3 plus dump extra junk
370          */
371         if (unlikely(scsi_logging_level)) {
372                 level = SCSI_LOG_LEVEL(SCSI_LOG_MLQUEUE_SHIFT,
373                                        SCSI_LOG_MLQUEUE_BITS);
374                 if (level > 1) {
375                         scmd_printk(KERN_INFO, cmd, "Send: ");
376                         if (level > 2)
377                                 printk("0x%p ", cmd);
378                         printk("\n");
379                         scsi_print_command(cmd);
380                         if (level > 3) {
381                                 printk(KERN_INFO "buffer = 0x%p, bufflen = %d,"
382                                        " queuecommand 0x%p\n",
383                                         scsi_sglist(cmd), scsi_bufflen(cmd),
384                                         cmd->device->host->hostt->queuecommand);
385
386                         }
387                 }
388         }
389 }
390
391 void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
392 {
393         unsigned int level;
394
395         /*
396          * If ML COMPLETE log level is greater than or equal to:
397          *
398          * 1: log disposition, result, opcode + command, and conditionally
399          * sense data for failures or non SUCCESS dispositions.
400          *
401          * 2: same as 1 but for all command completions.
402          *
403          * 3: same as 2 plus dump cmd address
404          *
405          * 4: same as 3 plus dump extra junk
406          */
407         if (unlikely(scsi_logging_level)) {
408                 level = SCSI_LOG_LEVEL(SCSI_LOG_MLCOMPLETE_SHIFT,
409                                        SCSI_LOG_MLCOMPLETE_BITS);
410                 if (((level > 0) && (cmd->result || disposition != SUCCESS)) ||
411                     (level > 1)) {
412                         scmd_printk(KERN_INFO, cmd, "Done: ");
413                         if (level > 2)
414                                 printk("0x%p ", cmd);
415                         /*
416                          * Dump truncated values, so we usually fit within
417                          * 80 chars.
418                          */
419                         switch (disposition) {
420                         case SUCCESS:
421                                 printk("SUCCESS\n");
422                                 break;
423                         case NEEDS_RETRY:
424                                 printk("RETRY\n");
425                                 break;
426                         case ADD_TO_MLQUEUE:
427                                 printk("MLQUEUE\n");
428                                 break;
429                         case FAILED:
430                                 printk("FAILED\n");
431                                 break;
432                         case TIMEOUT_ERROR:
433                                 /* 
434                                  * If called via scsi_times_out.
435                                  */
436                                 printk("TIMEOUT\n");
437                                 break;
438                         default:
439                                 printk("UNKNOWN\n");
440                         }
441                         scsi_print_result(cmd);
442                         scsi_print_command(cmd);
443                         if (status_byte(cmd->result) & CHECK_CONDITION)
444                                 scsi_print_sense("", cmd);
445                         if (level > 3)
446                                 scmd_printk(KERN_INFO, cmd,
447                                             "scsi host busy %d failed %d\n",
448                                             cmd->device->host->host_busy,
449                                             cmd->device->host->host_failed);
450                 }
451         }
452 }
453 #endif
454
455 /**
456  * scsi_cmd_get_serial - Assign a serial number to a command
457  * @host: the scsi host
458  * @cmd: command to assign serial number to
459  *
460  * Description: a serial number identifies a request for error recovery
461  * and debugging purposes.  Protected by the Host_Lock of host.
462  */
463 static inline void scsi_cmd_get_serial(struct Scsi_Host *host, struct scsi_cmnd *cmd)
464 {
465         cmd->serial_number = host->cmd_serial_number++;
466         if (cmd->serial_number == 0) 
467                 cmd->serial_number = host->cmd_serial_number++;
468 }
469
470 /**
471  * scsi_dispatch_command - Dispatch a command to the low-level driver.
472  * @cmd: command block we are dispatching.
473  *
474  * Return: nonzero return request was rejected and device's queue needs to be
475  * plugged.
476  */
477 int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
478 {
479         struct Scsi_Host *host = cmd->device->host;
480         unsigned long flags = 0;
481         unsigned long timeout;
482         int rtn = 0;
483
484         /* check if the device is still usable */
485         if (unlikely(cmd->device->sdev_state == SDEV_DEL)) {
486                 /* in SDEV_DEL we error all commands. DID_NO_CONNECT
487                  * returns an immediate error upwards, and signals
488                  * that the device is no longer present */
489                 cmd->result = DID_NO_CONNECT << 16;
490                 atomic_inc(&cmd->device->iorequest_cnt);
491                 __scsi_done(cmd);
492                 /* return 0 (because the command has been processed) */
493                 goto out;
494         }
495
496         /* Check to see if the scsi lld put this device into state SDEV_BLOCK. */
497         if (unlikely(cmd->device->sdev_state == SDEV_BLOCK)) {
498                 /* 
499                  * in SDEV_BLOCK, the command is just put back on the device
500                  * queue.  The suspend state has already blocked the queue so
501                  * future requests should not occur until the device 
502                  * transitions out of the suspend state.
503                  */
504                 scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
505
506                 SCSI_LOG_MLQUEUE(3, printk("queuecommand : device blocked \n"));
507
508                 /*
509                  * NOTE: rtn is still zero here because we don't need the
510                  * queue to be plugged on return (it's already stopped)
511                  */
512                 goto out;
513         }
514
515         /* 
516          * If SCSI-2 or lower, store the LUN value in cmnd.
517          */
518         if (cmd->device->scsi_level <= SCSI_2 &&
519             cmd->device->scsi_level != SCSI_UNKNOWN) {
520                 cmd->cmnd[1] = (cmd->cmnd[1] & 0x1f) |
521                                (cmd->device->lun << 5 & 0xe0);
522         }
523
524         /*
525          * We will wait MIN_RESET_DELAY clock ticks after the last reset so
526          * we can avoid the drive not being ready.
527          */
528         timeout = host->last_reset + MIN_RESET_DELAY;
529
530         if (host->resetting && time_before(jiffies, timeout)) {
531                 int ticks_remaining = timeout - jiffies;
532                 /*
533                  * NOTE: This may be executed from within an interrupt
534                  * handler!  This is bad, but for now, it'll do.  The irq
535                  * level of the interrupt handler has been masked out by the
536                  * platform dependent interrupt handling code already, so the
537                  * sti() here will not cause another call to the SCSI host's
538                  * interrupt handler (assuming there is one irq-level per
539                  * host).
540                  */
541                 while (--ticks_remaining >= 0)
542                         mdelay(1 + 999 / HZ);
543                 host->resetting = 0;
544         }
545
546         /* 
547          * AK: unlikely race here: for some reason the timer could
548          * expire before the serial number is set up below.
549          */
550         scsi_add_timer(cmd, cmd->timeout_per_command, scsi_times_out);
551
552         scsi_log_send(cmd);
553
554         /*
555          * We will use a queued command if possible, otherwise we will
556          * emulate the queuing and calling of completion function ourselves.
557          */
558         atomic_inc(&cmd->device->iorequest_cnt);
559
560         /*
561          * Before we queue this command, check if the command
562          * length exceeds what the host adapter can handle.
563          */
564         if (CDB_SIZE(cmd) > cmd->device->host->max_cmd_len) {
565                 SCSI_LOG_MLQUEUE(3,
566                                 printk("queuecommand : command too long.\n"));
567                 cmd->result = (DID_ABORT << 16);
568
569                 scsi_done(cmd);
570                 goto out;
571         }
572
573         spin_lock_irqsave(host->host_lock, flags);
574         scsi_cmd_get_serial(host, cmd); 
575
576         if (unlikely(host->shost_state == SHOST_DEL)) {
577                 cmd->result = (DID_NO_CONNECT << 16);
578                 scsi_done(cmd);
579         } else {
580                 rtn = host->hostt->queuecommand(cmd, scsi_done);
581         }
582         spin_unlock_irqrestore(host->host_lock, flags);
583         if (rtn) {
584                 if (scsi_delete_timer(cmd)) {
585                         atomic_inc(&cmd->device->iodone_cnt);
586                         scsi_queue_insert(cmd,
587                                           (rtn == SCSI_MLQUEUE_DEVICE_BUSY) ?
588                                           rtn : SCSI_MLQUEUE_HOST_BUSY);
589                 }
590                 SCSI_LOG_MLQUEUE(3,
591                     printk("queuecommand : request rejected\n"));
592         }
593
594  out:
595         SCSI_LOG_MLQUEUE(3, printk("leaving scsi_dispatch_cmnd()\n"));
596         return rtn;
597 }
598
599 /**
600  * scsi_req_abort_cmd -- Request command recovery for the specified command
601  * @cmd: pointer to the SCSI command of interest
602  *
603  * This function requests that SCSI Core start recovery for the
604  * command by deleting the timer and adding the command to the eh
605  * queue.  It can be called by either LLDDs or SCSI Core.  LLDDs who
606  * implement their own error recovery MAY ignore the timeout event if
607  * they generated scsi_req_abort_cmd.
608  */
609 void scsi_req_abort_cmd(struct scsi_cmnd *cmd)
610 {
611         if (!scsi_delete_timer(cmd))
612                 return;
613         scsi_times_out(cmd);
614 }
615 EXPORT_SYMBOL(scsi_req_abort_cmd);
616
617 /**
618  * scsi_done - Enqueue the finished SCSI command into the done queue.
619  * @cmd: The SCSI Command for which a low-level device driver (LLDD) gives
620  * ownership back to SCSI Core -- i.e. the LLDD has finished with it.
621  *
622  * Description: This function is the mid-level's (SCSI Core) interrupt routine,
623  * which regains ownership of the SCSI command (de facto) from a LLDD, and
624  * enqueues the command to the done queue for further processing.
625  *
626  * This is the producer of the done queue who enqueues at the tail.
627  *
628  * This function is interrupt context safe.
629  */
630 static void scsi_done(struct scsi_cmnd *cmd)
631 {
632         /*
633          * We don't have to worry about this one timing out anymore.
634          * If we are unable to remove the timer, then the command
635          * has already timed out.  In which case, we have no choice but to
636          * let the timeout function run, as we have no idea where in fact
637          * that function could really be.  It might be on another processor,
638          * etc, etc.
639          */
640         if (!scsi_delete_timer(cmd))
641                 return;
642         __scsi_done(cmd);
643 }
644
645 /* Private entry to scsi_done() to complete a command when the timer
646  * isn't running --- used by scsi_times_out */
647 void __scsi_done(struct scsi_cmnd *cmd)
648 {
649         struct request *rq = cmd->request;
650
651         /*
652          * Set the serial numbers back to zero
653          */
654         cmd->serial_number = 0;
655
656         atomic_inc(&cmd->device->iodone_cnt);
657         if (cmd->result)
658                 atomic_inc(&cmd->device->ioerr_cnt);
659
660         BUG_ON(!rq);
661
662         /*
663          * The uptodate/nbytes values don't matter, as we allow partial
664          * completes and thus will check this in the softirq callback
665          */
666         rq->completion_data = cmd;
667         blk_complete_request(rq);
668 }
669
670 /* Move this to a header if it becomes more generally useful */
671 static struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd)
672 {
673         return *(struct scsi_driver **)cmd->request->rq_disk->private_data;
674 }
675
676 /**
677  * scsi_finish_command - cleanup and pass command back to upper layer
678  * @cmd: the command
679  *
680  * Description: Pass command off to upper layer for finishing of I/O
681  *              request, waking processes that are waiting on results,
682  *              etc.
683  */
684 void scsi_finish_command(struct scsi_cmnd *cmd)
685 {
686         struct scsi_device *sdev = cmd->device;
687         struct Scsi_Host *shost = sdev->host;
688         struct scsi_driver *drv;
689         unsigned int good_bytes;
690
691         scsi_device_unbusy(sdev);
692
693         /*
694          * Clear the flags which say that the device/host is no longer
695          * capable of accepting new commands.  These are set in scsi_queue.c
696          * for both the queue full condition on a device, and for a
697          * host full condition on the host.
698          *
699          * XXX(hch): What about locking?
700          */
701         shost->host_blocked = 0;
702         sdev->device_blocked = 0;
703
704         /*
705          * If we have valid sense information, then some kind of recovery
706          * must have taken place.  Make a note of this.
707          */
708         if (SCSI_SENSE_VALID(cmd))
709                 cmd->result |= (DRIVER_SENSE << 24);
710
711         SCSI_LOG_MLCOMPLETE(4, sdev_printk(KERN_INFO, sdev,
712                                 "Notifying upper driver of completion "
713                                 "(result %x)\n", cmd->result));
714
715         good_bytes = cmd->request_bufflen;
716         if (cmd->request->cmd_type != REQ_TYPE_BLOCK_PC) {
717                 drv = scsi_cmd_to_driver(cmd);
718                 if (drv->done)
719                         good_bytes = drv->done(cmd);
720         }
721         scsi_io_completion(cmd, good_bytes);
722 }
723 EXPORT_SYMBOL(scsi_finish_command);
724
725 /**
726  * scsi_adjust_queue_depth - Let low level drivers change a device's queue depth
727  * @sdev: SCSI Device in question
728  * @tagged: Do we use tagged queueing (non-0) or do we treat
729  *          this device as an untagged device (0)
730  * @tags: Number of tags allowed if tagged queueing enabled,
731  *        or number of commands the low level driver can
732  *        queue up in non-tagged mode (as per cmd_per_lun).
733  *
734  * Returns:     Nothing
735  *
736  * Lock Status: None held on entry
737  *
738  * Notes:       Low level drivers may call this at any time and we will do
739  *              the right thing depending on whether or not the device is
740  *              currently active and whether or not it even has the
741  *              command blocks built yet.
742  */
743 void scsi_adjust_queue_depth(struct scsi_device *sdev, int tagged, int tags)
744 {
745         unsigned long flags;
746
747         /*
748          * refuse to set tagged depth to an unworkable size
749          */
750         if (tags <= 0)
751                 return;
752
753         spin_lock_irqsave(sdev->request_queue->queue_lock, flags);
754
755         /* Check to see if the queue is managed by the block layer.
756          * If it is, and we fail to adjust the depth, exit. */
757         if (blk_queue_tagged(sdev->request_queue) &&
758             blk_queue_resize_tags(sdev->request_queue, tags) != 0)
759                 goto out;
760
761         sdev->queue_depth = tags;
762         switch (tagged) {
763                 case MSG_ORDERED_TAG:
764                         sdev->ordered_tags = 1;
765                         sdev->simple_tags = 1;
766                         break;
767                 case MSG_SIMPLE_TAG:
768                         sdev->ordered_tags = 0;
769                         sdev->simple_tags = 1;
770                         break;
771                 default:
772                         sdev_printk(KERN_WARNING, sdev,
773                                     "scsi_adjust_queue_depth, bad queue type, "
774                                     "disabled\n");
775                 case 0:
776                         sdev->ordered_tags = sdev->simple_tags = 0;
777                         sdev->queue_depth = tags;
778                         break;
779         }
780  out:
781         spin_unlock_irqrestore(sdev->request_queue->queue_lock, flags);
782 }
783 EXPORT_SYMBOL(scsi_adjust_queue_depth);
784
785 /**
786  * scsi_track_queue_full - track QUEUE_FULL events to adjust queue depth
787  * @sdev: SCSI Device in question
788  * @depth: Current number of outstanding SCSI commands on this device,
789  *         not counting the one returned as QUEUE_FULL.
790  *
791  * Description: This function will track successive QUEUE_FULL events on a
792  *              specific SCSI device to determine if and when there is a
793  *              need to adjust the queue depth on the device.
794  *
795  * Returns:     0 - No change needed, >0 - Adjust queue depth to this new depth,
796  *              -1 - Drop back to untagged operation using host->cmd_per_lun
797  *                      as the untagged command depth
798  *
799  * Lock Status: None held on entry
800  *
801  * Notes:       Low level drivers may call this at any time and we will do
802  *              "The Right Thing."  We are interrupt context safe.
803  */
804 int scsi_track_queue_full(struct scsi_device *sdev, int depth)
805 {
806         if ((jiffies >> 4) == sdev->last_queue_full_time)
807                 return 0;
808
809         sdev->last_queue_full_time = (jiffies >> 4);
810         if (sdev->last_queue_full_depth != depth) {
811                 sdev->last_queue_full_count = 1;
812                 sdev->last_queue_full_depth = depth;
813         } else {
814                 sdev->last_queue_full_count++;
815         }
816
817         if (sdev->last_queue_full_count <= 10)
818                 return 0;
819         if (sdev->last_queue_full_depth < 8) {
820                 /* Drop back to untagged */
821                 scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun);
822                 return -1;
823         }
824         
825         if (sdev->ordered_tags)
826                 scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, depth);
827         else
828                 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth);
829         return depth;
830 }
831 EXPORT_SYMBOL(scsi_track_queue_full);
832
833 /**
834  * scsi_device_get  -  get an additional reference to a scsi_device
835  * @sdev:       device to get a reference to
836  *
837  * Description: Gets a reference to the scsi_device and increments the use count
838  * of the underlying LLDD module.  You must hold host_lock of the
839  * parent Scsi_Host or already have a reference when calling this.
840  */
841 int scsi_device_get(struct scsi_device *sdev)
842 {
843         if (sdev->sdev_state == SDEV_DEL)
844                 return -ENXIO;
845         if (!get_device(&sdev->sdev_gendev))
846                 return -ENXIO;
847         /* We can fail this if we're doing SCSI operations
848          * from module exit (like cache flush) */
849         try_module_get(sdev->host->hostt->module);
850
851         return 0;
852 }
853 EXPORT_SYMBOL(scsi_device_get);
854
855 /**
856  * scsi_device_put  -  release a reference to a scsi_device
857  * @sdev:       device to release a reference on.
858  *
859  * Description: Release a reference to the scsi_device and decrements the use
860  * count of the underlying LLDD module.  The device is freed once the last
861  * user vanishes.
862  */
863 void scsi_device_put(struct scsi_device *sdev)
864 {
865 #ifdef CONFIG_MODULE_UNLOAD
866         struct module *module = sdev->host->hostt->module;
867
868         /* The module refcount will be zero if scsi_device_get()
869          * was called from a module removal routine */
870         if (module && module_refcount(module) != 0)
871                 module_put(module);
872 #endif
873         put_device(&sdev->sdev_gendev);
874 }
875 EXPORT_SYMBOL(scsi_device_put);
876
877 /* helper for shost_for_each_device, see that for documentation */
878 struct scsi_device *__scsi_iterate_devices(struct Scsi_Host *shost,
879                                            struct scsi_device *prev)
880 {
881         struct list_head *list = (prev ? &prev->siblings : &shost->__devices);
882         struct scsi_device *next = NULL;
883         unsigned long flags;
884
885         spin_lock_irqsave(shost->host_lock, flags);
886         while (list->next != &shost->__devices) {
887                 next = list_entry(list->next, struct scsi_device, siblings);
888                 /* skip devices that we can't get a reference to */
889                 if (!scsi_device_get(next))
890                         break;
891                 next = NULL;
892                 list = list->next;
893         }
894         spin_unlock_irqrestore(shost->host_lock, flags);
895
896         if (prev)
897                 scsi_device_put(prev);
898         return next;
899 }
900 EXPORT_SYMBOL(__scsi_iterate_devices);
901
902 /**
903  * starget_for_each_device  -  helper to walk all devices of a target
904  * @starget:    target whose devices we want to iterate over.
905  * @data:       Opaque passed to each function call.
906  * @fn:         Function to call on each device
907  *
908  * This traverses over each device of @starget.  The devices have
909  * a reference that must be released by scsi_host_put when breaking
910  * out of the loop.
911  */
912 void starget_for_each_device(struct scsi_target *starget, void *data,
913                      void (*fn)(struct scsi_device *, void *))
914 {
915         struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
916         struct scsi_device *sdev;
917
918         shost_for_each_device(sdev, shost) {
919                 if ((sdev->channel == starget->channel) &&
920                     (sdev->id == starget->id))
921                         fn(sdev, data);
922         }
923 }
924 EXPORT_SYMBOL(starget_for_each_device);
925
926 /**
927  * __starget_for_each_device  -  helper to walk all devices of a target
928  *                               (UNLOCKED)
929  * @starget:    target whose devices we want to iterate over.
930  *
931  * This traverses over each device of @starget.  It does _not_
932  * take a reference on the scsi_device, so the whole loop must be
933  * protected by shost->host_lock.
934  *
935  * Note:  The only reason why drivers would want to use this is because
936  * they need to access the device list in irq context.  Otherwise you
937  * really want to use starget_for_each_device instead.
938  **/
939 void __starget_for_each_device(struct scsi_target *starget, void *data,
940                                void (*fn)(struct scsi_device *, void *))
941 {
942         struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
943         struct scsi_device *sdev;
944
945         __shost_for_each_device(sdev, shost) {
946                 if ((sdev->channel == starget->channel) &&
947                     (sdev->id == starget->id))
948                         fn(sdev, data);
949         }
950 }
951 EXPORT_SYMBOL(__starget_for_each_device);
952
953 /**
954  * __scsi_device_lookup_by_target - find a device given the target (UNLOCKED)
955  * @starget:    SCSI target pointer
956  * @lun:        SCSI Logical Unit Number
957  *
958  * Description: Looks up the scsi_device with the specified @lun for a given
959  * @starget.  The returned scsi_device does not have an additional
960  * reference.  You must hold the host's host_lock over this call and
961  * any access to the returned scsi_device.
962  *
963  * Note:  The only reason why drivers would want to use this is because
964  * they need to access the device list in irq context.  Otherwise you
965  * really want to use scsi_device_lookup_by_target instead.
966  **/
967 struct scsi_device *__scsi_device_lookup_by_target(struct scsi_target *starget,
968                                                    uint lun)
969 {
970         struct scsi_device *sdev;
971
972         list_for_each_entry(sdev, &starget->devices, same_target_siblings) {
973                 if (sdev->lun ==lun)
974                         return sdev;
975         }
976
977         return NULL;
978 }
979 EXPORT_SYMBOL(__scsi_device_lookup_by_target);
980
981 /**
982  * scsi_device_lookup_by_target - find a device given the target
983  * @starget:    SCSI target pointer
984  * @lun:        SCSI Logical Unit Number
985  *
986  * Description: Looks up the scsi_device with the specified @channel, @id, @lun
987  * for a given host.  The returned scsi_device has an additional reference that
988  * needs to be released with scsi_device_put once you're done with it.
989  **/
990 struct scsi_device *scsi_device_lookup_by_target(struct scsi_target *starget,
991                                                  uint lun)
992 {
993         struct scsi_device *sdev;
994         struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
995         unsigned long flags;
996
997         spin_lock_irqsave(shost->host_lock, flags);
998         sdev = __scsi_device_lookup_by_target(starget, lun);
999         if (sdev && scsi_device_get(sdev))
1000                 sdev = NULL;
1001         spin_unlock_irqrestore(shost->host_lock, flags);
1002
1003         return sdev;
1004 }
1005 EXPORT_SYMBOL(scsi_device_lookup_by_target);
1006
1007 /**
1008  * __scsi_device_lookup - find a device given the host (UNLOCKED)
1009  * @shost:      SCSI host pointer
1010  * @channel:    SCSI channel (zero if only one channel)
1011  * @id:         SCSI target number (physical unit number)
1012  * @lun:        SCSI Logical Unit Number
1013  *
1014  * Description: Looks up the scsi_device with the specified @channel, @id, @lun
1015  * for a given host. The returned scsi_device does not have an additional
1016  * reference.  You must hold the host's host_lock over this call and any access
1017  * to the returned scsi_device.
1018  *
1019  * Note:  The only reason why drivers would want to use this is because
1020  * they need to access the device list in irq context.  Otherwise you
1021  * really want to use scsi_device_lookup instead.
1022  **/
1023 struct scsi_device *__scsi_device_lookup(struct Scsi_Host *shost,
1024                 uint channel, uint id, uint lun)
1025 {
1026         struct scsi_device *sdev;
1027
1028         list_for_each_entry(sdev, &shost->__devices, siblings) {
1029                 if (sdev->channel == channel && sdev->id == id &&
1030                                 sdev->lun ==lun)
1031                         return sdev;
1032         }
1033
1034         return NULL;
1035 }
1036 EXPORT_SYMBOL(__scsi_device_lookup);
1037
1038 /**
1039  * scsi_device_lookup - find a device given the host
1040  * @shost:      SCSI host pointer
1041  * @channel:    SCSI channel (zero if only one channel)
1042  * @id:         SCSI target number (physical unit number)
1043  * @lun:        SCSI Logical Unit Number
1044  *
1045  * Description: Looks up the scsi_device with the specified @channel, @id, @lun
1046  * for a given host.  The returned scsi_device has an additional reference that
1047  * needs to be released with scsi_device_put once you're done with it.
1048  **/
1049 struct scsi_device *scsi_device_lookup(struct Scsi_Host *shost,
1050                 uint channel, uint id, uint lun)
1051 {
1052         struct scsi_device *sdev;
1053         unsigned long flags;
1054
1055         spin_lock_irqsave(shost->host_lock, flags);
1056         sdev = __scsi_device_lookup(shost, channel, id, lun);
1057         if (sdev && scsi_device_get(sdev))
1058                 sdev = NULL;
1059         spin_unlock_irqrestore(shost->host_lock, flags);
1060
1061         return sdev;
1062 }
1063 EXPORT_SYMBOL(scsi_device_lookup);
1064
1065 MODULE_DESCRIPTION("SCSI core");
1066 MODULE_LICENSE("GPL");
1067
1068 module_param(scsi_logging_level, int, S_IRUGO|S_IWUSR);
1069 MODULE_PARM_DESC(scsi_logging_level, "a bit mask of logging levels");
1070
1071 static int __init init_scsi(void)
1072 {
1073         int error;
1074
1075         error = scsi_init_queue();
1076         if (error)
1077                 return error;
1078         error = scsi_init_procfs();
1079         if (error)
1080                 goto cleanup_queue;
1081         error = scsi_init_devinfo();
1082         if (error)
1083                 goto cleanup_procfs;
1084         error = scsi_init_hosts();
1085         if (error)
1086                 goto cleanup_devlist;
1087         error = scsi_init_sysctl();
1088         if (error)
1089                 goto cleanup_hosts;
1090         error = scsi_sysfs_register();
1091         if (error)
1092                 goto cleanup_sysctl;
1093
1094         scsi_netlink_init();
1095
1096         printk(KERN_NOTICE "SCSI subsystem initialized\n");
1097         return 0;
1098
1099 cleanup_sysctl:
1100         scsi_exit_sysctl();
1101 cleanup_hosts:
1102         scsi_exit_hosts();
1103 cleanup_devlist:
1104         scsi_exit_devinfo();
1105 cleanup_procfs:
1106         scsi_exit_procfs();
1107 cleanup_queue:
1108         scsi_exit_queue();
1109         printk(KERN_ERR "SCSI subsystem failed to initialize, error = %d\n",
1110                -error);
1111         return error;
1112 }
1113
1114 static void __exit exit_scsi(void)
1115 {
1116         scsi_netlink_exit();
1117         scsi_sysfs_unregister();
1118         scsi_exit_sysctl();
1119         scsi_exit_hosts();
1120         scsi_exit_devinfo();
1121         scsi_exit_procfs();
1122         scsi_exit_queue();
1123 }
1124
1125 subsys_initcall(init_scsi);
1126 module_exit(exit_scsi);