]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: drop create parameter to btrfs_get_extent()
authorOmar Sandoval <osandov@fb.com>
Tue, 3 Dec 2019 01:34:23 +0000 (17:34 -0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 20 Jan 2020 15:40:55 +0000 (16:40 +0100)
We only pass this as 1 from __extent_writepage_io(). The parameter
basically means "pretend I didn't pass in a page". This is silly since
we can simply not pass in the page. Get rid of the parameter from
btrfs_get_extent(), and since it's used as a get_extent_t callback,
remove it from get_extent_t and btree_get_extent(), neither of which
need it.

While we're here, let's document btrfs_get_extent().

Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/disk-io.h
fs/btrfs/extent_io.c
fs/btrfs/extent_io.h
fs/btrfs/file.c
fs/btrfs/inode.c
fs/btrfs/ioctl.c
fs/btrfs/tests/inode-tests.c

index f895fb490b7570c85f585bcb7744b555df24e224..e416ef6c9415a7e6c4b57a0c3f27c60bb84d4117 100644 (file)
@@ -2875,7 +2875,7 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
                         struct btrfs_root *root);
 struct extent_map *btrfs_get_extent(struct btrfs_inode *inode,
                                    struct page *page, size_t pg_offset,
-                                   u64 start, u64 end, int create);
+                                   u64 start, u64 end);
 int btrfs_update_inode(struct btrfs_trans_handle *trans,
                              struct btrfs_root *root,
                              struct inode *inode);
index ab888d89d844c2b3b6c33ec32b4e0f42e75f4f47..881aba162e4e23fb92741f8e5788461ff6d6229c 100644 (file)
@@ -202,8 +202,8 @@ void btrfs_set_buffer_lockdep_class(u64 objectid, struct extent_buffer *eb,
  * that covers the entire device
  */
 struct extent_map *btree_get_extent(struct btrfs_inode *inode,
-               struct page *page, size_t pg_offset, u64 start, u64 len,
-               int create)
+                                   struct page *page, size_t pg_offset,
+                                   u64 start, u64 len)
 {
        struct extent_map_tree *em_tree = &inode->extent_tree;
        struct extent_map *em;
index 76f123ebb292178ce4ce198c7ca706e5ae613891..8c2d6cf1ce5969b3804e842c3c6841b9c250289c 100644 (file)
@@ -134,8 +134,8 @@ struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans,
 int btree_lock_page_hook(struct page *page, void *data,
                                void (*flush_fn)(void *));
 struct extent_map *btree_get_extent(struct btrfs_inode *inode,
-               struct page *page, size_t pg_offset, u64 start, u64 len,
-               int create);
+                                   struct page *page, size_t pg_offset,
+                                   u64 start, u64 len);
 int btrfs_get_num_tolerated_disk_barrier_failures(u64 flags);
 int __init btrfs_end_io_wq_init(void);
 void __cold btrfs_end_io_wq_exit(void);
index 00ddefcb54c8877ee5fa7b0dac06213e2fc6255a..bbfb102d65b86f7f80fdfc59aa5bbf7e370ed128 100644 (file)
@@ -3043,7 +3043,7 @@ __get_extent_map(struct inode *inode, struct page *page, size_t pg_offset,
                *em_cached = NULL;
        }
 
-       em = get_extent(BTRFS_I(inode), page, pg_offset, start, len, 0);
+       em = get_extent(BTRFS_I(inode), page, pg_offset, start, len);
        if (em_cached && !IS_ERR_OR_NULL(em)) {
                BUG_ON(*em_cached);
                refcount_inc(&em->refs);
@@ -3466,8 +3466,8 @@ static noinline_for_stack int __extent_writepage_io(struct inode *inode,
                                                             page_end, 1);
                        break;
                }
-               em = btrfs_get_extent(BTRFS_I(inode), page, pg_offset, cur,
-                                    end - cur + 1, 1);
+               em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, cur,
+                                     end - cur + 1);
                if (IS_ERR_OR_NULL(em)) {
                        SetPageError(page);
                        ret = PTR_ERR_OR_ZERO(em);
index a8551a1f56e247e1d988f9da2f545d8680983d95..5d205bbaafdcb184f107ae55ace5f31ea01ccfc6 100644 (file)
@@ -183,10 +183,8 @@ static inline int extent_compress_type(unsigned long bio_flags)
 struct extent_map_tree;
 
 typedef struct extent_map *(get_extent_t)(struct btrfs_inode *inode,
-                                         struct page *page,
-                                         size_t pg_offset,
-                                         u64 start, u64 len,
-                                         int create);
+                                         struct page *page, size_t pg_offset,
+                                         u64 start, u64 len);
 
 int try_release_extent_mapping(struct page *page, gfp_t mask);
 int try_release_extent_buffer(struct page *page);
