diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/block/ll_rw_blk.c | 9 | ||||
-rw-r--r-- | drivers/scsi/scsi_lib.c | 6 | ||||
-rw-r--r-- | drivers/scsi/scsi_scan.c | 1 |
3 files changed, 12 insertions, 4 deletions
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index 46e54b441663..11ef9d9ea139 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c | |||
@@ -1715,6 +1715,15 @@ request_queue_t *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock) | |||
1715 | if (blk_init_free_list(q)) | 1715 | if (blk_init_free_list(q)) |
1716 | goto out_init; | 1716 | goto out_init; |
1717 | 1717 | ||
1718 | /* | ||
1719 | * if caller didn't supply a lock, they get per-queue locking with | ||
1720 | * our embedded lock | ||
1721 | */ | ||
1722 | if (!lock) { | ||
1723 | spin_lock_init(&q->__queue_lock); | ||
1724 | lock = &q->__queue_lock; | ||
1725 | } | ||
1726 | |||
1718 | q->request_fn = rfn; | 1727 | q->request_fn = rfn; |
1719 | q->back_merge_fn = ll_back_merge_fn; | 1728 | q->back_merge_fn = ll_back_merge_fn; |
1720 | q->front_merge_fn = ll_front_merge_fn; | 1729 | q->front_merge_fn = ll_front_merge_fn; |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 7cbc4127fb5a..d230c699c728 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -360,9 +360,9 @@ void scsi_device_unbusy(struct scsi_device *sdev) | |||
360 | shost->host_failed)) | 360 | shost->host_failed)) |
361 | scsi_eh_wakeup(shost); | 361 | scsi_eh_wakeup(shost); |
362 | spin_unlock(shost->host_lock); | 362 | spin_unlock(shost->host_lock); |
363 | spin_lock(&sdev->sdev_lock); | 363 | spin_lock(sdev->request_queue->queue_lock); |
364 | sdev->device_busy--; | 364 | sdev->device_busy--; |
365 | spin_unlock_irqrestore(&sdev->sdev_lock, flags); | 365 | spin_unlock_irqrestore(sdev->request_queue->queue_lock, flags); |
366 | } | 366 | } |
367 | 367 | ||
368 | /* | 368 | /* |
@@ -1425,7 +1425,7 @@ struct request_queue *scsi_alloc_queue(struct scsi_device *sdev) | |||
1425 | struct Scsi_Host *shost = sdev->host; | 1425 | struct Scsi_Host *shost = sdev->host; |
1426 | struct request_queue *q; | 1426 | struct request_queue *q; |
1427 | 1427 | ||
1428 | q = blk_init_queue(scsi_request_fn, &sdev->sdev_lock); | 1428 | q = blk_init_queue(scsi_request_fn, NULL); |
1429 | if (!q) | 1429 | if (!q) |
1430 | return NULL; | 1430 | return NULL; |
1431 | 1431 | ||
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index a8a37a338c02..287d197a7c17 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
@@ -249,7 +249,6 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, | |||
249 | */ | 249 | */ |
250 | sdev->borken = 1; | 250 | sdev->borken = 1; |
251 | 251 | ||
252 | spin_lock_init(&sdev->sdev_lock); | ||
253 | sdev->request_queue = scsi_alloc_queue(sdev); | 252 | sdev->request_queue = scsi_alloc_queue(sdev); |
254 | if (!sdev->request_queue) { | 253 | if (!sdev->request_queue) { |
255 | /* release fn is set up in scsi_sysfs_device_initialise, so | 254 | /* release fn is set up in scsi_sysfs_device_initialise, so |