if (!test_bit(R1BIO_Uptodate, &r1_bio->state))
                bio->bi_status = BLK_STS_IOERR;
 
-       if (blk_queue_io_stat(bio->bi_bdev->bd_disk->queue))
-               bio_end_io_acct(bio, r1_bio->start_time);
        bio_endio(bio);
 }
 
        }
 
        r1_bio->read_disk = rdisk;
-
-       if (!r1bio_existed && blk_queue_io_stat(bio->bi_bdev->bd_disk->queue))
-               r1_bio->start_time = bio_start_io_acct(bio);
-
+       if (!r1bio_existed) {
+               md_account_bio(mddev, &bio);
+               r1_bio->master_bio = bio;
+       }
        read_bio = bio_alloc_clone(mirror->rdev->bdev, bio, gfp,
                                   &mddev->bio_set);
 
                r1_bio->sectors = max_sectors;
        }
 
-       if (blk_queue_io_stat(bio->bi_bdev->bd_disk->queue))
-               r1_bio->start_time = bio_start_io_acct(bio);
+       md_account_bio(mddev, &bio);
+       r1_bio->master_bio = bio;
        atomic_set(&r1_bio->remaining, 1);
        atomic_set(&r1_bio->behind_remaining, 0);