block: Warn and free bio if bi_end_io is not set

In bio_endio if bio doesn't have bi_end_io (should be an error case),
we set bio to NULL and continue silently without freeing the bio. It
would be good to have a WARN and free the bio to avoid memory leak.

Signed-off-by: Muthukumar Ratty <muthur@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Muthukumar Ratty 2014-01-08 09:39:49 -07:00 committed by Jens Axboe
parent 0fec08b4ec
commit 95d4403889

View File

@ -1770,6 +1770,15 @@ void bio_endio(struct bio *bio, int error)
} else {
if (bio->bi_end_io)
bio->bi_end_io(bio, error);
else {
char dev_name[BDEVNAME_SIZE];
WARN(1, "bio_endio: bio for %s without endio\n",
bio->bi_bdev ? bdevname(bio->bi_bdev,
dev_name) : "(unknown)");
bio_put(bio);
}
bio = NULL;
}
}