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) { |
