Commit d7c8aa85 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

direct-io: use bio_release_pages in dio_bio_complete



Use bio_release_pages instead of duplicating it.

Reviewed-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 9fec4a21
Loading
Loading
Loading
Loading
+3 −12
Original line number Diff line number Diff line
@@ -538,8 +538,8 @@ static struct bio *dio_await_one(struct dio *dio)
 */
static blk_status_t dio_bio_complete(struct dio *dio, struct bio *bio)
{
	struct bio_vec *bvec;
	blk_status_t err = bio->bi_status;
	bool should_dirty = dio->op == REQ_OP_READ && dio->should_dirty;

	if (err) {
		if (err == BLK_STS_AGAIN && (bio->bi_opf & REQ_NOWAIT))
@@ -548,19 +548,10 @@ static blk_status_t dio_bio_complete(struct dio *dio, struct bio *bio)
			dio->io_error = -EIO;
	}

	if (dio->is_async && dio->op == REQ_OP_READ && dio->should_dirty) {
	if (dio->is_async && should_dirty) {
		bio_check_pages_dirty(bio);	/* transfers ownership */
	} else {
		struct bvec_iter_all iter_all;

		bio_for_each_segment_all(bvec, bio, iter_all) {
			struct page *page = bvec->bv_page;

			if (dio->op == REQ_OP_READ && !PageCompound(page) &&
					dio->should_dirty)
				set_page_dirty_lock(page);
			put_page(page);
		}
		bio_release_pages(bio, should_dirty);
		bio_put(bio);
	}
	return err;