mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-04 04:04:19 +00:00
blkdev: __blkdev_direct_IO_simple: fix leak in error case
Fixes: 72ecad22d9
("block: support a full bio worth of IO for simplified bdev direct-io")
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
b403ea2404
commit
9362dd1109
@ -220,7 +220,7 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
|
|||||||
|
|
||||||
ret = bio_iov_iter_get_pages(&bio, iter);
|
ret = bio_iov_iter_get_pages(&bio, iter);
|
||||||
if (unlikely(ret))
|
if (unlikely(ret))
|
||||||
return ret;
|
goto out;
|
||||||
ret = bio.bi_iter.bi_size;
|
ret = bio.bi_iter.bi_size;
|
||||||
|
|
||||||
if (iov_iter_rw(iter) == READ) {
|
if (iov_iter_rw(iter) == READ) {
|
||||||
@ -249,12 +249,13 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
|
|||||||
put_page(bvec->bv_page);
|
put_page(bvec->bv_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vecs != inline_vecs)
|
|
||||||
kfree(vecs);
|
|
||||||
|
|
||||||
if (unlikely(bio.bi_status))
|
if (unlikely(bio.bi_status))
|
||||||
ret = blk_status_to_errno(bio.bi_status);
|
ret = blk_status_to_errno(bio.bi_status);
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (vecs != inline_vecs)
|
||||||
|
kfree(vecs);
|
||||||
|
|
||||||
bio_uninit(&bio);
|
bio_uninit(&bio);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user