From: Jens Axboe <axboe@kernel.dk>
Date: Wed, 19 Jun 2024 14:02:34 +0000 (-0600)
Subject: Merge branch 'for-6.11/block-limits' into for-6.11/block
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=69c34f07e45f2d52d9a41991867a1e5a85bbaaf3;p=users%2Fjedix%2Flinux-maple.git

Merge branch 'for-6.11/block-limits' into for-6.11/block

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>
---

69c34f07e45f2d52d9a41991867a1e5a85bbaaf3
diff --cc drivers/md/dm-table.c
index 2805cd2b7c8b,df6313c3fe6b..29e4c6e970e3
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@@ -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;
@@@ -1932,32 -1845,7 +1842,18 @@@
  	if (r)
  		return r;
  
 +	/*
 +	 * 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->zoned) {
++	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;
  }
  
diff --cc drivers/md/dm-zone.c
index 70719bf32a2e,88d313229b43..4d37e53b50ee
--- a/drivers/md/dm-zone.c
+++ b/drivers/md/dm-zone.c
@@@ -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->max_zone_append_sectors = 0;
 +		lim->zone_write_granularity = 0;
 +		lim->chunk_sectors = 0;
- 		lim->zoned = false;
+ 		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;
  }