Hi Linus, This is the first pull request for 4.14, containing most of the code changes. It's a quiet series this round, which I think we needed after the churn of the last few series. This pull request contains: - Fix for a registration race in loop, from Anton Volkov. - Overflow complaint fix from Arnd for DAC960. - Series of drbd changes from the usual suspects. - Conversion of the stec/skd driver to blk-mq. From Bart. - A few BFQ improvements/fixes from Paolo. - CFQ improvement from Ritesh, allowing idling for group idle. - A few fixes found by Dan's smatch, courtesy of Dan. - A warning fixup for a race between changing the IO scheduler and device remova. From David Jeffery. - A few nbd fixes from Josef. - Support for cgroup info in blktrace, from Shaohua. - Also from Shaohua, new features in the null_blk driver to allow it to actually hold data, among other things. - Various corner cases and error handling fixes from Weiping Zhang. - Improvements to the IO stats tracking for blk-mq from me. Can drastically improve performance for fast devices and/or big machines. - Series from Christoph removing bi_bdev as being needed for IO submission, in preparation for nvme multipathing code. - Series from Bart, including various cleanups and fixes for switch fall through case complaints. Note that you'll hit a conflict in block/bio-integrity.c and mm/page_io.c, since we had fixes later in the 4.13 series for both of those that ended up conflicting with new changes. Both are trivial to fix up, I've included my resolution at the end of this email. Please pull! git://git.kernel.dk/linux-block.git for-4.14/block ---------------------------------------------------------------- Anton Volkov (1): loop: fix to a race condition due to the early registration of device Arnd Bergmann (1): block: DAC960: shut up format-overflow warning Baoyou Xie (1): drbd: mark symbols static where possible Bart Van Assche (78): block: Fix two comments that refer to .queue_rq() return values block: Unexport blk_queue_end_tag() blk-mq: Make blk_mq_reinit_tagset() calls easier to read blk-mq-debugfs: Declare a local symbol static genhd: Annotate all part and part_tbl pointer dereferences ide-floppy: Use blk_rq_is_scsi() virtio_blk: Use blk_rq_is_scsi() xen-blkback: Fix indentation xen-blkback: Avoid that gcc 7 warns about fall-through when building with W=1 xen-blkfront: Avoid that gcc 7 warns about fall-through when building with W=1 block: Relax a check in blk_start_queue() skd: Avoid that module unloading triggers a use-after-free skd: Submit requests to firmware before triggering the doorbell skd: Switch to GPLv2 skd: Update maintainer information skd: Remove unneeded #include directives skd: Remove ESXi code skd: Remove unnecessary blank lines skd: Avoid that gcc 7 warns about fall-through when building with W=1 skd: Fix spelling in a source code comment skd: Fix a function name in a comment skd: Remove set-but-not-used local variables skd: Remove a set-but-not-used variable from struct skd_device skd: Remove useless barrier() calls skd: Switch from the pr_*() to the dev_*() logging functions skd: Fix endianness annotations skd: Document locking assumptions skd: Introduce the symbolic constant SKD_MAX_REQ_PER_MSG skd: Introduce SKD_SKCOMP_SIZE skd: Fix size argument in skd_free_skcomp() skd: Reorder the code in skd_process_request() skd: Simplify the code for deciding whether or not to send a FIT msg skd: Simplify the code for allocating DMA message buffers skd: Use a structure instead of hardcoding structure offsets skd: Check structure sizes at build time skd: Use __packed only when needed skd: Make the skd_isr() code more brief skd: Use ARRAY_SIZE() where appropriate skd: Simplify the code for handling data direction skd: Remove superfluous initializations from skd_isr_completion_posted() skd: Drop second argument of skd_recover_requests() skd: Use for_each_sg() skd: Remove a redundant init_timer() call skd: Remove superfluous occurrences of the 'volatile' keyword skd: Use kcalloc() instead of kzalloc() with multiply skb: Use symbolic names for SCSI opcodes skd: Move a function definition skd: Rework request failing code path skd: Convert explicit skd_request_fn() calls skd: Remove SG IO support skd: Remove dead code skd: Initialize skd_special_context.req.n_sg to one skd: Enable request tags for the block layer queue skd: Convert several per-device scalar variables into atomics skd: Introduce skd_process_request() skd: Split skd_recover_requests() skd: Move skd_free_sg_list() up skd: Coalesce struct request and struct skd_request_context skd: Convert to blk-mq skd: Switch to block layer timeout mechanism skd: Remove skd_device.in_flight skd: Reduce memory usage skd: Remove several local variables skd: Optimize locking skd: Bump driver version skd: Remove driver version information block: Warn if blk_queue_rq_timed_out() is called for a blk-mq queue skd: Report completion mismatches once skd: Inline skd_process_request() skd: Avoid double completions in case of a timeout skd: Change default interrupt mode to MSI-X compat_hdio_ioctl: Fix a declaration skd: Rename skd_softirq_done() into skd_complete_rq() skd: Inline skd_end_request() skd: Make it easier for static analyzers to analyze skd_free_disk() skd: Remove SKD_ID_INCR skd: Remove blk_queue_bounce_limit() call skd: Let the block layer core choose .nr_requests Ben Hutchings (2): bfq: Re-enable auto-loading when built as a module mq-deadline: Enable auto-loading when built as module Bhumika Goyal (1): nbd: make device_attribute const Christoph Hellwig (9): bio-integrity: move the bio integrity profile check earlier in bio_integrity_prep dm-crypt: don't mess with BIP_BLOCK_INTEGRITY btrfs: index check-integrity state hash by a dev_t raid5: remove a call to get_start_sect block: reject attempts to allocate more than DISK_MAX_PARTS partitions block: add a __disk_get_part helper block: cache the partition index in struct block_device block: replace bi_bdev with a gendisk pointer and partitions index bsg: remove #if 0'ed code Damien Le Moal (1): block: Make blk_dequeue_request() static Dan Carpenter (3): skd: Uninitialized variable in skd_isr_completion_posted() skd: error pointer dereference in skd_cons_disk() kernfs: checking for IS_ERR() instead of NULL David Jeffery (1): block: fix warning when I/O elevator is changed as request_queue is being removed Geliang Tang (1): drbd: Use setup_timer() instead of init_timer() to simplify the code. Greg Kroah-Hartman (1): drbd: rename "usermode_helper" to "drbd_usermode_helper" Jan Kara (1): block: Add comment to submit_bio_wait() Jens Axboe (10): blk-mq: blk_mq_requeue_work() doesn't need to save IRQ flags blk-mq: add warning to __blk_mq_run_hw_queue() for ints disabled blk-mq-tag: check for NULL rq when iterating tags block: pass in queue to inflight accounting block: make part_in_flight() take an array of two ints blk-mq: provide internal in-flight variant blk-mq: enable checking two part inflight counts at the same time block: remove unused syncfull/asyncfull queue flags null_blk: update email adress null_blk: use available 'dev' in nullb_device_power_store() Josef Bacik (2): nbd: allow device creation at a specific index nbd: change the default nbd partitions Lars Ellenberg (9): drbd: introduce drbd_recv_header_maybe_unplug drbd: change list_for_each_safe to while(list_first_entry_or_null) drbd: add explicit plugging when submitting batches drbd: Send P_NEG_ACK upon write error in protocol != C drbd: new disk-option disable-write-same drbd: fix potential get_ldev/put_ldev refcount imbalance during attach drbd: fix rmmod cleanup, remove _all_ debugfs entries drbd: fix potential deadlock when trying to detach during handshake drbd: fix race between handshake and admin disconnect/down Markus Elfring (1): drbd: A single dot should be put into a sequence. Milan Broz (1): bio-integrity: Fix regression if profile verify_fn is NULL NeilBrown (1): drbd: remove BIOSET_NEED_RESCUER flag from drbd_{md_,}io_bio_set Omar Sandoval (1): block: update comments to reflect REQ_FLUSH -> REQ_PREFLUSH rename Paolo Valente (2): block,bfq: refactor device-idling logic block, bfq: boost throughput with flash-based non-queueing devices Philipp Reisner (2): drbd: Fix resource role for newly created resources in events2 drbd: Fix allyesconfig build, fix recent commit Ritesh Harjani (1): cfq: Give a chance for arming slice idle timer in case of group_idle Roland Kammerer (3): drbd: move global variables to drbd namespace and make some static drbd: abort drbd_start_resync if there is no connection drbd: switch from kmalloc() to kmalloc_array() Shaohua Li (22): kernfs: use idr instead of ida to manage inode number kernfs: implement i_generation kernfs: add an API to get kernfs node from inode number kernfs: don't set dentry->d_fsdata kernfs: introduce kernfs_node_id kernfs: add exportfs operations cgroup: export fhandle info for a cgroup blktrace: export cgroup info in trace block: always attach cgroup info into bio blktrace: add an option to allow displaying cgroup path block: use standard blktrace API to output cgroup info for debug notes nullb: factor disk parameters nullb: add configfs interface nullb: add interface to power on disk nullb: use ida to manage index nullb: support memory backed store nullb: support discard nullb: bandwidth control nullb: emulate cache nullb: badbblocks support block/nullb: fix NULL dereference block/nullb: delete unnecessary memory free weiping zhang (6): null_blk: simplify logic for use_per_node_hctx null_blk: make sure submit_queues > 0 block, bfq: fix error handle in bfq_init block: remove blk_free_devt in add_partition blkcg: avoid free blkcg_root when failed to alloc blkcg policy block, scheduler: convert xxx_var_store to void MAINTAINERS | 6 + arch/powerpc/sysdev/axonram.c | 2 +- block/bfq-iosched.c | 182 +- block/bfq-iosched.h | 25 +- block/bio-integrity.c | 29 +- block/bio.c | 30 +- block/blk-cgroup.c | 8 +- block/blk-core.c | 153 +- block/blk-flush.c | 26 +- block/blk-lib.c | 8 +- block/blk-merge.c | 6 +- block/blk-mq-debugfs.c | 4 +- block/blk-mq-tag.c | 23 +- block/blk-mq.c | 54 +- block/blk-mq.h | 3 + block/blk-settings.c | 1 + block/blk-sysfs.c | 2 + block/blk-tag.c | 1 - block/blk-throttle.c | 13 +- block/blk-zoned.c | 4 +- block/blk.h | 3 +- block/bsg.c | 7 - block/cfq-iosched.c | 31 +- block/compat_ioctl.c | 2 +- block/deadline-iosched.c | 9 +- block/elevator.c | 4 + block/genhd.c | 91 +- block/mq-deadline.c | 10 +- block/partition-generic.c | 23 +- drivers/block/DAC960.c | 12 +- drivers/block/Kconfig | 1 + drivers/block/brd.c | 5 +- drivers/block/drbd/drbd_actlog.c | 2 +- drivers/block/drbd/drbd_bitmap.c | 2 +- drivers/block/drbd/drbd_int.h | 31 +- drivers/block/drbd/drbd_main.c | 113 +- drivers/block/drbd/drbd_nl.c | 60 +- drivers/block/drbd/drbd_proc.c | 10 +- drivers/block/drbd/drbd_receiver.c | 60 +- drivers/block/drbd/drbd_req.c | 86 +- drivers/block/drbd/drbd_req.h | 6 + drivers/block/drbd/drbd_state.c | 48 +- drivers/block/drbd/drbd_state.h | 8 + drivers/block/drbd/drbd_worker.c | 48 +- drivers/block/floppy.c | 2 +- drivers/block/loop.c | 14 +- drivers/block/nbd.c | 15 +- drivers/block/null_blk.c | 1309 ++++++++++++-- drivers/block/pktcdvd.c | 11 +- drivers/block/rsxx/dev.c | 6 +- drivers/block/skd_main.c | 3210 +++++++++-------------------------- drivers/block/skd_s1120.h | 38 +- drivers/block/virtio_blk.c | 2 +- drivers/block/xen-blkback/blkback.c | 9 +- drivers/block/xen-blkback/xenbus.c | 3 +- drivers/block/xen-blkfront.c | 2 +- drivers/block/zram/zram_drv.c | 5 +- drivers/ide/ide-floppy.c | 2 +- drivers/md/bcache/debug.c | 2 +- drivers/md/bcache/io.c | 2 +- drivers/md/bcache/journal.c | 6 +- drivers/md/bcache/request.c | 21 +- drivers/md/bcache/super.c | 6 +- drivers/md/bcache/writeback.c | 5 +- drivers/md/dm-bio-record.h | 9 +- drivers/md/dm-bufio.c | 2 +- drivers/md/dm-cache-target.c | 4 +- drivers/md/dm-crypt.c | 7 +- drivers/md/dm-delay.c | 4 +- drivers/md/dm-era-target.c | 2 +- drivers/md/dm-flakey.c | 2 +- drivers/md/dm-integrity.c | 11 +- drivers/md/dm-io.c | 2 +- drivers/md/dm-linear.c | 2 +- drivers/md/dm-log-writes.c | 8 +- drivers/md/dm-mpath.c | 2 +- drivers/md/dm-raid1.c | 12 +- drivers/md/dm-snap.c | 16 +- drivers/md/dm-stripe.c | 10 +- drivers/md/dm-switch.c | 2 +- drivers/md/dm-thin.c | 6 +- drivers/md/dm-verity-target.c | 2 +- drivers/md/dm-zoned-metadata.c | 6 +- drivers/md/dm-zoned-target.c | 4 +- drivers/md/dm.c | 16 +- drivers/md/faulty.c | 4 +- drivers/md/linear.c | 6 +- drivers/md/md.c | 10 +- drivers/md/md.h | 9 +- drivers/md/multipath.c | 8 +- drivers/md/raid0.c | 7 +- drivers/md/raid1.c | 34 +- drivers/md/raid10.c | 50 +- drivers/md/raid5-cache.c | 6 +- drivers/md/raid5-ppl.c | 6 +- drivers/md/raid5.c | 16 +- drivers/nvdimm/nd.h | 9 +- drivers/nvme/host/core.c | 11 +- drivers/nvme/host/fc.c | 4 +- drivers/nvme/host/lightnvm.c | 15 +- drivers/nvme/host/rdma.c | 11 +- drivers/nvme/target/io-cmd.c | 6 +- drivers/s390/block/dcssblk.c | 4 +- drivers/s390/block/xpram.c | 2 +- drivers/target/target_core_iblock.c | 4 +- fs/block_dev.c | 5 +- fs/btrfs/check-integrity.c | 41 +- fs/btrfs/disk-io.c | 2 +- fs/btrfs/extent_io.c | 6 +- fs/btrfs/raid56.c | 8 +- fs/btrfs/scrub.c | 12 +- fs/btrfs/volumes.c | 2 +- fs/buffer.c | 4 +- fs/crypto/bio.c | 2 +- fs/direct-io.c | 8 +- fs/exofs/ore.c | 2 +- fs/ext4/page-io.c | 4 +- fs/ext4/readpage.c | 2 +- fs/f2fs/data.c | 5 +- fs/f2fs/segment.c | 2 +- fs/gfs2/lops.c | 2 +- fs/gfs2/meta_io.c | 2 +- fs/gfs2/ops_fstype.c | 2 +- fs/hfsplus/wrapper.c | 2 +- fs/iomap.c | 4 +- fs/jfs/jfs_logmgr.c | 4 +- fs/jfs/jfs_metapage.c | 4 +- fs/kernfs/dir.c | 111 +- fs/kernfs/file.c | 10 +- fs/kernfs/inode.c | 9 +- fs/kernfs/kernfs-internal.h | 9 + fs/kernfs/mount.c | 94 +- fs/kernfs/symlink.c | 6 +- fs/mpage.c | 2 +- fs/nfs/blocklayout/blocklayout.c | 2 +- fs/nilfs2/segbuf.c | 2 +- fs/ocfs2/cluster/heartbeat.c | 2 +- fs/xfs/xfs_aops.c | 2 +- fs/xfs/xfs_buf.c | 2 +- include/linux/bio.h | 27 +- include/linux/blk-cgroup.h | 3 + include/linux/blk-mq.h | 5 +- include/linux/blk_types.h | 3 +- include/linux/blkdev.h | 60 +- include/linux/blktrace_api.h | 13 +- include/linux/cgroup.h | 16 +- include/linux/drbd.h | 2 +- include/linux/drbd_genl.h | 3 +- include/linux/drbd_limits.h | 8 +- include/linux/fs.h | 1 + include/linux/genhd.h | 26 +- include/linux/kernfs.h | 28 +- include/trace/events/bcache.h | 6 +- include/trace/events/block.h | 16 +- include/trace/events/f2fs.h | 2 +- include/trace/events/writeback.h | 2 +- include/uapi/linux/blktrace_api.h | 3 + kernel/cgroup/cgroup.c | 15 +- kernel/power/swap.c | 5 +- kernel/trace/blktrace.c | 261 ++- mm/page_io.c | 17 +- 161 files changed, 3686 insertions(+), 3485 deletions(-) diff --cc block/bio-integrity.c index 9b1ea478577b,553d75e357b4..5df32907ff3b --- a/block/bio-integrity.c +++ b/block/bio-integrity.c @@@ -387,11 -385,12 +385,11 @@@ static void bio_integrity_verify_fn(str */ bool __bio_integrity_endio(struct bio *bio) { - struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev); + struct blk_integrity *bi = blk_get_integrity(bio->bi_disk); + struct bio_integrity_payload *bip = bio_integrity(bio); if (bio_op(bio) == REQ_OP_READ && !bio->bi_status && - bi->profile->verify_fn) { - struct bio_integrity_payload *bip = bio_integrity(bio); - + (bip->bip_flags & BIP_BLOCK_INTEGRITY) && bi->profile->verify_fn) { INIT_WORK(&bip->bip_work, bio_integrity_verify_fn); queue_work(kintegrityd_wq, &bip->bip_work); return false; diff --cc mm/page_io.c index 5f61b54ee1f3,9cf1bc751d79..868e7a96bf8a --- a/mm/page_io.c +++ b/mm/page_io.c @@@ -379,12 -378,7 +380,12 @@@ int swap_readpage(struct page *page, bo ret = -ENOMEM; goto out; } - bdev = bio->bi_bdev; + /* + * Keep this task valid during swap readpage because the oom killer may + * attempt to access it in the page fault retry time check. + */ + get_task_struct(current); + disk = bio->bi_disk; bio->bi_private = current; bio_set_op_attrs(bio, REQ_OP_READ, 0); count_vm_event(PSWPIN); -- Jens Axboe -- Jens Axboe