index 76c68c70d3e28447aa1a5ac4d7cd8d01a2dd0a5c..a16da274c9aad052ff24d9f2139c8511e15a9445 100644 (file)
@@ -477,8 +477,7 @@ static int btrfs_find_new_delalloc_bytes(struct btrfs_inode *inode,
                u64 em_len;
                int ret = 0;
 
-               em = btrfs_get_extent(inode, NULL, 0, search_start,
-                                     search_len, 0);
+               em = btrfs_get_extent(inode, NULL, 0, search_start, search_len);
                if (IS_ERR(em))
                        return PTR_ERR(em);
 
@@ -2390,7 +2389,7 @@ static int find_first_non_hole(struct inode *inode, u64 *start, u64 *len)
 
        em = btrfs_get_extent(BTRFS_I(inode), NULL, 0,
                              round_down(*start, fs_info->sectorsize),
-                             round_up(*len, fs_info->sectorsize), 0);
+                             round_up(*len, fs_info->sectorsize));
        if (IS_ERR(em))
                return PTR_ERR(em);
 
@@ -2957,7 +2956,7 @@ static int btrfs_zero_range_check_range_boundary(struct inode *inode,
        int ret;
 
        offset = round_down(offset, sectorsize);
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em))
                return PTR_ERR(em);
 
