aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
-rw-r--r--drivers/scsi/scsi_lib.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index fc3f168decb4..f85cfa6c47b5 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -12,6 +12,7 @@
12#include <linux/blkdev.h> 12#include <linux/blkdev.h>
13#include <linux/completion.h> 13#include <linux/completion.h>
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15#include <linux/export.h>
15#include <linux/mempool.h> 16#include <linux/mempool.h>
16#include <linux/slab.h> 17#include <linux/slab.h>
17#include <linux/init.h> 18#include <linux/init.h>
@@ -1408,6 +1409,8 @@ static void scsi_kill_request(struct request *req, struct request_queue *q)
1408 1409
1409 blk_start_request(req); 1410 blk_start_request(req);
1410 1411
1412 scmd_printk(KERN_INFO, cmd, "killing request\n");
1413
1411 sdev = cmd->device; 1414 sdev = cmd->device;
1412 starget = scsi_target(sdev); 1415 starget = scsi_target(sdev);
1413 shost = sdev->host; 1416 shost = sdev->host;
@@ -1489,7 +1492,6 @@ static void scsi_request_fn(struct request_queue *q)
1489 struct request *req; 1492 struct request *req;
1490 1493
1491 if (!sdev) { 1494 if (!sdev) {
1492 printk("scsi: killing requests for dead queue\n");
1493 while ((req = blk_peek_request(q)) != NULL) 1495 while ((req = blk_peek_request(q)) != NULL)
1494 scsi_kill_request(req, q); 1496 scsi_kill_request(req, q);
1495 return; 1497 return;
@@ -1698,6 +1700,15 @@ struct request_queue *scsi_alloc_queue(struct scsi_device *sdev)
1698 1700
1699void scsi_free_queue(struct request_queue *q) 1701void scsi_free_queue(struct request_queue *q)
1700{ 1702{
1703 unsigned long flags;
1704
1705 WARN_ON(q->queuedata);
1706
1707 /* cause scsi_request_fn() to kill all non-finished requests */
1708 spin_lock_irqsave(q->queue_lock, flags);
1709 q->request_fn(q);
1710 spin_unlock_irqrestore(q->queue_lock, flags);
1711
1701 blk_cleanup_queue(q); 1712 blk_cleanup_queue(q);
1702} 1713}
1703 1714