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
This commit is contained in:
commit
a872818f48
@ -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;
|
||||
|
@ -710,9 +710,10 @@ struct md_thread {
|
||||
};
|
||||
|
||||
struct md_io_acct {
|
||||
struct bio *orig_bio;
|
||||
unsigned long start_time;
|
||||
struct bio bio_clone;
|
||||
struct mddev *mddev;
|
||||
struct bio *orig_bio;
|
||||
unsigned long start_time;
|
||||
struct bio bio_clone;
|
||||
};
|
||||
|
||||
#define THREAD_WAKEUP 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user