diff options
author | NeilBrown <neilb@suse.de> | 2007-09-27 06:46:11 -0400 |
---|---|---|
committer | Jens Axboe <axboe@carl.home.kernel.dk> | 2007-10-10 03:25:57 -0400 |
commit | d24517d793f21edab1a411da95f2c45cb88a84aa (patch) | |
tree | 8ceda1f9787e226d43d3673cd6af6fcddffc98aa /block/ll_rw_blk.c | |
parent | f5ff8422bbdd59f8c1f699df248e1b7a11073027 (diff) |
Remove flush_dry_bio_endio
The entire function of flush_dry_bio_endio is to undo the effects
of bio_endio (when called on a barrier request). So remove the
function and the call to bio_endio.
This allows us to remove "bi_size" from "struct request_queue".
Signed-off-by: Neil Brown <neilb@suse.de>
### Diffstat output
./block/ll_rw_blk.c | 39 ++-------------------------------------
./include/linux/blkdev.h | 1 -
2 files changed, 2 insertions(+), 38 deletions(-)
diff .prev/block/ll_rw_blk.c ./block/ll_rw_blk.c
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'block/ll_rw_blk.c')
-rw-r--r-- | block/ll_rw_blk.c | 39 |
1 files changed, 2 insertions, 37 deletions
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c index 3b2eff4e83a6..dfe0948ec8b2 100644 --- a/block/ll_rw_blk.c +++ b/block/ll_rw_blk.c | |||
@@ -431,7 +431,6 @@ static void queue_flush(struct request_queue *q, unsigned which) | |||
431 | static inline struct request *start_ordered(struct request_queue *q, | 431 | static inline struct request *start_ordered(struct request_queue *q, |
432 | struct request *rq) | 432 | struct request *rq) |
433 | { | 433 | { |
434 | q->bi_size = 0; | ||
435 | q->orderr = 0; | 434 | q->orderr = 0; |
436 | q->ordered = q->next_ordered; | 435 | q->ordered = q->next_ordered; |
437 | q->ordseq |= QUEUE_ORDSEQ_STARTED; | 436 | q->ordseq |= QUEUE_ORDSEQ_STARTED; |
@@ -528,55 +527,21 @@ int blk_do_ordered(struct request_queue *q, struct request **rqp) | |||
528 | return 1; | 527 | return 1; |
529 | } | 528 | } |
530 | 529 | ||
531 | static int flush_dry_bio_endio(struct bio *bio, unsigned int bytes, int error) | ||
532 | { | ||
533 | struct request_queue *q = bio->bi_private; | ||
534 | |||
535 | /* | ||
536 | * This is dry run, restore bio_sector and size. We'll finish | ||
537 | * this request again with the original bi_end_io after an | ||
538 | * error occurs or post flush is complete. | ||
539 | */ | ||
540 | q->bi_size += bytes; | ||
541 | |||
542 | if (bio->bi_size) | ||
543 | return 1; | ||
544 | |||
545 | /* Reset bio */ | ||
546 | set_bit(BIO_UPTODATE, &bio->bi_flags); | ||
547 | bio->bi_size = q->bi_size; | ||
548 | bio->bi_sector -= (q->bi_size >> 9); | ||
549 | q->bi_size = 0; | ||
550 | |||
551 | return 0; | ||
552 | } | ||
553 | |||
554 | static int ordered_bio_endio(struct request *rq, struct bio *bio, | 530 | static int ordered_bio_endio(struct request *rq, struct bio *bio, |
555 | unsigned int nbytes, int error) | 531 | unsigned int nbytes, int error) |
556 | { | 532 | { |
557 | struct request_queue *q = rq->q; | 533 | struct request_queue *q = rq->q; |
558 | bio_end_io_t *endio; | ||
559 | void *private; | ||
560 | 534 | ||
561 | if (&q->bar_rq != rq) | 535 | if (&q->bar_rq != rq) |
562 | return 0; | 536 | return 0; |
563 | 537 | ||
564 | /* | 538 | /* |
565 | * Okay, this is the barrier request in progress, dry finish it. | 539 | * Okay, this is the barrier request in progress, just |
540 | * record the error; | ||
566 | */ | 541 | */ |
567 | if (error && !q->orderr) | 542 | if (error && !q->orderr) |
568 | q->orderr = error; | 543 | q->orderr = error; |
569 | 544 | ||
570 | endio = bio->bi_end_io; | ||
571 | private = bio->bi_private; | ||
572 | bio->bi_end_io = flush_dry_bio_endio; | ||
573 | bio->bi_private = q; | ||
574 | |||
575 | bio_endio(bio, nbytes, error); | ||
576 | |||
577 | bio->bi_end_io = endio; | ||
578 | bio->bi_private = private; | ||
579 | |||
580 | return 1; | 545 | return 1; |
581 | } | 546 | } |
582 | 547 | ||