bio_end_io_t *orig_bi_end_io;
        void *orig_bi_private;
        unsigned long start_time;
+       struct hd_struct *part;
 };
 
 static void md_end_io(struct bio *bio)
        struct md_io *md_io = bio->bi_private;
        struct mddev *mddev = md_io->mddev;
 
-       disk_end_io_acct(mddev->gendisk, bio_op(bio), md_io->start_time);
+       part_end_io_acct(md_io->part, bio, md_io->start_time);
 
        bio->bi_end_io = md_io->orig_bi_end_io;
        bio->bi_private = md_io->orig_bi_private;
                bio->bi_end_io = md_end_io;
                bio->bi_private = md_io;
 
-               md_io->start_time = disk_start_io_acct(mddev->gendisk,
-                                                      bio_sectors(bio),
-                                                      bio_op(bio));
+               md_io->start_time = part_start_io_acct(mddev->gendisk,
+                                                      &md_io->part, bio);
        }
 
        /* bio could be mergeable after passing to underlayer */