Commit a872818f authored by Jens Axboe's avatar Jens Axboe

Merge branch 'md-next' of...

Merge branch 'md-next' of https://git.kernel.org/pub/scm/linux/kernel/git/song/md into for-6.3/block

Pull MD fix from Song:

"This commit fixes a rare crash during the takeover process."

* 'md-next' of https://git.kernel.org/pub/scm/linux/kernel/git/song/md:
  md: account io_acct_set usage with active_io
parents 0abe39de 76fed014
...@@ -8628,12 +8628,15 @@ static void md_end_io_acct(struct bio *bio) ...@@ -8628,12 +8628,15 @@ static void md_end_io_acct(struct bio *bio)
{ {
struct md_io_acct *md_io_acct = bio->bi_private; struct md_io_acct *md_io_acct = bio->bi_private;
struct bio *orig_bio = md_io_acct->orig_bio; struct bio *orig_bio = md_io_acct->orig_bio;
struct mddev *mddev = md_io_acct->mddev;
orig_bio->bi_status = bio->bi_status; orig_bio->bi_status = bio->bi_status;
bio_end_io_acct(orig_bio, md_io_acct->start_time); bio_end_io_acct(orig_bio, md_io_acct->start_time);
bio_put(bio); bio_put(bio);
bio_endio(orig_bio); bio_endio(orig_bio);
percpu_ref_put(&mddev->active_io);
} }
/* /*
...@@ -8649,10 +8652,13 @@ void md_account_bio(struct mddev *mddev, struct bio **bio) ...@@ -8649,10 +8652,13 @@ void md_account_bio(struct mddev *mddev, struct bio **bio)
if (!blk_queue_io_stat(bdev->bd_disk->queue)) if (!blk_queue_io_stat(bdev->bd_disk->queue))
return; return;
percpu_ref_get(&mddev->active_io);
clone = bio_alloc_clone(bdev, *bio, GFP_NOIO, &mddev->io_acct_set); clone = bio_alloc_clone(bdev, *bio, GFP_NOIO, &mddev->io_acct_set);
md_io_acct = container_of(clone, struct md_io_acct, bio_clone); md_io_acct = container_of(clone, struct md_io_acct, bio_clone);
md_io_acct->orig_bio = *bio; md_io_acct->orig_bio = *bio;
md_io_acct->start_time = bio_start_io_acct(*bio); md_io_acct->start_time = bio_start_io_acct(*bio);
md_io_acct->mddev = mddev;
clone->bi_end_io = md_end_io_acct; clone->bi_end_io = md_end_io_acct;
clone->bi_private = md_io_acct; clone->bi_private = md_io_acct;
......
...@@ -710,9 +710,10 @@ struct md_thread { ...@@ -710,9 +710,10 @@ struct md_thread {
}; };
struct md_io_acct { struct md_io_acct {
struct bio *orig_bio; struct mddev *mddev;
unsigned long start_time; struct bio *orig_bio;
struct bio bio_clone; unsigned long start_time;
struct bio bio_clone;
}; };
#define THREAD_WAKEUP 0 #define THREAD_WAKEUP 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment