]> www.infradead.org Git - users/hch/block.git/commitdiff
Merge branch 'for-6.11/block-limits' into for-6.11/block
authorJens Axboe <axboe@kernel.dk>
Wed, 19 Jun 2024 14:02:34 +0000 (08:02 -0600)
committerJens Axboe <axboe@kernel.dk>
Wed, 19 Jun 2024 14:14:49 +0000 (08:14 -0600)
Merge in last round of queue limits changes from Christoph.

* for-6.11/block-limits: (26 commits)
  block: move the bounce flag into the features field
  block: move the skip_tagset_quiesce flag to queue_limits
  block: move the pci_p2pdma flag to queue_limits
  block: move the zone_resetall flag to queue_limits
  block: move the zoned flag into the features field
  block: move the poll flag to queue_limits
  block: move the dax flag to queue_limits
  block: move the nowait flag to queue_limits
  block: move the synchronous flag to queue_limits
  block: move the stable_writes flag to queue_limits
  block: move the io_stat flag setting to queue_limits
  block: move the add_random flag to queue_limits
  block: move the nonrot flag to queue_limits
  block: move cache control settings out of queue->flags
  block: remove blk_flush_policy
  block: freeze the queue in queue_attr_store
  nbd: move setting the cache control flags to __nbd_set_size
  virtio_blk: remove virtblk_update_cache_mode
  loop: fold loop_update_rotational into loop_reconfigure_limits
  loop: also use the default block size from an underlying block device
  ...

Signed-off-by: Jens Axboe <axboe@kernel.dk>
1  2 
block/blk-settings.c
drivers/block/amiflop.c
drivers/block/ataflop.c
drivers/md/dm-table.c
drivers/md/dm-zone.c
drivers/md/md.c
drivers/md/raid5.c
include/linux/blkdev.h

Simple merge
Simple merge
Simple merge
index 2805cd2b7c8bf253d0ff111f49982372fad6cab0,df6313c3fe6ba4e92c3a9fff39b0cdf661af78bb..29e4c6e970e3c592130b052524d528c0c759c195
@@@ -1893,36 -1830,12 +1830,9 @@@ int dm_table_set_restrictions(struct dm
        if (dm_table_any_dev_attr(t, device_dax_write_cache_enabled, NULL))
                dax_write_cache(t->md->dax_dev, true);
  
-       /* Ensure that all underlying devices are non-rotational. */
-       if (dm_table_any_dev_attr(t, device_is_rotational, NULL))
-               blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
-       else
-               blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
-       /*
-        * Some devices don't use blk_integrity but still want stable pages
-        * because they do their own checksumming.
-        * If any underlying device requires stable pages, a table must require
-        * them as well.  Only targets that support iterate_devices are considered:
-        * don't want error, zero, etc to require stable pages.
-        */
-       if (dm_table_any_dev_attr(t, device_requires_stable_pages, NULL))
-               blk_queue_flag_set(QUEUE_FLAG_STABLE_WRITES, q);
-       else
-               blk_queue_flag_clear(QUEUE_FLAG_STABLE_WRITES, q);
--      /*
-        * Determine whether or not this queue's I/O timings contribute
-        * to the entropy pool, Only request-based targets use this.
-        * Clear QUEUE_FLAG_ADD_RANDOM if any underlying device does not
-        * have it set.
 -       * For a zoned target, setup the zones related queue attributes
 -       * and resources necessary for zone append emulation if necessary.
--       */
-       if (blk_queue_add_random(q) &&
-           dm_table_any_dev_attr(t, device_is_not_random, NULL))
-               blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, q);
 +      /* For a zoned table, setup the zone related queue attributes. */
