Merge tag 'for-4.18-part2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 14 Jun 2018 22:23:00 +0000 (07:23 +0900)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 14 Jun 2018 22:23:00 +0000 (07:23 +0900)
Pull btrfs fixes from David Sterba:

 - error handling fixup for one of the new ioctls from 1st pull

 - fix for device-replace that incorrectly uses inode pages and can mess
   up compressed extents in some cases

 - fiemap fix for reporting incorrect number of extents

 - vm_fault_t type conversion

* tag 'for-4.18-part2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux:
  btrfs: scrub: Don't use inode pages for device replace
  btrfs: change return type of btrfs_page_mkwrite to vm_fault_t
  Btrfs: fiemap: pass correct bytenr when fm_extent_count is zero
  btrfs: Check error of btrfs_iget in btrfs_search_path_in_tree_user

1  2 
fs/btrfs/extent_io.c

diff --combined fs/btrfs/extent_io.c
index 51fc015c7d2c69bd198e94c3ffc4b2ef267f7ef2,8e4a7cdbc9f560d217d0427fa8a2836bed3016f5..cce6087d6880fa4c1673dbc8aab0026fc62391f4
@@@ -26,7 -26,7 +26,7 @@@
  
  static struct kmem_cache *extent_state_cache;
  static struct kmem_cache *extent_buffer_cache;
 -static struct bio_set *btrfs_bioset;
 +static struct bio_set btrfs_bioset;
  
  static inline bool extent_state_in_tree(const struct extent_state *state)
  {
@@@ -162,18 -162,20 +162,18 @@@ int __init extent_io_init(void
        if (!extent_buffer_cache)
                goto free_state_cache;
  
 -      btrfs_bioset = bioset_create(BIO_POOL_SIZE,
 -                                   offsetof(struct btrfs_io_bio, bio),
 -                                   BIOSET_NEED_BVECS);
 -      if (!btrfs_bioset)
 +      if (bioset_init(&btrfs_bioset, BIO_POOL_SIZE,
 +                      offsetof(struct btrfs_io_bio, bio),
 +                      BIOSET_NEED_BVECS))
                goto free_buffer_cache;
  
 -      if (bioset_integrity_create(btrfs_bioset, BIO_POOL_SIZE))
 +      if (bioset_integrity_create(&btrfs_bioset, BIO_POOL_SIZE))
                goto free_bioset;
  
        return 0;
  
  free_bioset:
 -      bioset_free(btrfs_bioset);
 -      btrfs_bioset = NULL;
 +      bioset_exit(&btrfs_bioset);
  
  free_buffer_cache:
        kmem_cache_destroy(extent_buffer_cache);
@@@ -196,7 -198,8 +196,7 @@@ void __cold extent_io_exit(void
        rcu_barrier();
        kmem_cache_destroy(extent_state_cache);
        kmem_cache_destroy(extent_buffer_cache);
 -      if (btrfs_bioset)
 -              bioset_free(btrfs_bioset);
 +      bioset_exit(&btrfs_bioset);
  }
  
  void extent_io_tree_init(struct extent_io_tree *tree,
@@@ -2676,7 -2679,7 +2676,7 @@@ struct bio *btrfs_bio_alloc(struct bloc
  {
        struct bio *bio;
  
 -      bio = bio_alloc_bioset(GFP_NOFS, BIO_MAX_PAGES, btrfs_bioset);
 +      bio = bio_alloc_bioset(GFP_NOFS, BIO_MAX_PAGES, &btrfs_bioset);
        bio_set_dev(bio, bdev);
        bio->bi_iter.bi_sector = first_byte >> 9;
        btrfs_io_bio_init(btrfs_io_bio(bio));
@@@ -2689,7 -2692,7 +2689,7 @@@ struct bio *btrfs_bio_clone(struct bio 
        struct bio *new;
  
        /* Bio allocation backed by a bioset does not fail */
 -      new = bio_clone_fast(bio, GFP_NOFS, btrfs_bioset);
 +      new = bio_clone_fast(bio, GFP_NOFS, &btrfs_bioset);
        btrfs_bio = btrfs_io_bio(new);
        btrfs_io_bio_init(btrfs_bio);
        btrfs_bio->iter = bio->bi_iter;
@@@ -2701,7 -2704,7 +2701,7 @@@ struct bio *btrfs_io_bio_alloc(unsigne
        struct bio *bio;
  
        /* Bio allocation backed by a bioset does not fail */
 -      bio = bio_alloc_bioset(GFP_NOFS, nr_iovecs, btrfs_bioset);
 +      bio = bio_alloc_bioset(GFP_NOFS, nr_iovecs, &btrfs_bioset);
        btrfs_io_bio_init(btrfs_io_bio(bio));
        return bio;
  }
@@@ -2712,7 -2715,7 +2712,7 @@@ struct bio *btrfs_bio_clone_partial(str
        struct btrfs_io_bio *btrfs_bio;
  
        /* this will never fail when it's backed by a bioset */
 -      bio = bio_clone_fast(orig, GFP_NOFS, btrfs_bioset);
 +      bio = bio_clone_fast(orig, GFP_NOFS, &btrfs_bioset);
        ASSERT(bio);
  
        btrfs_bio = btrfs_io_bio(bio);
@@@ -4542,7 -4545,7 +4542,7 @@@ int extent_fiemap(struct inode *inode, 
                        offset_in_extent = em_start - em->start;
                em_end = extent_map_end(em);
                em_len = em_end - em_start;
-               disko = 0;
+               disko = em->block_start + offset_in_extent;
                flags = 0;
  
                /*
                        u64 bytenr = em->block_start -
                                (em->start - em->orig_start);
  
-                       disko = em->block_start + offset_in_extent;
                        /*
                         * As btrfs supports shared space, this information
                         * can be exported to userspace tools via