diff options
author | Tejun Heo <htejun@gmail.com> | 2005-04-24 03:04:21 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2005-05-20 13:53:26 -0400 |
commit | 2e759cd4fa60c6df4cb117848274f444c2c0a12d (patch) | |
tree | 973c2fd1725208de2d0a0ccd99b9fadd93a845fc | |
parent | 354d6b2196c8e53e55e8f169804256ab9c72731d (diff) |
[SCSI] make blk layer set REQ_SOFTBARRIER on defer and requeue
This is the reworked version of the patch. It sets REQ_SOFTBARRIER
in two places - in elv_next_request() on BLKPREP_DEFER and in
blk_requeue_request().
Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
-rw-r--r-- | drivers/block/elevator.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/block/elevator.c b/drivers/block/elevator.c index 6b79b4314622..8c51d1ccebbd 100644 --- a/drivers/block/elevator.c +++ b/drivers/block/elevator.c | |||
@@ -291,6 +291,13 @@ void elv_requeue_request(request_queue_t *q, struct request *rq) | |||
291 | } | 291 | } |
292 | 292 | ||
293 | /* | 293 | /* |
294 | * the request is prepped and may have some resources allocated. | ||
295 | * allowing unprepped requests to pass this one may cause resource | ||
296 | * deadlock. turn on softbarrier. | ||
297 | */ | ||
298 | rq->flags |= REQ_SOFTBARRIER; | ||
299 | |||
300 | /* | ||
294 | * if iosched has an explicit requeue hook, then use that. otherwise | 301 | * if iosched has an explicit requeue hook, then use that. otherwise |
295 | * just put the request at the front of the queue | 302 | * just put the request at the front of the queue |
296 | */ | 303 | */ |
@@ -386,6 +393,12 @@ struct request *elv_next_request(request_queue_t *q) | |||
386 | if (ret == BLKPREP_OK) { | 393 | if (ret == BLKPREP_OK) { |
387 | break; | 394 | break; |
388 | } else if (ret == BLKPREP_DEFER) { | 395 | } else if (ret == BLKPREP_DEFER) { |
396 | /* | ||
397 | * the request may have been (partially) prepped. | ||
398 | * we need to keep this request in the front to | ||
399 | * avoid resource deadlock. turn on softbarrier. | ||
400 | */ | ||
401 | rq->flags |= REQ_SOFTBARRIER; | ||
389 | rq = NULL; | 402 | rq = NULL; |
390 | break; | 403 | break; |
391 | } else if (ret == BLKPREP_KILL) { | 404 | } else if (ret == BLKPREP_KILL) { |