block: hold extra reference to bio in blk_rq_map_user_iov()
authorJens Axboe <jens.axboe@oracle.com>
Tue, 18 Nov 2008 14:07:05 +0000 (15:07 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Tue, 18 Nov 2008 14:08:56 +0000 (15:08 +0100)
commitc26156b2534c75bb3cdedf76f6ad1340971cf5bd
treeb95ed72f569c105fcc9e8f38df3d47628e689059
parent98ba4031ab2adc8b394295e68aa4c8fe9d5060db
block: hold extra reference to bio in blk_rq_map_user_iov()

If the size passed in is OK but we end up mapping too many segments,
we call the unmap path directly like from IO completion. But from IO
completion we have an extra reference to the bio, so this error case
goes OOPS when it attempts to free and already free bio.

Fix it by getting an extra reference to the bio before calling the
unmap failure case.

Reported-by: Petr Vandrovec <vandrove@vc.cvut.cz>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/blk-map.c