Commit a872818f authored by Jens Axboe's avatar Jens Axboe
Browse files

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
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -8628,12 +8628,15 @@ static void md_end_io_acct(struct bio *bio)
{
	struct md_io_acct *md_io_acct = bio->bi_private;
	struct bio *orig_bio = md_io_acct->orig_bio;
	struct mddev *mddev = md_io_acct->mddev;

	orig_bio->bi_status = bio->bi_status;

	bio_end_io_acct(orig_bio, md_io_acct->start_time);
	bio_put(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)
	if (!blk_queue_io_stat(bdev->bd_disk->queue))
		return;

	percpu_ref_get(&mddev->active_io);

	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->orig_bio = *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_private = md_io_acct;
+4 −3
Original line number Diff line number Diff line
@@ -710,6 +710,7 @@ struct md_thread {
};

struct md_io_acct {
	struct mddev	*mddev;
	struct bio	*orig_bio;
	unsigned long	start_time;
	struct bio	bio_clone;