@@ -2990,8 +2989,8 @@ static int btrfs_zero_range(struct inode *inode,
 
        inode_dio_wait(inode);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0,
-                             alloc_start, alloc_end - alloc_start, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, alloc_start,
+                             alloc_end - alloc_start);
        if (IS_ERR(em)) {
                ret = PTR_ERR(em);
                goto out;
@@ -3034,8 +3033,8 @@ static int btrfs_zero_range(struct inode *inode,
 
        if (BTRFS_BYTES_TO_BLKS(fs_info, offset) ==
            BTRFS_BYTES_TO_BLKS(fs_info, offset + len - 1)) {
-               em = btrfs_get_extent(BTRFS_I(inode), NULL, 0,
-                                     alloc_start, sectorsize, 0);
+               em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, alloc_start,
+                                     sectorsize);
                if (IS_ERR(em)) {
                        ret = PTR_ERR(em);
                        goto out;
@@ -3273,7 +3272,7 @@ static long btrfs_fallocate(struct file *file, int mode,
        INIT_LIST_HEAD(&reserve_list);
        while (cur_offset < alloc_end) {
                em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, cur_offset,
-                                     alloc_end - cur_offset, 0);
+                                     alloc_end - cur_offset);
                if (IS_ERR(em)) {
                        ret = PTR_ERR(em);
                        break;
index 0695d64df05bf73d7c44eed750123a1d94c92dc0..bf5d7ce358b5aa2f2a3a8bd29a10fc2ef5f9687b 100644 (file)
@@ -4504,7 +4504,7 @@ int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size)
        cur_offset = hole_start;
        while (1) {
                em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, cur_offset,
-                               block_end - cur_offset, 0);
+                                     block_end - cur_offset);
                if (IS_ERR(em)) {
                        err = PTR_ERR(em);
                        em = NULL;
@@ -6283,18 +6283,27 @@ static noinline int uncompress_inline(struct btrfs_path *path,
        return ret;
 }
 
-/*
- * a bit scary, this does extent mapping from logical file offset to the disk.
- * the ugly parts come from merging extents from the disk with the in-ram
- * representation.  This gets more complex because of the data=ordered code,
- * where the in-ram extents might be locked pending data=ordered completion.
+/**
+ * btrfs_get_extent - Lookup the first extent overlapping a range in a file.
+ * @inode:     file to search in
+ * @page:      page to read extent data into if the extent is inline
+ * @pg_offset: offset into @page to copy to
+ * @start:     file offset
+ * @len:       length of range starting at @start
+ *
+ * This returns the first &struct extent_map which overlaps with the given
+ * range, reading it from the B-tree and caching it if necessary. Note that
+ * there may be more extents which overlap the given range after the returned
+ * extent_map.
  *
- * This also copies inline extents directly into the page.
+ * If @page is not NULL and the extent is inline, this also reads the extent
+ * data directly into the page and marks the extent up to date in the io_tree.
+ *
+ * Return: ERR_PTR on error, non-NULL extent_map on success.
  */
 struct extent_map *btrfs_get_extent(struct btrfs_inode *inode,
-                                   struct page *page,
-                                   size_t pg_offset, u64 start, u64 len,
-                                   int create)
+                                   struct page *page, size_t pg_offset,
+                                   u64 start, u64 len)
 {
        struct btrfs_fs_info *fs_info = inode->root->fs_info;
        int ret;
@@ -6311,7 +6320,6 @@ struct extent_map *btrfs_get_extent(struct btrfs_inode *inode,
        struct extent_map *em = NULL;
        struct extent_map_tree *em_tree = &inode->extent_tree;
        struct extent_io_tree *io_tree = &inode->io_tree;
-       const bool new_inline = !page || create;
 
        read_lock(&em_tree->lock);
        em = lookup_extent_mapping(em_tree, start, len);
@@ -6434,8 +6442,7 @@ next:
                goto insert;
        }
 
-       btrfs_extent_item_to_extent_map(inode, path, item,
-                       new_inline, em);
+       btrfs_extent_item_to_extent_map(inode, path, item, !page, em);
 
        if (extent_type == BTRFS_FILE_EXTENT_REG ||
            extent_type == BTRFS_FILE_EXTENT_PREALLOC) {
@@ -6447,7 +6454,7 @@ next:
                size_t extent_offset;
                size_t copy_size;
 
-               if (new_inline)
+               if (!page)
                        goto out;
 
                size = btrfs_file_extent_ram_bytes(leaf, item);
@@ -6530,7 +6537,7 @@ struct extent_map *btrfs_get_extent_fiemap(struct btrfs_inode *inode,
        u64 delalloc_end;
        int err = 0;
 
-       em = btrfs_get_extent(inode, NULL, 0, start, len, 0);
+       em = btrfs_get_extent(inode, NULL, 0, start, len);
        if (IS_ERR(em))
                return em;
        /*
@@ -7155,7 +7162,7 @@ static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock,
                goto err;
        }
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, start, len, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, start, len);
        if (IS_ERR(em)) {
                ret = PTR_ERR(em);
                goto unlock_err;
@@ -10166,7 +10173,7 @@ static int btrfs_swap_activate(struct swap_info_struct *sis, struct file *file,
                struct btrfs_block_group *bg;
                u64 len = isize - start;
 
-               em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, start, len, 0);
+               em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, start, len);
                if (IS_ERR(em)) {
                        ret = PTR_ERR(em);
                        goto out;
index 12ae31e1813e4e0a02079faa48daa7be86ab8dea..1b1b6ff855aa6aeb9ccd1fd2c90066506500e24f 100644 (file)
@@ -1128,7 +1128,7 @@ static struct extent_map *defrag_lookup_extent(struct inode *inode, u64 start)
 
                /* get the big lock and read metadata off disk */
                lock_extent_bits(io_tree, start, end, &cached);
-               em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, start, len, 0);
+               em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, start, len);
                unlock_extent_cached(io_tree, start, end, &cached);
 
                if (IS_ERR(em))
index 09ecf7dc7b0829b535b869f1350d76c75938bca0..24a8c714f56cf22a4e96fad8acbd79839ba2beaf 100644 (file)
@@ -263,7 +263,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
 
        /* First with no extents */
        BTRFS_I(inode)->root = root;
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, 0, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, 0, sectorsize);
        if (IS_ERR(em)) {
                em = NULL;
                test_err("got an error when we shouldn't have");
@@ -283,7 +283,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
         */
        setup_file_extents(root, sectorsize);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, 0, (u64)-1, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, 0, (u64)-1);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -305,7 +305,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -333,7 +333,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -356,7 +356,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        free_extent_map(em);
 
        /* Regular extent */
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -384,7 +384,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        free_extent_map(em);
 
        /* The next 3 are split extents */
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -413,7 +413,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -435,7 +435,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -469,7 +469,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        free_extent_map(em);
 
        /* Prealloc extent */
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -498,7 +498,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        free_extent_map(em);
 
        /* The next 3 are a half written prealloc extent */
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -528,7 +528,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -561,7 +561,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -596,7 +596,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        free_extent_map(em);
 
        /* Now for the compressed extent */
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -630,7 +630,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        free_extent_map(em);
 
        /* Split compressed extent */
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -665,7 +665,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -692,7 +692,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -727,8 +727,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        free_extent_map(em);
 
        /* A hole between regular extents but no hole extent */
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset + 6,
-                       sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset + 6, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -755,7 +754,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, SZ_4M, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, SZ_4M);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -788,7 +787,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
        offset = em->start + em->len;
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -872,7 +871,7 @@ static int test_hole_first(u32 sectorsize, u32 nodesize)
        insert_inode_item_key(root);
        insert_extent(root, sectorsize, sectorsize, sectorsize, 0, sectorsize,
                      sectorsize, BTRFS_FILE_EXTENT_REG, 0, 1);
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, 0, 2 * sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, 0, 2 * sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;
@@ -894,8 +893,7 @@ static int test_hole_first(u32 sectorsize, u32 nodesize)
        }
        free_extent_map(em);
 
-       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, sectorsize,
-                       2 * sectorsize, 0);
+       em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, sectorsize, 2 * sectorsize);
        if (IS_ERR(em)) {
                test_err("got an error when we shouldn't have");
                goto out;