mirror of
https://github.com/torvalds/linux.git
synced 2024-12-03 17:41:22 +00:00
[S390] tape block: complete request with correct locking
__blk_end_request must be called with request queue lock held. We need to use blk_end_request rather than __blk_end_request. Signed-off-by: Frank Munzert <munzert@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
da5aae7036
commit
7a4a1ccd44
@ -76,7 +76,7 @@ tapeblock_trigger_requeue(struct tape_device *device)
|
|||||||
static void
|
static void
|
||||||
tapeblock_end_request(struct request *req, int error)
|
tapeblock_end_request(struct request *req, int error)
|
||||||
{
|
{
|
||||||
if (__blk_end_request(req, error, blk_rq_bytes(req)))
|
if (blk_end_request(req, error, blk_rq_bytes(req)))
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,7 +166,7 @@ tapeblock_requeue(struct work_struct *work) {
|
|||||||
nr_queued++;
|
nr_queued++;
|
||||||
spin_unlock(get_ccwdev_lock(device->cdev));
|
spin_unlock(get_ccwdev_lock(device->cdev));
|
||||||
|
|
||||||
spin_lock(&device->blk_data.request_queue_lock);
|
spin_lock_irq(&device->blk_data.request_queue_lock);
|
||||||
while (
|
while (
|
||||||
!blk_queue_plugged(queue) &&
|
!blk_queue_plugged(queue) &&
|
||||||
elv_next_request(queue) &&
|
elv_next_request(queue) &&
|
||||||
@ -176,7 +176,9 @@ tapeblock_requeue(struct work_struct *work) {
|
|||||||
if (rq_data_dir(req) == WRITE) {
|
if (rq_data_dir(req) == WRITE) {
|
||||||
DBF_EVENT(1, "TBLOCK: Rejecting write request\n");
|
DBF_EVENT(1, "TBLOCK: Rejecting write request\n");
|
||||||
blkdev_dequeue_request(req);
|
blkdev_dequeue_request(req);
|
||||||
|
spin_unlock_irq(&device->blk_data.request_queue_lock);
|
||||||
tapeblock_end_request(req, -EIO);
|
tapeblock_end_request(req, -EIO);
|
||||||
|
spin_lock_irq(&device->blk_data.request_queue_lock);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
blkdev_dequeue_request(req);
|
blkdev_dequeue_request(req);
|
||||||
|
Loading…
Reference in New Issue
Block a user