Commit c9bc621f authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David Sterba

btrfs: move the compress_type check out of btrfs_bio_add_page

The compress_type can only change on a per-extent basis.  So instead of
checking it for every page in btrfs_bio_add_page, do the check once in
btrfs_do_readpage, which is the only caller of btrfs_bio_add_page and
submit_extent_page that deals with compressed extents.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 72b505dc
...@@ -875,7 +875,6 @@ int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array) ...@@ -875,7 +875,6 @@ int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array)
* a contiguous page to the previous one * a contiguous page to the previous one
* @size: portion of page that we want to write * @size: portion of page that we want to write
* @pg_offset: starting offset in the page * @pg_offset: starting offset in the page
* @compress_type: compression type of the current bio to see if we can merge them
* *
* Attempt to add a page to bio considering stripe alignment etc. * Attempt to add a page to bio considering stripe alignment etc.
* *
...@@ -886,8 +885,7 @@ int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array) ...@@ -886,8 +885,7 @@ int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array)
static int btrfs_bio_add_page(struct btrfs_bio_ctrl *bio_ctrl, static int btrfs_bio_add_page(struct btrfs_bio_ctrl *bio_ctrl,
struct page *page, struct page *page,
u64 disk_bytenr, unsigned int size, u64 disk_bytenr, unsigned int size,
unsigned int pg_offset, unsigned int pg_offset)
enum btrfs_compression_type compress_type)
{ {
struct bio *bio = bio_ctrl->bio; struct bio *bio = bio_ctrl->bio;
u32 bio_size = bio->bi_iter.bi_size; u32 bio_size = bio->bi_iter.bi_size;
...@@ -898,9 +896,6 @@ static int btrfs_bio_add_page(struct btrfs_bio_ctrl *bio_ctrl, ...@@ -898,9 +896,6 @@ static int btrfs_bio_add_page(struct btrfs_bio_ctrl *bio_ctrl,
ASSERT(bio); ASSERT(bio);
/* The limit should be calculated when bio_ctrl->bio is allocated */ /* The limit should be calculated when bio_ctrl->bio is allocated */
ASSERT(bio_ctrl->len_to_oe_boundary); ASSERT(bio_ctrl->len_to_oe_boundary);
if (bio_ctrl->compress_type != compress_type)
return 0;
if (bio->bi_iter.bi_size == 0) { if (bio->bi_iter.bi_size == 0) {
/* We can always add a page into an empty bio. */ /* We can always add a page into an empty bio. */
...@@ -1049,12 +1044,11 @@ static int submit_extent_page(struct btrfs_bio_ctrl *bio_ctrl, ...@@ -1049,12 +1044,11 @@ static int submit_extent_page(struct btrfs_bio_ctrl *bio_ctrl,
*/ */
if (compress_type != BTRFS_COMPRESS_NONE) if (compress_type != BTRFS_COMPRESS_NONE)
added = btrfs_bio_add_page(bio_ctrl, page, disk_bytenr, added = btrfs_bio_add_page(bio_ctrl, page, disk_bytenr,
size - offset, pg_offset + offset, size - offset, pg_offset + offset);
compress_type);
else else
added = btrfs_bio_add_page(bio_ctrl, page, added = btrfs_bio_add_page(bio_ctrl, page,
disk_bytenr + offset, size - offset, disk_bytenr + offset, size - offset,
pg_offset + offset, compress_type); pg_offset + offset);
/* Metadata page range should never be split */ /* Metadata page range should never be split */
if (!is_data_inode(&inode->vfs_inode)) if (!is_data_inode(&inode->vfs_inode))
...@@ -1320,6 +1314,9 @@ static int btrfs_do_readpage(struct page *page, struct extent_map **em_cached, ...@@ -1320,6 +1314,9 @@ static int btrfs_do_readpage(struct page *page, struct extent_map **em_cached,
continue; continue;
} }
if (bio_ctrl->compress_type != this_bio_flag)
submit_one_bio(bio_ctrl);
if (force_bio_submit) if (force_bio_submit)
submit_one_bio(bio_ctrl); submit_one_bio(bio_ctrl);
ret = submit_extent_page(bio_ctrl, disk_bytenr, page, iosize, ret = submit_extent_page(bio_ctrl, disk_bytenr, page, iosize,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment