Merge tag 'for-4.16/dm-changes' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 31 Jan 2018 19:05:47 +0000 (11:05 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 31 Jan 2018 19:05:47 +0000 (11:05 -0800)
Pull device mapper updates from Mike Snitzer:

 - DM core fixes to ensure that bio submission follows a depth-first
   tree walk; this is critical to allow forward progress without the
   need to use the bioset's BIOSET_NEED_RESCUER.

 - Remove DM core's BIOSET_NEED_RESCUER based dm_offload infrastructure.

 - DM core cleanups and improvements to make bio-based DM more efficient
   (e.g. reduced memory footprint as well leveraging per-bio-data more).

 - Introduce new bio-based mode (DM_TYPE_NVME_BIO_BASED) that leverages
   the more direct IO submission path in the block layer; this mode is
   used by DM multipath and also optimizes targets like DM thin-pool
   that stack directly on NVMe data device.

 - DM multipath improvements to factor out legacy SCSI-only (e.g.
   scsi_dh) code paths to allow for more optimized support for NVMe
   multipath.

 - A fix for DM multipath path selectors (service-time and queue-length)
   to select paths in a more balanced way; largely academic but doesn't
   hurt.

 - Numerous DM raid target fixes and improvements.

 - Add a new DM "unstriped" target that enables Intel to workaround
   firmware limitations in some NVMe drives that are striped internally
   (this target also works when stacked above the DM "striped" target).

 - Various Documentation fixes and improvements.

 - Misc cleanups and fixes across various DM infrastructure and targets
   (e.g. bufio, flakey, log-writes, snapshot).

* tag 'for-4.16/dm-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: (69 commits)
  dm cache: Documentation: update default migration_throttling value
  dm mpath selector: more evenly distribute ties
  dm unstripe: fix target length versus number of stripes size check
  dm thin: fix trailing semicolon in __remap_and_issue_shared_cell
  dm table: fix NVMe bio-based dm_table_determine_type() validation
  dm: various cleanups to md->queue initialization code
  dm mpath: delay the retry of a request if the target responded as busy
  dm mpath: return DM_MAPIO_DELAY_REQUEUE if QUEUE_IO or PG_INIT_REQUIRED
  dm mpath: return DM_MAPIO_REQUEUE on blk-mq rq allocation failure
  dm log writes: fix max length used for kstrndup
  dm: backfill missing calls to mutex_destroy()
  dm snapshot: use mutex instead of rw_semaphore
  dm flakey: check for null arg_name in parse_features()
  dm thin: extend thinpool status format string with omitted fields
  dm thin: fixes in thin-provisioning.txt
  dm thin: document representation of <highest mapped sector> when there is none
  dm thin: fix documentation relative to low water mark threshold
  dm cache: be consistent in specifying sectors and SI units in cache.txt
  dm cache: delete obsoleted paragraph in cache.txt
  dm cache: fix grammar in cache-policies.txt
  ...

1  2 
drivers/md/dm-crypt.c
drivers/md/dm-mpath.c
drivers/md/dm-raid.c
drivers/md/dm-rq.c
drivers/md/dm.c

Simple merge
@@@ -1493,10 -1582,13 +1567,13 @@@ static int multipath_end_io(struct dm_t
         * request into dm core, which will remake a clone request and
         * clone bios for it and resubmit it later.
         */
 -      if (error && !noretry_error(error)) {
 +      if (error && blk_path_error(error)) {
                struct multipath *m = ti->private;
  
-               r = DM_ENDIO_REQUEUE;
+               if (error == BLK_STS_RESOURCE)
+                       r = DM_ENDIO_DELAY_REQUEUE;
+               else
+                       r = DM_ENDIO_REQUEUE;
  
                if (pgpath)
                        fail_path(pgpath);
Simple merge
@@@ -821,10 -813,16 +824,9 @@@ int dm_mq_init_request_queue(struct map
                err = PTR_ERR(q);
                goto out_tag_set;
        }
-       dm_init_md_queue(md);
  
 -      /* backfill 'mq' sysfs registration normally done in blk_register_queue */
 -      err = blk_mq_register_dev(disk_to_dev(md->disk), q);
 -      if (err)
 -              goto out_cleanup_queue;
 -
        return 0;
  
 -out_cleanup_queue:
 -      blk_cleanup_queue(q);
  out_tag_set:
        blk_mq_free_tag_set(md->tag_set);
  out_kfree_tag_set:
diff --cc drivers/md/dm.c
Simple merge