[PATCH v6 1/3] bsg: add bsg_uring_cmd uapi structure

Yang Xiuwei posted 3 patches 1 month ago
[PATCH v6 1/3] bsg: add bsg_uring_cmd uapi structure
Posted by Yang Xiuwei 1 month ago
Add the bsg_uring_cmd structure to the BSG UAPI header to support
io_uring-based SCSI passthrough operations via IORING_OP_URING_CMD.

Signed-off-by: Yang Xiuwei <yangxiuwei@kylinos.cn>
---
 include/uapi/linux/bsg.h | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/include/uapi/linux/bsg.h b/include/uapi/linux/bsg.h
index cd6302def5ed..983c6e2b6871 100644
--- a/include/uapi/linux/bsg.h
+++ b/include/uapi/linux/bsg.h
@@ -63,5 +63,26 @@ struct sg_io_v4 {
 	__u32 padding;
 };
 
+struct bsg_uring_cmd {
+	__u64 request;		/* [i], [*i] command descriptor address */
+	__u32 request_len;	/* [i] command descriptor length in bytes */
+	__u32 protocol;		/* [i] protocol type (BSG_PROTOCOL_*) */
+	__u32 subprotocol;	/* [i] subprotocol type (BSG_SUB_PROTOCOL_*) */
+	__u32 max_response_len;	/* [i] response buffer size in bytes */
+
+	__u64 response;		/* [i], [*o] response data address */
+	__u64 dout_xferp;	/* [i], [*i] */
+	__u32 dout_xfer_len;	/* [i] bytes to be transferred to device */
+	__u32 dout_iovec_count;	/* [i] 0 -> "flat" dout transfer else
+				 * dout_xferp points to array of iovec
+				 */
+	__u64 din_xferp;	/* [i], [*o] */
+	__u32 din_xfer_len;	/* [i] bytes to be transferred from device */
+	__u32 din_iovec_count;	/* [i] 0 -> "flat" din transfer */
+
+	__u32 timeout_ms;	/* [i] timeout in milliseconds */
+	__u32 flags;		/* [i] bit mask */
+	__u8  reserved[8];	/* reserved for future extension */
+};
 
 #endif /* _UAPIBSG_H */
-- 
2.25.1
Re: [PATCH v6 1/3] bsg: add bsg_uring_cmd uapi structure
Posted by Bart Van Assche 1 month ago
On 3/4/26 7:28 PM, Yang Xiuwei wrote:
> +	__u32 flags;		/* [i] bit mask */

Please document what flags are supported and what their meaning is.

Thanks,

Bart.
Re: [PATCH v6 1/3] bsg: add bsg_uring_cmd uapi structure
Posted by Yang Xiuwei 1 month ago
On 2026-03-05 15:14, Bart Van Assche wrote:
> Please document what flags are supported and what their meaning is.

After analysis, I've decided to remove the flags field entirely since
io_uring already provides sufficient control mechanisms (sqe->flags,
sqe->uring_cmd_flags, issue_flags). The flags field is not used in the
current implementation and is not needed for future functionality, as
io_uring's existing flags cover all necessary control aspects.

Will remove the flags field in v7.

Best regards,
Yang Xiuwei