Linux block layer
 help / color / mirror / Atom feed
* [GIT PULL] First set of block changes for 4.14-rc1
@ 2017-09-05 14:31 Jens Axboe
  2017-09-07 19:04 ` Linus Torvalds
  0 siblings, 1 reply; 7+ messages in thread
From: Jens Axboe @ 2017-09-05 14:31 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-block@vger.kernel.org

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [GIT PULL] First set of block changes for 4.14-rc1
  2017-09-05 14:31 [GIT PULL] First set of block changes for 4.14-rc1 Jens Axboe
@ 2017-09-07 19:04 ` Linus Torvalds
  2017-09-07 19:27   ` Jens Axboe
  0 siblings, 1 reply; 7+ messages in thread
From: Linus Torvalds @ 2017-09-07 19:04 UTC (permalink / raw)
  To: Jens Axboe, Christoph Hellwig; +Cc: linux-block@vger.kernel.org

On Tue, Sep 5, 2017 at 7:31 AM, Jens Axboe <axboe@kernel.dk> wrote:
>
> 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.

Actually, the _real_ conflict is with commit 8e654f8fbff5 ("zram: read
page from backing device") and the preceding code, which added a
"zram->bdev" that is the backing dev for the zram device.

And then it does

     bio->bi_bdev = zram->bdev;

but now the block layer has AGAIN changed some stupid internal detail
for no obvious reason, so now it doesn't work.

My initial thought was to just do

    bio->bi_disk = zram->disk;

instead, which *syntactically* seems to make sense, and match things
up in the obvious way.

But when I actually thought about it more, I decided that's bullshit.
"zram->disk" is not the backing device at all, it's the zram interface
itself.

The correct resolution seems to be

    bio_set_dev(bio, zram->bdev);

but *dammit*, Jens, this insane crazy constant "let's randomly change
block layer details around" needs to STOP.

This has been going on for too many releases by now. What the f*ck is
*wrong* with you and Christoph that you can't just leave this thing
alone?

Stop the pointless churn already.

When I saw your comment:

  It's a quiet series this round, which I think we needed after
  the churn of the last few series.

I was like "finally". And then this shows that you were just lying,
and the pointless churn is still happening.

Stop it. Really.

Here's a hint: if some stupid change requires you to mindlessly do 150
changes using a wrapper helper, it's churn.

We need *stability* by now, after these crazy changes. Make sure that happens.

                  Linus

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [GIT PULL] First set of block changes for 4.14-rc1
  2017-09-07 19:04 ` Linus Torvalds
@ 2017-09-07 19:27   ` Jens Axboe
  2017-09-07 19:38     ` Linus Torvalds
  0 siblings, 1 reply; 7+ messages in thread
From: Jens Axboe @ 2017-09-07 19:27 UTC (permalink / raw)
  To: Linus Torvalds, Christoph Hellwig; +Cc: linux-block@vger.kernel.org

