btrfs: cleanup merging conditions in submit_extent_page
authorDavid Sterba <dsterba@suse.com>
Mon, 12 Jun 2017 18:00:43 +0000 (20:00 +0200)
committerDavid Sterba <dsterba@suse.com>
Fri, 30 Mar 2018 23:26:53 +0000 (01:26 +0200)
The merge call was factored out to a separate helper but it's a trivial
one and arguably we can opencode it and cache the value.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index 0794898..fecf1e5 100644 (file)
@@ -2744,18 +2744,6 @@ static int __must_check submit_one_bio(struct bio *bio, int mirror_num,
        return blk_status_to_errno(ret);
 }
 
-static int merge_bio(struct extent_io_tree *tree, struct page *page,
-                    unsigned long offset, size_t size, struct bio *bio,
-                    unsigned long bio_flags)
-{
-       int ret = 0;
-       if (tree->ops)
-               ret = tree->ops->merge_bio_hook(page, offset, size, bio,
-                                               bio_flags);
-       return ret;
-
-}
-
 /*
  * @opf:       bio REQ_OP_* and REQ_* flags as one value
  * @bio_ret:   must be valid pointer, newly allocated bio will be stored there
@@ -2774,23 +2762,27 @@ static int submit_extent_page(unsigned int opf, struct extent_io_tree *tree,
 {
        int ret = 0;
        struct bio *bio;
-       int contig = 0;
-       int old_compressed = prev_bio_flags & EXTENT_BIO_COMPRESSED;
        size_t page_size = min_t(size_t, size, PAGE_SIZE);
        sector_t sector = offset >> 9;
 
        ASSERT(bio_ret);
 
        if (*bio_ret) {
+               bool contig;
+               bool can_merge = true;
+
                bio = *bio_ret;
-               if (old_compressed)
+               if (prev_bio_flags & EXTENT_BIO_COMPRESSED)
                        contig = bio->bi_iter.bi_sector == sector;
                else
                        contig = bio_end_sector(bio) == sector;
 
-               if (prev_bio_flags != bio_flags || !contig ||
+               if (tree->ops && tree->ops->merge_bio_hook(page, offset,
+                                       page_size, bio, bio_flags))
+                       can_merge = false;
+
+               if (prev_bio_flags != bio_flags || !contig || !can_merge ||
                    force_bio_submit ||
-                   merge_bio(tree, page, pg_offset, page_size, bio, bio_flags) ||
                    bio_add_page(bio, page, page_size, pg_offset) < page_size) {
                        ret = submit_one_bio(bio, mirror_num, prev_bio_flags);
                        if (ret < 0) {