Merge tag 'for-5.1/block-20190302' of git://git.kernel.dk/linux-block
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 8 Mar 2019 22:12:17 +0000 (14:12 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 8 Mar 2019 22:12:17 +0000 (14:12 -0800)
Pull block layer updates from Jens Axboe:
 "Not a huge amount of changes in this round, the biggest one is that we
  finally have Mings multi-page bvec support merged. Apart from that,
  this pull request contains:

   - Small series that avoids quiescing the queue for sysfs changes that
     match what we currently have (Aleksei)

   - Series of bcache fixes (via Coly)

   - Series of lightnvm fixes (via Mathias)

   - NVMe pull request from Christoph. Nothing major, just SPDX/license
     cleanups, RR mp policy (Hannes), and little fixes (Bart,
     Chaitanya).

   - BFQ series (Paolo)

   - Save blk-mq cpu -> hw queue mapping, removing a pointer indirection
     for the fast path (Jianchao)

   - fops->iopoll() added for async IO polling, this is a feature that
     the upcoming io_uring interface will use (Christoph, me)

   - Partition scan loop fixes (Dongli)

   - mtip32xx conversion from managed resource API (Christoph)

   - cdrom registration race fix (Guenter)

   - MD pull from Song, two minor fixes.

   - Various documentation fixes (Marcos)

   - Multi-page bvec feature. This brings a lot of nice improvements
     with it, like more efficient splitting, larger IOs can be supported
     without growing the bvec table size, and so on. (Ming)

   - Various little fixes to core and drivers"

* tag 'for-5.1/block-20190302' of git://git.kernel.dk/linux-block: (117 commits)
  block: fix updating bio's front segment size
  block: Replace function name in string with __func__
  nbd: propagate genlmsg_reply return code
  floppy: remove set but not used variable 'q'
  null_blk: fix checking for REQ_FUA
  block: fix NULL pointer dereference in register_disk
  fs: fix guard_bio_eod to check for real EOD errors
  blk-mq: use HCTX_TYPE_DEFAULT but not 0 to index blk_mq_tag_set->map
  block: optimize bvec iteration in bvec_iter_advance
  block: introduce mp_bvec_for_each_page() for iterating over page
  block: optimize blk_bio_segment_split for single-page bvec
  block: optimize __blk_segment_map_sg() for single-page bvec
  block: introduce bvec_nth_page()
  iomap: wire up the iopoll method
  block: add bio_set_polled() helper
  block: wire up block device iopoll method
  fs: add an iopoll method to struct file_operations
  loop: set GENHD_FL_NO_PART_SCAN after blkdev_reread_part()
  loop: do not print warn message if partition scan is successful
  block: bounce: make sure that bvec table is updated
  ...

20 files changed:
1  2 
block/blk-mq.c
drivers/ata/libata-scsi.c
drivers/block/floppy.c
drivers/block/mtip32xx/mtip32xx.c
drivers/block/rbd.c
drivers/md/dm-crypt.c
drivers/md/raid1.c
drivers/mmc/core/queue.c
drivers/nvme/host/pci.c
drivers/scsi/scsi_lib.c
drivers/staging/erofs/data.c
drivers/staging/erofs/unzip_vle.c
fs/btrfs/compression.c
fs/btrfs/disk-io.c
fs/btrfs/extent_io.c
fs/btrfs/inode.c
fs/gfs2/lops.c
fs/xfs/xfs_aops.c
fs/xfs/xfs_file.c
include/linux/fs.h

diff --cc block/blk-mq.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index ca259c75bbcd1a32f462cfada377362ddfa2c8ca,4ed58c9a94a9916959e304d28f77e9002b64e8df..ab705183d749709f004e28c2f02b56243f1b23ff
@@@ -147,38 -147,7 +147,39 @@@ static int add_extent_changeset(struct 
        return ret;
  }
  
 -static void flush_write_bio(struct extent_page_data *epd);
 +static int __must_check submit_one_bio(struct bio *bio, int mirror_num,
 +                                     unsigned long bio_flags)
 +{
 +      blk_status_t ret = 0;
 +      struct bio_vec *bvec = bio_last_bvec_all(bio);
-       struct page *page = bvec->bv_page;
++      struct bio_vec bv;
 +      struct extent_io_tree *tree = bio->bi_private;
 +      u64 start;
 +
-       start = page_offset(page) + bvec->bv_offset;
++      mp_bvec_last_segment(bvec, &bv);
++      start = page_offset(bv.bv_page) + bv.bv_offset;
 +
 +      bio->bi_private = NULL;
 +
 +      if (tree->ops)
 +              ret = tree->ops->submit_bio_hook(tree->private_data, bio,
 +                                         mirror_num, bio_flags, start);
 +      else
 +              btrfsic_submit_bio(bio);
 +
 +      return blk_status_to_errno(ret);
 +}
 +
 +static void flush_write_bio(struct extent_page_data *epd)
 +{
 +      if (epd->bio) {
 +              int ret;
 +
 +              ret = submit_one_bio(epd->bio, 0, 0);
 +              BUG_ON(ret < 0); /* -ENOMEM */
 +              epd->bio = NULL;
 +      }
 +}
  
  int __init extent_io_init(void)
  {
Simple merge
diff --cc fs/gfs2/lops.c
Simple merge
index 7b8bb6bde981028ad692fa07c87b0e4911bf3436,55f3e194a8522b748196128a8aee06e1e0686be6..3619e9e8d359e839b8ac88b633a52eedff360301
@@@ -657,11 -614,11 +658,11 @@@ xfs_add_to_ioend
            offset != wpc->ioend->io_offset + wpc->ioend->io_size) {
                if (wpc->ioend)
                        list_add(&wpc->ioend->io_list, iolist);
 -              wpc->ioend = xfs_alloc_ioend(inode, wpc->io_type, offset,
 -                              bdev, sector);
 +              wpc->ioend = xfs_alloc_ioend(inode, wpc->fork,
 +                              wpc->imap.br_state, offset, bdev, sector);
        }
  
-       if (!__bio_try_merge_page(wpc->ioend->io_bio, page, len, poff)) {
+       if (!__bio_try_merge_page(wpc->ioend->io_bio, page, len, poff, true)) {
                if (iop)
                        atomic_inc(&iop->write_count);
                if (bio_full(wpc->ioend->io_bio))
Simple merge
index 2cc540805a02e6d99ca50dd0a6607a0240737b28,dedcc2e9265cb44282425a3440d75df67d84256f..7442329a0011d62197e7b761c0fe3945847bc2cd
@@@ -317,9 -310,8 +317,10 @@@ struct kiocb 
        int                     ki_flags;
        u16                     ki_hint;
        u16                     ki_ioprio; /* See linux/ioprio.h */
 -} __randomize_layout;
+       unsigned int            ki_cookie; /* for ->iopoll */
 +
 +      randomized_struct_fields_end
 +};
  
  static inline bool is_sync_kiocb(struct kiocb *kiocb)
  {