-       if (IS_ENABLED(CONFIG_BLK_DEV_ZONED) && limits->zoned) {
+       if (IS_ENABLED(CONFIG_BLK_DEV_ZONED) &&
 -          (limits->features & limits->features & BLK_FEAT_ZONED)) {
++          (limits->features & BLK_FEAT_ZONED)) {
                r = dm_set_zones_restrictions(t, q, limits);
                if (r)
                        return r;
        if (r)
                return r;
  
-       if (IS_ENABLED(CONFIG_BLK_DEV_ZONED) && limits->zoned) {
 +      /*
 +       * Now that the limits are set, check the zones mapped by the table
 +       * and setup the resources for zone append emulation if necessary.
 +       */
++      if (IS_ENABLED(CONFIG_BLK_DEV_ZONED) &&
++          (limits->features & BLK_FEAT_ZONED)) {
 +              r = dm_revalidate_zones(t, q);
 +              if (r)
 +                      return r;
 +      }
 +
        dm_update_crypto_profile(q, t);
-       /*
-        * Check for request-based device is left to
-        * dm_mq_init_request_queue()->blk_mq_init_allocated_queue().
-        *
-        * For bio-based device, only set QUEUE_FLAG_POLL when all
-        * underlying devices supporting polling.
-        */
-       if (__table_type_bio_based(t->type)) {
-               if (dm_table_supports_poll(t))
-                       blk_queue_flag_set(QUEUE_FLAG_POLL, q);
-               else
-                       blk_queue_flag_clear(QUEUE_FLAG_POLL, q);
-       }
        return 0;
  }
  
index 70719bf32a2e5e764af929d8a0558a07fd6af0d7,88d313229b43ff0495d319872871cb6ba412a8e4..4d37e53b50ee6494e3d8688bf61a76ec3aa4d80e
@@@ -363,36 -257,29 +363,37 @@@ int dm_set_zones_restrictions(struct dm
        }
  
        /*
 -       * If we only have conventional zones, expose the mapped device as
 -       * a regular device.
 +       * If we only have conventional zones mapped, expose the mapped device
 +       + as a regular device.
         */
 -      if (nr_conv_zones >= ret) {
 +      if (!zlim.mapped_nr_seq_zones) {
                lim->max_open_zones = 0;
                lim->max_active_zones = 0;
-               lim->zoned = false;
 +              lim->max_zone_append_sectors = 0;
 +              lim->zone_write_granularity = 0;
 +              lim->chunk_sectors = 0;
+               lim->features &= ~BLK_FEAT_ZONED;
                clear_bit(DMF_EMULATE_ZONE_APPEND, &md->flags);
 +              md->nr_zones = 0;
                disk->nr_zones = 0;
                return 0;
        }
  
 -      if (!md->disk->nr_zones) {
 -              DMINFO("%s using %s zone append",
 -                     md->disk->disk_name,
 -                     queue_emulates_zone_append(q) ? "emulated" : "native");
 -      }
 -
 -      ret = dm_revalidate_zones(md, t);
 -      if (ret < 0)
 -              return ret;
 +      /*
 +       * Warn once (when the capacity is not yet set) if the mapped device is
 +       * partially using zone resources of the target devices as that leads to
 +       * unreliable limits, i.e. if another mapped device uses the same
 +       * underlying devices, we cannot enforce zone limits to guarantee that
 +       * writing will not lead to errors. Note that we really should return
 +       * an error for such case but there is no easy way to find out if
 +       * another mapped device uses the same underlying zoned devices.
 +       */
 +      if (!get_capacity(disk) && !zlim.reliable_limits)
 +              DMWARN("%s zone resource limits may be unreliable",
 +                     disk->disk_name);
  
-       if (lim->zoned && !static_key_enabled(&zoned_enabled.key))
 -      if (!static_key_enabled(&zoned_enabled.key))
++      if (lim->features & BLK_FEAT_ZONED &&
++          !static_key_enabled(&zoned_enabled.key))
                static_branch_enable(&zoned_enabled);
        return 0;
  }
diff --cc drivers/md/md.c
Simple merge
Simple merge
Simple merge