(trim list)
On 29/06/2024 06:07, Christoph Hellwig wrote:
On Fri, Jun 28, 2024 at 03:30:00PM +0100, John Garry wrote:
On 04/06/2024 05:46, Christoph Hellwig wrote:
It also looks like a good idea if this check was just done in
blk_validate_limits() so that each driver doesn't have to do their own
checks. That block function is kind of recent though.
Yes. We already discussed this in another thread a few days ago.
Has anyone taken this work? I was going to unless someone else wants to. 4
or 5 drivers directly reference blk_validate_block_size() now.
I haven't look at it yet, so from my point of view feel free to tackle
it.
I spent a bit of time on this, and the driver changes are pretty
straightforward, apart from nbd.
For nbd, we cannot only change to just stop calling
blk_validate_limits(). This is because the LBS is possibly updated in a
2-stage process:
a. update block size in the driver and validate
b. update queue limits
like:
static int __nbd_set_size(struct nbd_device *nbd, loff_t bytesize,
loff_t blksize)
{
...
if (blk_validate_block_size(blksize))
return -EINVAL;
nbd->config->bytesize = bytesize;
nbd->config->blksize_bits = __ffs(blksize);
if (!nbd->pid)
return 0;
lim = queue_limits_start_update(nbd->disk->queue);
...
error = queue_limits_commit_update(nbd->disk->queue, &lim);
So if we stop validating the limits in a., there is a user-visible
change in behaviour (as we stop rejecting invalid limits from the
NBD_SET_BLKSIZE ioctl).
We could add a "dryrun" option to queue_limits_commit_update() (and call
that instead of blk_validate_block_size(), which is effectively the same
as calling blk_validate_block_size()). Or we can keep
nbd as the only blk_validate_limits() user (outside the block layer).
Any better ideas?