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.


Reply via email to