[SCSI] docbook and kernel-doc updates
[deliverable/linux.git] / 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 should 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);
This page took 0.057655 seconds and 5 git commands to generate.