Drop 'size' argument from bio_endio and bi_end_io
As bi_end_io is only called once when the reqeust is complete, the 'size' argument is now redundant. Remove it. Now there is no need for bio_endio to subtract the size completed from bi_size. So don't do that either. While we are at it, change bi_end_io to return void. Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
35
fs/bio.c
35
fs/bio.c
@@ -798,13 +798,9 @@ void bio_unmap_user(struct bio *bio)
|
||||
bio_put(bio);
|
||||
}
|
||||
|
||||
static int bio_map_kern_endio(struct bio *bio, unsigned int bytes_done, int err)
|
||||
static void bio_map_kern_endio(struct bio *bio, int err)
|
||||
{
|
||||
if (bio->bi_size)
|
||||
return 1;
|
||||
|
||||
bio_put(bio);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1002,12 +998,10 @@ void bio_check_pages_dirty(struct bio *bio)
|
||||
/**
|
||||
* bio_endio - end I/O on a bio
|
||||
* @bio: bio
|
||||
* @bytes_done: number of bytes completed
|
||||
* @error: error, if any
|
||||
*
|
||||
* Description:
|
||||
* bio_endio() will end I/O on @bytes_done number of bytes. This
|
||||
* must always be the whole (remaining) bio. bio_endio() is the
|
||||
* bio_endio() will end I/O on the whole bio. bio_endio() is the
|
||||
* preferred way to end I/O on a bio, it takes care of clearing
|
||||
* BIO_UPTODATE on error. @error is 0 on success, and and one of the
|
||||
* established -Exxxx (-EIO, for instance) error values in case
|
||||
@@ -1015,22 +1009,15 @@ void bio_check_pages_dirty(struct bio *bio)
|
||||
* bio unless they own it and thus know that it has an end_io
|
||||
* function.
|
||||
**/
|
||||
void bio_endio(struct bio *bio, unsigned int bytes_done, int error)
|
||||
void bio_endio(struct bio *bio, int error)
|
||||
{
|
||||
if (error)
|
||||
clear_bit(BIO_UPTODATE, &bio->bi_flags);
|
||||
else if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
|
||||
error = -EIO;
|
||||
|
||||
if (unlikely(bytes_done != bio->bi_size)) {
|
||||
printk("%s: want %u bytes done, only %u left\n", __FUNCTION__,
|
||||
bytes_done, bio->bi_size);
|
||||
bytes_done = bio->bi_size;
|
||||
}
|
||||
|
||||
bio->bi_size = 0; /* expected by some callees - will be removed */
|
||||
if (bio->bi_end_io)
|
||||
bio->bi_end_io(bio, bytes_done, error);
|
||||
bio->bi_end_io(bio, error);
|
||||
}
|
||||
|
||||
void bio_pair_release(struct bio_pair *bp)
|
||||
@@ -1038,37 +1025,29 @@ void bio_pair_release(struct bio_pair *bp)
|
||||
if (atomic_dec_and_test(&bp->cnt)) {
|
||||
struct bio *master = bp->bio1.bi_private;
|
||||
|
||||
bio_endio(master, master->bi_size, bp->error);
|
||||
bio_endio(master, bp->error);
|
||||
mempool_free(bp, bp->bio2.bi_private);
|
||||
}
|
||||
}
|
||||
|
||||
static int bio_pair_end_1(struct bio * bi, unsigned int done, int err)
|
||||
static void bio_pair_end_1(struct bio *bi, int err)
|
||||
{
|
||||
struct bio_pair *bp = container_of(bi, struct bio_pair, bio1);
|
||||
|
||||
if (err)
|
||||
bp->error = err;
|
||||
|
||||
if (bi->bi_size)
|
||||
return 1;
|
||||
|
||||
bio_pair_release(bp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bio_pair_end_2(struct bio * bi, unsigned int done, int err)
|
||||
static void bio_pair_end_2(struct bio *bi, int err)
|
||||
{
|
||||
struct bio_pair *bp = container_of(bi, struct bio_pair, bio2);
|
||||
|
||||
if (err)
|
||||
bp->error = err;
|
||||
|
||||
if (bi->bi_size)
|
||||
return 1;
|
||||
|
||||
bio_pair_release(bp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user