Re: [PATCH v2 2/4] block: factor block size and alignment handling out of blk_stack_limits
John Garry <[email protected]>
| Newsgroups | org.infradead.lists.linux-nvme,org.kernel.vger.linux-block |
|---|---|
| Organization | Oracle Corporation |
| Message-ID | <[email protected]> |
On 06/08/2026 03:46, Yao Sang wrote: > Topology limits are the block size and alignment limits that the top > device exposes after its data is placed at an offset on a bottom device. > blk_stack_limits() uses start, the first data sector in the bottom device > used by the top device, to calculate alignment_offset. > > It then stacks logical_block_size, physical_block_size, io_min, io_opt and > chunk_sectors, checks that they are compatible, and rounds max_sectors, > max_hw_sectors and max_dev_sectors down to the final logical_block_size. > > Keep these operations together because the checks and rounding must run > after the final logical and physical block sizes are known. Factor them > into a static blk_stack_topology_limits() helper. It still is not clear to me what is the criteria for a limit to be evaluated in blk_stack_topology_limits() (and not in blk_stack_limits()). You seem to be just saying that some limits need to be calculated before other dependent limits, so put them in a separate function. > > There is no behavior change. > > Signed-off-by: Yao Sang <[email protected]> > --- > block/blk-settings.c | 169 ++++++++++++++++++++++++------------------- > 1 file changed, 93 insertions(+), 76 deletions(-) > > diff --git a/block/blk-settings.c b/block/blk-settings.c > index 8274631290db..1aff818aaaac 100644 > --- a/block/blk-settings.c > +++ b/block/blk-settings.c > @@ -756,6 +756,96 @@ static void blk_stack_atomic_writes_limits(struct queue_limits *t, > t->atomic_write_hw_boundary = 0; > } > > +/* > + * Stack and check logical_block_size, physical_block_size, io_min, io_opt, > + * chunk_sectors and alignment_offset for a bottom-device range, then round > + * max_sectors, max_hw_sectors and max_dev_sectors to logical_block_size. > + */ This just describes what the code does. Anyone can see that. > +static int blk_stack_topology_limits(struct queue_limits *t, > + const struct queue_limits *b, sector_t start) > +{ > + unsigned int top, bottom, alignment; > + int ret = 0;