On 06/01/2025 17:49, Mike Snitzer wrote:
+++ b/drivers/md/dm-table.c @@ -1593,6 +1593,7 @@ int dm_calculate_queue_limits(struct dm_table *t, struct queue_limits ti_limits; unsigned int zone_sectors = 0; bool zoned = false; + bool atomic_writes = true;dm_set_stacking_limits(limits); @@ -1602,8 +1603,12 @@ int dm_calculate_queue_limits(struct dm_table *t, if (!dm_target_passes_integrity(ti->type))t->integrity_supported = false; + if (!dm_target_supports_atomic_writes(ti->type)) + atomic_writes = false; }+ if (atomic_writes)+ limits->features |= BLK_FEAT_ATOMIC_WRITES_STACKED; for (unsigned int i = 0; i < t->num_targets; i++) { struct dm_target *ti = dm_table_get_target(t, i);@@ -1616,6 +1621,13 @@ int dm_calculate_queue_limits(struct dm_table *t,goto combine_limits; }+ /*+ * dm_set_device_limits() -> blk_stack_limits() considers + * ti_limits as 'top', so set BLK_FEAT_ATOMIC_WRITES_STACKED + * here also. + */ + if (atomic_writes) + ti_limits.features |= BLK_FEAT_ATOMIC_WRITES_STACKED; /* * Combine queue limits of all the devices this target uses. */You're referring to this code that immediately follows this ^ comment which stacks up the limits of a target's potential to have N component data devices:ti->type->iterate_devices(ti, dm_set_device_limits, &ti_limits); Your comment and redundant feature flag setting is feels wrong. I'd expect code comparable to what is done for zoned, e.g.: if (!zoned && (ti_limits.features & BLK_FEAT_ZONED)) { /* * After stacking all limits, validate all devices * in table support this zoned model and zone sectors. */ zoned = (ti_limits.features & BLK_FEAT_ZONED); zone_sectors = ti_limits.chunk_sectors; } Meaning, for zoned devices, a side-effect of the ti->type->iterate_devices() call (and N blk_stack_limits calls) is ti_limits.features having BLK_FEAT_ZONED enabled. Why wouldn't the same side-effect happen for BLK_FEAT_ATOMIC_WRITES_STACKED (speaks to blk_stack_limits being different/wrong for atomic writes support)?
ok, do I admit that my code did not feel quite right, so I will check the zoned code as a reference.
Just feels not quite right... but I could be wrong, please see if there is any "there" there
Will do. Cheers, John
