btrfs: Refactor btrfs_merge_bio_hook
authorNikolay Borisov <nborisov@suse.com>
Tue, 27 Nov 2018 18:57:58 +0000 (20:57 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 17 Dec 2018 13:51:42 +0000 (14:51 +0100)
This function really checks whether adding more data to the bio will
straddle a stripe/chunk. So first let's give it a more appropraite name
- btrfs_bio_fits_in_stripe. Secondly, the offset parameter was never
used to just remove it. Thirdly, pages are submitted to either btree or
data inodes so it's guaranteed that tree->ops is set so replace the
check with an ASSERT. Finally, document the parameters of the function.
No functional changes.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/compression.c
fs/btrfs/ctree.h
fs/btrfs/extent_io.c
fs/btrfs/inode.c
fs/btrfs/volumes.c

index 34d50bc5c10ddf5fb355b54914f8c52b5ba228d7..dba59ae914b8f7bedf8d2f09ad23ee32464a87ac 100644 (file)
@@ -332,7 +332,8 @@ blk_status_t btrfs_submit_compressed_write(struct inode *inode, u64 start,
                page = compressed_pages[pg_index];
                page->mapping = inode->i_mapping;
                if (bio->bi_iter.bi_size)
-                       submit = btrfs_merge_bio_hook(page, 0, PAGE_SIZE, bio, 0);
+                       submit = btrfs_bio_fits_in_stripe(page, PAGE_SIZE, bio,
+                                                         0);
 
                page->mapping = NULL;
                if (submit || bio_add_page(bio, page, PAGE_SIZE, 0) <
@@ -610,8 +611,8 @@ blk_status_t btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
                page->index = em_start >> PAGE_SHIFT;
 
                if (comp_bio->bi_iter.bi_size)
-                       submit = btrfs_merge_bio_hook(page, 0, PAGE_SIZE,
-                                       comp_bio, 0);
+                       submit = btrfs_bio_fits_in_stripe(page, PAGE_SIZE,
+                                                         comp_bio, 0);
 
                page->mapping = NULL;
                if (submit || bio_add_page(comp_bio, page, PAGE_SIZE, 0) <
index d2a930279a1a872644bfac17ff8b6a6aa960cb2b..0ac7efd3d2b2730e4a9c24816ef806964c050e88 100644 (file)
@@ -3191,9 +3191,8 @@ void btrfs_merge_delalloc_extent(struct inode *inode, struct extent_state *new,
                                 struct extent_state *other);
 void btrfs_split_delalloc_extent(struct inode *inode,
                                 struct extent_state *orig, u64 split);
-int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
-                        size_t size, struct bio *bio,
-                        unsigned long bio_flags);
+int btrfs_bio_fits_in_stripe(struct page *page, size_t size, struct bio *bio,
+                            unsigned long bio_flags);
 void btrfs_set_range_writeback(struct extent_io_tree *tree, u64 start, u64 end);
 vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf);
 int btrfs_readpage(struct file *file, struct page *page);
index 7aafdec49dc3ada209a1a3c2355a1b6512817cd2..b2769e92b55640ab8413b5d252c94ffec053591b 100644 (file)
@@ -2759,8 +2759,8 @@ static int submit_extent_page(unsigned int opf, struct extent_io_tree *tree,
                else
                        contig = bio_end_sector(bio) == sector;
 
-               if (tree->ops && btrfs_merge_bio_hook(page, offset, page_size,
-                                                     bio, bio_flags))
+               ASSERT(tree->ops);
+               if (btrfs_bio_fits_in_stripe(page, page_size, bio, bio_flags))
                        can_merge = false;
 
                if (prev_bio_flags != bio_flags || !contig || !can_merge ||
index c2c96acaf2fcb40e8496913fb023e0aca723c1bb..d54bdef16d8d56b81793e04a0b7b6426144c6d13 100644 (file)
@@ -1870,16 +1870,21 @@ void btrfs_clear_delalloc_extent(struct inode *vfs_inode,
 }
 
 /*
- * Merge bio hook, this must check the chunk tree to make sure we don't create
- * bios that span stripes or chunks
+ * btrfs_bio_fits_in_stripe - Checks whether the size of the given bio will fit
+ * in a chunk's stripe. This function ensures that bios do not span a
+ * stripe/chunk
  *
- * return 1 if page cannot be merged to bio
- * return 0 if page can be merged to bio
+ * @page - The page we are about to add to the bio
+ * @size - size we want to add to the bio
+ * @bio - bio we want to ensure is smaller than a stripe
+ * @bio_flags - flags of the bio
+ *
+ * return 1 if page cannot be added to the bio
+ * return 0 if page can be added to the bio
  * return error otherwise
  */
-int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
-                        size_t size, struct bio *bio,
-                        unsigned long bio_flags)
+int btrfs_bio_fits_in_stripe(struct page *page, size_t size, struct bio *bio,
+                            unsigned long bio_flags)
 {
        struct inode *inode = page->mapping->host;
        struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
index 2085d4d3a6fe9179e093707031abc1de3459f125..6c806808b6a14de29c30b566501117a76ffdce82 100644 (file)
@@ -6136,8 +6136,10 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info,
                *length = em->len - offset;
        }
 
-       /* This is for when we're called from btrfs_merge_bio_hook() and all
-          it cares about is the length */
+       /*
+        * This is for when we're called from btrfs_bio_fits_in_stripe and all
+        * it cares about is the length
+        */
        if (!bbio_ret)
                goto out;