block: fix page leak when merging to same page
authorChristoph Hellwig <hch@lst.de>
Mon, 17 Jun 2019 09:14:12 +0000 (11:14 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 17 Jun 2019 15:33:04 +0000 (09:33 -0600)
commit4569180495600ac59f5cd27f67242a6cb51254f3
tree5fc8de0946ff131ad03282d9bad310f29814a9b0
parentff896738be381efa6e50ba9a3b6cdc94f69ada42
block: fix page leak when merging to same page

When multiple iovecs reference the same page, each get_user_page call
will add a reference to the page.  But once we've created the bio that
information gets lost and only a single reference will be dropped after
I/O completion.  Use the same_page information returned from
__bio_try_merge_page to drop additional references to pages that were
already present in the bio.

Based on a patch from Ming Lei.

Link: https://lkml.org/lkml/2019/4/23/64
Fixes: 576ed913 ("block: use bio_add_page in bio_iov_iter_get_pages")
Reported-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bio.c