On 09/07/2017 01:04 PM, Linus Torvalds wrote:
> On Tue, Sep 5, 2017 at 7:31 AM, Jens Axboe <axboe@kernel.dk> wrote:
>>
>> 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.
> 
> Actually, the _real_ conflict is with commit 8e654f8fbff5 ("zram: read
> page from backing device") and the preceding code, which added a
> "zram->bdev" that is the backing dev for the zram device.

Which was committed yesterday? It was not from my tree. I try to keep
an eye out for potential conflicts or issues.

> And then it does
> 
>      bio->bi_bdev = zram->bdev;
> 
> but now the block layer has AGAIN changed some stupid internal detail
> for no obvious reason, so now it doesn't work.
> 
> My initial thought was to just do
> 
>     bio->bi_disk = zram->disk;
> 
> instead, which *syntactically* seems to make sense, and match things
> up in the obvious way.
> 
> But when I actually thought about it more, I decided that's bullshit.
> "zram->disk" is not the backing device at all, it's the zram interface
> itself.
> 
> The correct resolution seems to be
> 
>     bio_set_dev(bio, zram->bdev);
> 
> but *dammit*, Jens, this insane crazy constant "let's randomly change
> block layer details around" needs to STOP.
> 
> This has been going on for too many releases by now. What the f*ck is
> *wrong* with you and Christoph that you can't just leave this thing
> alone?
> 
> Stop the pointless churn already.
> 
> When I saw your comment:
> 
>   It's a quiet series this round, which I think we needed after
>   the churn of the last few series.
> 
> I was like "finally". And then this shows that you were just lying,
> and the pointless churn is still happening.
> 
> Stop it. Really.
> 
> Here's a hint: if some stupid change requires you to mindlessly do 150
> changes using a wrapper helper, it's churn.
> 
> We need *stability* by now, after these crazy changes. Make sure that happens.

I am pushing back, but I can't embargo any sort of API change. This one has
good reasoning behind it, which is actually nicely explained in the commit
itself. It's not pointless churn, which I would define as change just for
the sake of change itself. Or pointless cleanups.

That said, there are no plans to mix anything up for the next release.
We've had more frivolous changes in past releases, I don't expect that
to happen again. 

-- 
Jens Axboe

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [GIT PULL] First set of block changes for 4.14-rc1
  2017-09-07 19:27   ` Jens Axboe
@ 2017-09-07 19:38     ` Linus Torvalds
  2017-09-07 19:47       ` Jens Axboe
  0 siblings, 1 reply; 7+ messages in thread
From: Linus Torvalds @ 2017-09-07 19:38 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Christoph Hellwig, linux-block@vger.kernel.org

On Thu, Sep 7, 2017 at 12:27 PM, Jens Axboe <axboe@kernel.dk> wrote:
>
> Which was committed yesterday? It was not from my tree. I try to keep
> an eye out for potential conflicts or issues.

It was from Andrew, so I'm assuming it was in linux-next. Not as a git
tree, but as the usual akpm branch.

I'm not sure why I didn't see any reports from linux-next about it,
though - and I looked.

There was no actual visible merge problem, because the conflict was
not a data conflict but a semantic one.

But the issue showed up for a trivial allmodconfig build, so it
*should* have been caught automatically.

But it's not even the conflict that annoys me.

It's the *reason* for the conflict - the block layer churn that you
said was done. We've had too much of it.

>> We need *stability* by now, after these crazy changes. Make sure that happens.
>
> I am pushing back, but I can't embargo any sort of API change. This one has
> good reasoning behind it, which is actually nicely explained in the commit
> itself. It's not pointless churn, which I would define as change just for
> the sake of change itself. Or pointless cleanups.

You can definitely put your foot down on any more random changes to
the bio infrastructure. Including for good reasons.

We have had some serious issues in the block layer - and I'm not
talking about the merge conflicts. I'm talking about just the
collateral damage, with things like SCSI having to revert using blk-mq
by default etc.

Christ, things like that are pretty *fundamnetal*, wouldn't you say.
Get those right before doing more churn. And aim to have one or two
releases literally just fixing things, with a "no churn" rule.

Because the block layer really has been a black spot lately.

          Linus

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [GIT PULL] First set of block changes for 4.14-rc1
  2017-09-07 19:38     ` Linus Torvalds
@ 2017-09-07 19:47       ` Jens Axboe
  2017-09-08  2:25         ` Ming Lei
  0 siblings, 1 reply; 7+ messages in thread
From: Jens Axboe @ 2017-09-07 19:47 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Christoph Hellwig, linux-block@vger.kernel.org

On 09/07/2017 01:38 PM, Linus Torvalds wrote:
> On Thu, Sep 7, 2017 at 12:27 PM, Jens Axboe <axboe@kernel.dk> wrote:
>>
>> Which was committed yesterday? It was not from my tree. I try to keep
>> an eye out for potential conflicts or issues.
> 
> It was from Andrew, so I'm assuming it was in linux-next. Not as a git
> tree, but as the usual akpm branch.
> 
> I'm not sure why I didn't see any reports from linux-next about it,
> though - and I looked.
> 
> There was no actual visible merge problem, because the conflict was
> not a data conflict but a semantic one.
> 
> But the issue showed up for a trivial allmodconfig build, so it
> *should* have been caught automatically.
> 
> But it's not even the conflict that annoys me.
> 
> It's the *reason* for the conflict - the block layer churn that you
> said was done. We've had too much of it.
> 
>>> We need *stability* by now, after these crazy changes. Make sure
>>> that happens.

I might have missed a build notice from linux-next, since I know for a
fact that all my stuff is in -next, updated daily, and Andrew's tree
definitely is too.

>> I am pushing back, but I can't embargo any sort of API change. This one has
>> good reasoning behind it, which is actually nicely explained in the commit
>> itself. It's not pointless churn, which I would define as change just for
>> the sake of change itself. Or pointless cleanups.
> 
> You can definitely put your foot down on any more random changes to
> the bio infrastructure. Including for good reasons.

And I am, but this one wasn't random. As I said, some of the previous
releases have had more frivolous changes that should have been pushed
back harder on. And particularly nvme, where fixes that go in after the
merge window have been doing pointless cleanups while fixing issues,
causing unnecessary pain for the next release. I am definitely pushing
back hard on those, just last week after more of that showed up.

You'll see exactly one of those when I send in the next merge request,
which sucks, and which was the reason the yelling in that area recently.

> We have had some serious issues in the block layer - and I'm not
> talking about the merge conflicts. I'm talking about just the
> collateral damage, with things like SCSI having to revert using blk-mq
> by default etc.

I'm a bit puzzled as to why the suspend/resume thing has existed for so
long, honestly. But some of these issues don't show themselves until you
flip the switch. A lot of the production setups have been using scsi-mq
for YEARS without issues, but obviously they don't hit this. Given how
big of a switch this is, it's hard to avoid minor fallout. We're dealing
with it.

> Christ, things like that are pretty *fundamnetal*, wouldn't you say.
> Get those right before doing more churn. And aim to have one or two
> releases literally just fixing things, with a "no churn" rule.

That's the plan...

-- 
Jens Axboe

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [GIT PULL] First set of block changes for 4.14-rc1
  2017-09-07 19:47       ` Jens Axboe
@ 2017-09-08  2:25         ` Ming Lei
  2017-09-08 17:36           ` Jens Axboe
  0 siblings, 1 reply; 7+ messages in thread
From: Ming Lei @ 2017-09-08  2:25 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Linus Torvalds, Christoph Hellwig, linux-block@vger.kernel.org,
	Cathy Avery, Oleksandr Natalenko

On Thu, Sep 07, 2017 at 01:47:44PM -0600, Jens Axboe wrote:
> On 09/07/2017 01:38 PM, Linus Torvalds wrote:
> > On Thu, Sep 7, 2017 at 12:27 PM, Jens Axboe <axboe@kernel.dk> wrote:
> >>
> >> Which was committed yesterday? It was not from my tree. I try to keep
> >> an eye out for potential conflicts or issues.
> > 
> > It was from Andrew, so I'm assuming it was in linux-next. Not as a git
> > tree, but as the usual akpm branch.
> > 
> > I'm not sure why I didn't see any reports from linux-next about it,
> > though - and I looked.
> > 
> > There was no actual visible merge problem, because the conflict was
> > not a data conflict but a semantic one.
> > 
> > But the issue showed up for a trivial allmodconfig build, so it
> > *should* have been caught automatically.
> > 
> > But it's not even the conflict that annoys me.
> > 
> > It's the *reason* for the conflict - the block layer churn that you
> > said was done. We've had too much of it.
> > 
> >>> We need *stability* by now, after these crazy changes. Make sure
> >>> that happens.
> 
> I might have missed a build notice from linux-next, since I know for a
> fact that all my stuff is in -next, updated daily, and Andrew's tree
> definitely is too.
> 
> >> I am pushing back, but I can't embargo any sort of API change. This one has
> >> good reasoning behind it, which is actually nicely explained in the commit
> >> itself. It's not pointless churn, which I would define as change just for
> >> the sake of change itself. Or pointless cleanups.
> > 
> > You can definitely put your foot down on any more random changes to
> > the bio infrastructure. Including for good reasons.
> 
> And I am, but this one wasn't random. As I said, some of the previous
> releases have had more frivolous changes that should have been pushed
> back harder on. And particularly nvme, where fixes that go in after the
> merge window have been doing pointless cleanups while fixing issues,
> causing unnecessary pain for the next release. I am definitely pushing
> back hard on those, just last week after more of that showed up.
> 
> You'll see exactly one of those when I send in the next merge request,
> which sucks, and which was the reason the yelling in that area recently.
> 
> > We have had some serious issues in the block layer - and I'm not
> > talking about the merge conflicts. I'm talking about just the
> > collateral damage, with things like SCSI having to revert using blk-mq
> > by default etc.
> 
> I'm a bit puzzled as to why the suspend/resume thing has existed for so
> long, honestly. But some of these issues don't show themselves until you
> flip the switch. A lot of the production setups have been using scsi-mq
> for YEARS without issues, but obviously they don't hit this. Given how
> big of a switch this is, it's hard to avoid minor fallout. We're dealing
> with it.

Hi Jens,

If you mean the I/O hang during suspend/resume reported by Oleksandr,
that shouldn't be blk-mq only. The root cause is in SCSI's quiesce
design(even in blk-mq's quiesce, but no such issue because no new
request is allocated in the context which queue is quiesced.)

The issue is a bit long-term, since Cathy can reproduce this kind of
I/O hang on 2.6.32 based kernel.

I am working on fixing that[1], but looks the preempt quiesce still
need to be nested, so will post out V4 with supporting nested preempt
quiesce.

The real SCSI_MQ regression is the report of 'SCSI-MQ performance
regression'[2], and the commit of 'scsi: default to scsi-mq' was
reverted after this report. Patch for this regression has been
posted for several round, and the V4 [3] should be ready for merge, looks
it is ignored because of the merge timing?


[1] https://marc.info/?l=linux-scsi&m=150435774503165&w=2
[2] https://marc.info/?l=linux-kernel&m=150271934904399&w=2
[3] https://marc.info/?t=150436555700002&r=1&w=2

-- 
Ming

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [GIT PULL] First set of block changes for 4.14-rc1
  2017-09-08  2:25         ` Ming Lei
@ 2017-09-08 17:36           ` Jens Axboe
  0 siblings, 0 replies; 7+ messages in thread
From: Jens Axboe @ 2017-09-08 17:36 UTC (permalink / raw)
  To: Ming Lei
  Cc: Linus Torvalds, Christoph Hellwig, linux-block@vger.kernel.org,
	Cathy Avery, Oleksandr Natalenko

On 09/07/2017 08:25 PM, Ming Lei wrote:
> On Thu, Sep 07, 2017 at 01:47:44PM -0600, Jens Axboe wrote:
>> On 09/07/2017 01:38 PM, Linus Torvalds wrote:
>>> On Thu, Sep 7, 2017 at 12:27 PM, Jens Axboe <axboe@kernel.dk> wrote:
>>>>
>>>> Which was committed yesterday? It was not from my tree. I try to keep
>>>> an eye out for potential conflicts or issues.
>>>
>>> It was from Andrew, so I'm assuming it was in linux-next. Not as a git
>>> tree, but as the usual akpm branch.
>>>
>>> I'm not sure why I didn't see any reports from linux-next about it,
>>> though - and I looked.
>>>
>>> There was no actual visible merge problem, because the conflict was
>>> not a data conflict but a semantic one.
>>>
>>> But the issue showed up for a trivial allmodconfig build, so it
>>> *should* have been caught automatically.
>>>
>>> But it's not even the conflict that annoys me.
>>>
>>> It's the *reason* for the conflict - the block layer churn that you
>>> said was done. We've had too much of it.
>>>
>>>>> We need *stability* by now, after these crazy changes. Make sure
>>>>> that happens.
>>
>> I might have missed a build notice from linux-next, since I know for a
>> fact that all my stuff is in -next, updated daily, and Andrew's tree
>> definitely is too.
>>
>>>> I am pushing back, but I can't embargo any sort of API change. This one has
>>>> good reasoning behind it, which is actually nicely explained in the commit
>>>> itself. It's not pointless churn, which I would define as change just for
>>>> the sake of change itself. Or pointless cleanups.
>>>
>>> You can definitely put your foot down on any more random changes to
>>> the bio infrastructure. Including for good reasons.
>>
>> And I am, but this one wasn't random. As I said, some of the previous
>> releases have had more frivolous changes that should have been pushed
>> back harder on. And particularly nvme, where fixes that go in after the
>> merge window have been doing pointless cleanups while fixing issues,
>> causing unnecessary pain for the next release. I am definitely pushing
>> back hard on those, just last week after more of that showed up.
>>
>> You'll see exactly one of those when I send in the next merge request,
>> which sucks, and which was the reason the yelling in that area recently.
>>
>>> We have had some serious issues in the block layer - and I'm not
>>> talking about the merge conflicts. I'm talking about just the
>>> collateral damage, with things like SCSI having to revert using blk-mq
>>> by default etc.
>>
>> I'm a bit puzzled as to why the suspend/resume thing has existed for so
>> long, honestly. But some of these issues don't show themselves until you
>> flip the switch. A lot of the production setups have been using scsi-mq
>> for YEARS without issues, but obviously they don't hit this. Given how
>> big of a switch this is, it's hard to avoid minor fallout. We're dealing
>> with it.
> 
> Hi Jens,
> 
> If you mean the I/O hang during suspend/resume reported by Oleksandr,
> that shouldn't be blk-mq only. The root cause is in SCSI's quiesce
> design(even in blk-mq's quiesce, but no such issue because no new
> request is allocated in the context which queue is quiesced.)
> 
> The issue is a bit long-term, since Cathy can reproduce this kind of
> I/O hang on 2.6.32 based kernel.
> 
> I am working on fixing that[1], but looks the preempt quiesce still
> need to be nested, so will post out V4 with supporting nested preempt> quiesce.

OK good to know, that makes me feel a little better.

> The real SCSI_MQ regression is the report of 'SCSI-MQ performance
> regression'[2], and the commit of 'scsi: default to scsi-mq' was
> reverted after this report. Patch for this regression has been
> posted for several round, and the V4 [3] should be ready for merge, looks
> it is ignored because of the merge timing?

It's not ignored, but it's also quite tricky and needs a lot of testing.
With iterations getting this close to the merge window, I didn't feel
comfortable pulling it in this later in the cycle.

I did run it through my usual testing and haven't seen any issues. My
main concern was around the hw queue serialization, this is something
that is notoriously tricky to get right for all cases without introducing
live locks or stalls.

-- 
Jens Axboe

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-09-08 17:36 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-05 14:31 [GIT PULL] First set of block changes for 4.14-rc1 Jens Axboe
2017-09-07 19:04 ` Linus Torvalds
2017-09-07 19:27   ` Jens Axboe
2017-09-07 19:38     ` Linus Torvalds
2017-09-07 19:47       ` Jens Axboe
2017-09-08  2:25         ` Ming Lei
2017-09-08 17:36           ` Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox