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:
@@ -108,12 +108,11 @@ static void return_io(struct bio *return_bi)
|
||||
{
|
||||
struct bio *bi = return_bi;
|
||||
while (bi) {
|
||||
int bytes = bi->bi_size;
|
||||
|
||||
return_bi = bi->bi_next;
|
||||
bi->bi_next = NULL;
|
||||
bi->bi_size = 0;
|
||||
bi->bi_end_io(bi, bytes,
|
||||
bi->bi_end_io(bi,
|
||||
test_bit(BIO_UPTODATE, &bi->bi_flags)
|
||||
? 0 : -EIO);
|
||||
bi = return_bi;
|
||||
@@ -382,10 +381,10 @@ static unsigned long get_stripe_work(struct stripe_head *sh)
|
||||
return pending;
|
||||
}
|
||||
|
||||
static int
|
||||
raid5_end_read_request(struct bio *bi, unsigned int bytes_done, int error);
|
||||
static int
|
||||
raid5_end_write_request (struct bio *bi, unsigned int bytes_done, int error);
|
||||
static void
|
||||
raid5_end_read_request(struct bio *bi, int error);
|
||||
static void
|
||||
raid5_end_write_request(struct bio *bi, int error);
|
||||
|
||||
static void ops_run_io(struct stripe_head *sh)
|
||||
{
|
||||
@@ -1110,8 +1109,7 @@ static void shrink_stripes(raid5_conf_t *conf)
|
||||
conf->slab_cache = NULL;
|
||||
}
|
||||
|
||||
static int raid5_end_read_request(struct bio * bi, unsigned int bytes_done,
|
||||
int error)
|
||||
static void raid5_end_read_request(struct bio * bi, int error)
|
||||
{
|
||||
struct stripe_head *sh = bi->bi_private;
|
||||
raid5_conf_t *conf = sh->raid_conf;
|
||||
@@ -1120,8 +1118,6 @@ static int raid5_end_read_request(struct bio * bi, unsigned int bytes_done,
|
||||
char b[BDEVNAME_SIZE];
|
||||
mdk_rdev_t *rdev;
|
||||
|
||||
if (bi->bi_size)
|
||||
return 1;
|
||||
|
||||
for (i=0 ; i<disks; i++)
|
||||
if (bi == &sh->dev[i].req)
|
||||
@@ -1132,7 +1128,7 @@ static int raid5_end_read_request(struct bio * bi, unsigned int bytes_done,
|
||||
uptodate);
|
||||
if (i == disks) {
|
||||
BUG();
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (uptodate) {
|
||||
@@ -1185,20 +1181,15 @@ static int raid5_end_read_request(struct bio * bi, unsigned int bytes_done,
|
||||
clear_bit(R5_LOCKED, &sh->dev[i].flags);
|
||||
set_bit(STRIPE_HANDLE, &sh->state);
|
||||
release_stripe(sh);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int raid5_end_write_request (struct bio *bi, unsigned int bytes_done,
|
||||
int error)
|
||||
static void raid5_end_write_request (struct bio *bi, int error)
|
||||
{
|
||||
struct stripe_head *sh = bi->bi_private;
|
||||
raid5_conf_t *conf = sh->raid_conf;
|
||||
int disks = sh->disks, i;
|
||||
int uptodate = test_bit(BIO_UPTODATE, &bi->bi_flags);
|
||||
|
||||
if (bi->bi_size)
|
||||
return 1;
|
||||
|
||||
for (i=0 ; i<disks; i++)
|
||||
if (bi == &sh->dev[i].req)
|
||||
break;
|
||||
@@ -1208,7 +1199,7 @@ static int raid5_end_write_request (struct bio *bi, unsigned int bytes_done,
|
||||
uptodate);
|
||||
if (i == disks) {
|
||||
BUG();
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!uptodate)
|
||||
@@ -1219,7 +1210,6 @@ static int raid5_end_write_request (struct bio *bi, unsigned int bytes_done,
|
||||
clear_bit(R5_LOCKED, &sh->dev[i].flags);
|
||||
set_bit(STRIPE_HANDLE, &sh->state);
|
||||
release_stripe(sh);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -3340,7 +3330,7 @@ static struct bio *remove_bio_from_retry(raid5_conf_t *conf)
|
||||
* first).
|
||||
* If the read failed..
|
||||
*/
|
||||
static int raid5_align_endio(struct bio *bi, unsigned int bytes, int error)
|
||||
static void raid5_align_endio(struct bio *bi, int error)
|
||||
{
|
||||
struct bio* raid_bi = bi->bi_private;
|
||||
mddev_t *mddev;
|
||||
@@ -3348,8 +3338,6 @@ static int raid5_align_endio(struct bio *bi, unsigned int bytes, int error)
|
||||
int uptodate = test_bit(BIO_UPTODATE, &bi->bi_flags);
|
||||
mdk_rdev_t *rdev;
|
||||
|
||||
if (bi->bi_size)
|
||||
return 1;
|
||||
bio_put(bi);
|
||||
|
||||
mddev = raid_bi->bi_bdev->bd_disk->queue->queuedata;
|
||||
@@ -3360,17 +3348,16 @@ static int raid5_align_endio(struct bio *bi, unsigned int bytes, int error)
|
||||
rdev_dec_pending(rdev, conf->mddev);
|
||||
|
||||
if (!error && uptodate) {
|
||||
bio_endio(raid_bi, bytes, 0);
|
||||
bio_endio(raid_bi, 0);
|
||||
if (atomic_dec_and_test(&conf->active_aligned_reads))
|
||||
wake_up(&conf->wait_for_stripe);
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
pr_debug("raid5_align_endio : io error...handing IO for a retry\n");
|
||||
|
||||
add_bio_to_retry(raid_bi, conf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bio_fits_rdev(struct bio *bi)
|
||||
@@ -3476,7 +3463,7 @@ static int make_request(struct request_queue *q, struct bio * bi)
|
||||
int remaining;
|
||||
|
||||
if (unlikely(bio_barrier(bi))) {
|
||||
bio_endio(bi, bi->bi_size, -EOPNOTSUPP);
|
||||
bio_endio(bi, -EOPNOTSUPP);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3592,12 +3579,11 @@ static int make_request(struct request_queue *q, struct bio * bi)
|
||||
remaining = --bi->bi_phys_segments;
|
||||
spin_unlock_irq(&conf->device_lock);
|
||||
if (remaining == 0) {
|
||||
int bytes = bi->bi_size;
|
||||
|
||||
if ( rw == WRITE )
|
||||
md_write_end(mddev);
|
||||
bi->bi_size = 0;
|
||||
bi->bi_end_io(bi, bytes,
|
||||
|
||||
bi->bi_end_io(bi,
|
||||
test_bit(BIO_UPTODATE, &bi->bi_flags)
|
||||
? 0 : -EIO);
|
||||
}
|
||||
@@ -3875,10 +3861,8 @@ static int retry_aligned_read(raid5_conf_t *conf, struct bio *raid_bio)
|
||||
remaining = --raid_bio->bi_phys_segments;
|
||||
spin_unlock_irq(&conf->device_lock);
|
||||
if (remaining == 0) {
|
||||
int bytes = raid_bio->bi_size;
|
||||
|
||||
raid_bio->bi_size = 0;
|
||||
raid_bio->bi_end_io(raid_bio, bytes,
|
||||
raid_bio->bi_end_io(raid_bio,
|
||||
test_bit(BIO_UPTODATE, &raid_bio->bi_flags)
|
||||
? 0 : -EIO);
|
||||
}
|
||||
|
Reference in New Issue
Block a user