On 3/17/21 11:45 PM, Christoph Hellwig wrote: > On Wed, Mar 17, 2021 at 04:10:25PM -0600, Jens Axboe wrote: >> +static int blkdev_uring_ioctl(struct block_device *bdev, >> + struct io_uring_cmd *cmd) >> +{ >> + struct block_uring_cmd *bcmd = (struct block_uring_cmd *) &cmd->pdu; >> + >> + switch (bcmd->ioctl_cmd) { >> + case BLKBSZGET: >> + return block_size(bdev); >> + default: >> + return -ENOTTY; >> + } >> +} >> + >> static int blkdev_uring_cmd(struct io_uring_cmd *cmd, >> enum io_uring_cmd_flags flags) >> { >> struct block_device *bdev = I_BDEV(cmd->file->f_mapping->host); >> >> + switch (cmd->op) { >> + case BLOCK_URING_OP_IOCTL: >> + return blkdev_uring_ioctl(bdev, cmd); > > I don't think the two level dispatch here makes any sense. Then again > I don't think this code makes sense either except as an example.. That's all it is, an example. And, for me, just a quick way to test that everything stacks and layers appropriately. But yes, once we have something more concrete, this POC can be dropped and then re-introduced when there's a real use case. -- Jens Axboe