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