Re: [PATCH v6 1/3] ublk: add opcode offsets for DRV_IN/DRV_OUT

From: Ming Lei
Date: Thu Jul 06 2023 - 21:00:18 EST


On Fri, Jul 07, 2023 at 08:50:01AM +0900, Damien Le Moal wrote:
> On 7/6/23 22:09, Andreas Hindborg wrote:
> > From: Andreas Hindborg <a.hindborg@xxxxxxxxxxx>
> >
> > Ublk zoned storage support relies on DRV_IN handling for zone report.
> > Prepare for this change by adding offsets for the DRV_IN/DRV_OUT commands.
> >
> > Also add parenthesis to existing opcodes for better macro hygiene.
> >
> > Signed-off-by: Andreas Hindborg <a.hindborg@xxxxxxxxxxx>
> > ---
> > include/uapi/linux/ublk_cmd.h | 18 ++++++++++++++----
> > 1 file changed, 14 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/uapi/linux/ublk_cmd.h b/include/uapi/linux/ublk_cmd.h
> > index 4b8558db90e1..2ebb8d5d827a 100644
> > --- a/include/uapi/linux/ublk_cmd.h
> > +++ b/include/uapi/linux/ublk_cmd.h
> > @@ -229,12 +229,22 @@ struct ublksrv_ctrl_dev_info {
> > __u64 reserved2;
> > };
> >
> > -#define UBLK_IO_OP_READ 0
> > +#define UBLK_IO_OP_READ 0
> > #define UBLK_IO_OP_WRITE 1
> > #define UBLK_IO_OP_FLUSH 2
> > -#define UBLK_IO_OP_DISCARD 3
> > -#define UBLK_IO_OP_WRITE_SAME 4
> > -#define UBLK_IO_OP_WRITE_ZEROES 5
> > +#define UBLK_IO_OP_DISCARD 3
> > +#define UBLK_IO_OP_WRITE_SAME 4
> > +#define UBLK_IO_OP_WRITE_ZEROES 5
> > +/*
> > + * Passthrough (driver private) operation codes range between
>
> This is unclear... Here, what does "driver" refer to ? If it is the ublk
> kernel driver, than these commands should not be defined in the uapi
> header file, they should be defined in drivers/block/ublk.h. However, if
> these are for the user space driver, like all the other operations, then

Like normal IO, these passthrough requests needs userspace to handle too,
usually they just belong to specific ublk target, such as report zones.,
so here it is part of UAPI.

But yes, we should document it clearly, maybe something below?

Ublk passthrough operation code ranges, and each passthrough
operation provides generic interface between ublk kernel driver
and ublk userspace, and this interface is usually used for handling
generic block layer request, such as command of zoned report zones.
Passthrough operation is only needed iff ublk kernel driver has to
be involved for handling this operation.

> let's clearly state so. But then, I still not understand why these need
> a different naming pattern using the "__UBLK" prefix...

I think __UBLK just meant we don't suggest userspace to use it directly,
since the added macros are just for making ranges for DRV_IN and DRV_OUT,
so we can check command direction easily be using this start/end info in
both sides.


Thanks,
Ming