On Wed, Jun 05, 2024 at 11:24:45AM +0900, Damien Le Moal wrote: > The generic stacking of limits implemented in the block layer cannot > correctly handle stacking of zone resource limits (max open zones and > max active zones) ... for DM. All other limits stacking ends up in a single top device. > + /* > + * If the target does not map all sequential zones, the limits > + * will not be reliable. > + */ > + if (zc.target_nr_seq_zones < zc.total_nr_seq_zones) > + zlim->reliable_limits = false; > + > + /* > + * If the target maps less sequential zones than the limit values, then > + * we do not have limits for this target. > + */ > + max_active_zones = disk->queue->limits.max_active_zones; > + if (max_active_zones >= zc.target_nr_seq_zones) > + max_active_zones = 0; > + zlim->max_active_zones = > + min_not_zero(max_active_zones, zlim->max_active_zones); > + > + max_open_zones = disk->queue->limits.max_open_zones; > + if (max_open_zones >= zc.target_nr_seq_zones) > + max_open_zones = 0; > + zlim->max_open_zones = > + min_not_zero(max_open_zones, zlim->max_open_zones); Given that your previous patch already caps max_open/active_zones to the number of sequential zones, duplicating this here should not be needed. > + /* We cannot have more open zones than active zones. */ > + zlim->max_open_zones = > + min(zlim->max_open_zones, zlim->max_active_zones); Same question about the capping as in patch 1, and same comment about the duplication as above. > + if (zlim.max_open_zones >= zlim.mapped_nr_seq_zones) > + lim->max_open_zones = 0; > + else > + lim->max_open_zones = zlim.max_open_zones; > + > + if (zlim.max_active_zones >= zlim.mapped_nr_seq_zones) > + lim->max_active_zones = 0; > + else > + lim->max_active_zones = zlim.max_active_zones; And once more here.