Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbf975ef authored by Xiao Ni's avatar Xiao Ni Committed by Greg Kroah-Hartman
Browse files

MD: Memory leak when flush bio size is zero



[ Upstream commit af9b926de9c5986ab009e64917de87c9758bab10 ]

flush_pool is leaked when flush bio size is zero

Fixes: 5a409b4f ("MD: fix lock contention for flush bios")
Signed-off-by: default avatarDavid Jeffery <djeffery@redhat.com>
Signed-off-by: default avatarXiao Ni <xni@redhat.com>
Signed-off-by: default avatarShaohua Li <shli@fb.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 64c90d9c
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -452,10 +452,11 @@ static void md_end_flush(struct bio *fbio)
	rdev_dec_pending(rdev, mddev);

	if (atomic_dec_and_test(&fi->flush_pending)) {
		if (bio->bi_iter.bi_size == 0)
		if (bio->bi_iter.bi_size == 0) {
			/* an empty barrier - all done */
			bio_endio(bio);
		else {
			mempool_free(fi, mddev->flush_pool);
		} else {
			INIT_WORK(&fi->flush_work, submit_flushes);
			queue_work(md_wq, &fi->flush_work);
		}
@@ -509,10 +510,11 @@ void md_flush_request(struct mddev *mddev, struct bio *bio)
	rcu_read_unlock();

	if (atomic_dec_and_test(&fi->flush_pending)) {
		if (bio->bi_iter.bi_size == 0)
		if (bio->bi_iter.bi_size == 0) {
			/* an empty barrier - all done */
			bio_endio(bio);
		else {
			mempool_free(fi, mddev->flush_pool);
		} else {
			INIT_WORK(&fi->flush_work, submit_flushes);
			queue_work(md_wq, &fi->flush_work);
		}