All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <ming.lei@redhat.com>
To: Caleb Sander Mateos <csander@purestorage.com>
Cc: Jens Axboe <axboe@kernel.dk>, Shuah Khan <shuah@kernel.org>,
	linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Stanley Zhang <stazhang@purestorage.com>,
	Uday Shankar <ushankar@purestorage.com>
Subject: Re: [PATCH 04/20] ublk: add integrity UAPI
Date: Mon, 22 Dec 2025 22:26:22 +0800	[thread overview]
Message-ID: <aUlVDtLgPh6NCWsC@fedora> (raw)
In-Reply-To: <20251217053455.281509-5-csander@purestorage.com>

On Tue, Dec 16, 2025 at 10:34:38PM -0700, Caleb Sander Mateos wrote:
> From: Stanley Zhang <stazhang@purestorage.com>
> 
> Add UAPI definitions for metadata/integrity support in ublk.
> UBLK_PARAM_TYPE_INTEGRITY and struct ublk_param_integrity allow a ublk
> server to specify the integrity params of a ublk device.
> The ublk driver will set UBLK_IO_F_INTEGRITY in the op_flags field of
> struct ublksrv_io_desc for requests with integrity data.
> The ublk server uses user copy with UBLKSRV_IO_INTEGRITY_FLAG set in the
> offset parameter to access a request's integrity buffer.
> 
> Signed-off-by: Stanley Zhang <stazhang@purestorage.com>
> [csander: drop feature flag and redundant pi_tuple_size field,
>  add io_desc flag, use block metadata UAPI constants]
> Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
> ---
>  include/uapi/linux/ublk_cmd.h | 20 +++++++++++++++++++-
>  1 file changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/include/uapi/linux/ublk_cmd.h b/include/uapi/linux/ublk_cmd.h
> index ec77dabba45b..5bfb9a0521c3 100644
> --- a/include/uapi/linux/ublk_cmd.h
> +++ b/include/uapi/linux/ublk_cmd.h
> @@ -129,11 +129,15 @@
>  #define UBLK_QID_BITS		12
>  #define UBLK_QID_BITS_MASK	((1ULL << UBLK_QID_BITS) - 1)
>  
>  #define UBLK_MAX_NR_QUEUES	(1U << UBLK_QID_BITS)
>  
> -#define UBLKSRV_IO_BUF_TOTAL_BITS	(UBLK_QID_OFF + UBLK_QID_BITS)
> +/* Copy to/from request integrity buffer instead of data buffer */
> +#define UBLK_INTEGRITY_FLAG_OFF		(UBLK_QID_OFF + UBLK_QID_BITS)
> +#define UBLKSRV_IO_INTEGRITY_FLAG	(1ULL << UBLK_INTEGRITY_FLAG_OFF)
> +

I feel it is more readable to move the definition into the patch which uses
them.

> +#define UBLKSRV_IO_BUF_TOTAL_BITS	(UBLK_INTEGRITY_FLAG_OFF + 1)

It is UAPI, UBLKSRV_IO_BUF_TOTAL_BITS shouldn't be changed, or can you
explain this way is safe?

>  #define UBLKSRV_IO_BUF_TOTAL_SIZE	(1ULL << UBLKSRV_IO_BUF_TOTAL_BITS)
>  
>  /*
>   * ublk server can register data buffers for incoming I/O requests with a sparse
>   * io_uring buffer table. The request buffer can then be used as the data buffer
> @@ -406,10 +410,12 @@ struct ublksrv_ctrl_dev_info {
>   *
>   * ublk server has to check this flag if UBLK_AUTO_BUF_REG_FALLBACK is
>   * passed in.
>   */
>  #define		UBLK_IO_F_NEED_REG_BUF		(1U << 17)
> +/* Request has an integrity data buffer */
> +#define		UBLK_IO_F_INTEGRITY		(1U << 18)
>  
>  /*
>   * io cmd is described by this structure, and stored in share memory, indexed
>   * by request tag.
>   *
> @@ -598,10 +604,20 @@ struct ublk_param_segment {
>  	__u32 	max_segment_size;
>  	__u16 	max_segments;
>  	__u8	pad[2];
>  };
>  
> +struct ublk_param_integrity {
> +	__u32	flags; /* LBMD_PI_CAP_* from linux/fs.h */
> +	__u8	interval_exp;
> +	__u8	metadata_size;
> +	__u8	pi_offset;
> +	__u8	csum_type; /* LBMD_PI_CSUM_* from linux/fs.h */
> +	__u8	tag_size;
> +	__u8	pad[7];
> +};
> +

Just be curious, `pi_tuple_size` isn't defined, instead it is hard-coded in
ublk_integrity_pi_tuple_size().

However, both scsi and nvme sets `pi_tuple_size`, so it means that ublk PI
supports one `subset` or scsi/nvme `pi_tuple_size` can be removed too?


Thanks, 
Ming


  reply	other threads:[~2025-12-22 14:26 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-17  5:34 [PATCH 00/20] ublk: add support for integrity data Caleb Sander Mateos
2025-12-17  5:34 ` [PATCH 01/20] block: validate pi_offset integrity limit Caleb Sander Mateos
2025-12-18  8:53   ` Christoph Hellwig
2025-12-17  5:34 ` [PATCH 02/20] block: validate interval_exp " Caleb Sander Mateos
2025-12-18  8:53   ` Christoph Hellwig
2025-12-17  5:34 ` [PATCH 03/20] blk-integrity: take const pointer in blk_integrity_rq() Caleb Sander Mateos
2025-12-19 14:16   ` Ming Lei
2025-12-17  5:34 ` [PATCH 04/20] ublk: add integrity UAPI Caleb Sander Mateos
2025-12-22 14:26   ` Ming Lei [this message]
2025-12-22 15:09     ` Caleb Sander Mateos
2025-12-23  1:51       ` Ming Lei
2025-12-17  5:34 ` [PATCH 05/20] ublk: move ublk flag check functions earlier Caleb Sander Mateos
2025-12-22 14:30   ` Ming Lei
2025-12-17  5:34 ` [PATCH 06/20] ublk: support UBLK_PARAM_TYPE_INTEGRITY in device creation Caleb Sander Mateos
2025-12-22 14:47   ` Ming Lei
2025-12-22 15:35     ` Caleb Sander Mateos
2025-12-23  1:58       ` Ming Lei
2025-12-17  5:34 ` [PATCH 07/20] ublk: set UBLK_IO_F_INTEGRITY in ublksrv_io_desc Caleb Sander Mateos
2025-12-22 14:48   ` Ming Lei
2025-12-17  5:34 ` [PATCH 08/20] ublk: add ublk_copy_user_bvec() helper Caleb Sander Mateos
2025-12-22 14:52   ` Ming Lei
2025-12-22 15:37     ` Caleb Sander Mateos
2025-12-17  5:34 ` [PATCH 09/20] ublk: split out ublk_user_copy() helper Caleb Sander Mateos
2025-12-22 14:58   ` Ming Lei
2025-12-17  5:34 ` [PATCH 10/20] ublk: inline ublk_check_and_get_req() into ublk_user_copy() Caleb Sander Mateos
2025-12-26  2:10   ` Ming Lei
2025-12-17  5:34 ` [PATCH 11/20] ublk: move offset check out of __ublk_check_and_get_req() Caleb Sander Mateos
2025-12-26  2:15   ` Ming Lei
2025-12-17  5:34 ` [PATCH 12/20] ublk: implement integrity user copy Caleb Sander Mateos
2025-12-26  2:38   ` Ming Lei
2025-12-17  5:34 ` [PATCH 13/20] ublk: optimize ublk_user_copy() on daemon task Caleb Sander Mateos
2025-12-26  2:51   ` Ming Lei
2025-12-17  5:34 ` [PATCH 14/20] selftests: ublk: add utility to get block device metadata size Caleb Sander Mateos
2025-12-17  5:34 ` [PATCH 15/20] selftests: ublk: add kublk support for integrity params Caleb Sander Mateos
2025-12-17  5:34 ` [PATCH 16/20] selftests: ublk: implement integrity user copy in kublk Caleb Sander Mateos
2025-12-17  5:34 ` [PATCH 17/20] selftests: ublk: support non-O_DIRECT backing files Caleb Sander Mateos
2025-12-17  5:34 ` [PATCH 18/20] selftests: ublk: add integrity data support to loop target Caleb Sander Mateos
2025-12-17  5:34 ` [PATCH 19/20] selftests: ublk: add integrity params test Caleb Sander Mateos
2025-12-17  5:34 ` [PATCH 20/20] selftests: ublk: add end-to-end integrity test Caleb Sander Mateos
2025-12-18 16:54 ` (subset) [PATCH 00/20] ublk: add support for integrity data Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aUlVDtLgPh6NCWsC@fedora \
    --to=ming.lei@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=csander@purestorage.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=shuah@kernel.org \
    --cc=stazhang@purestorage.com \
    --cc=ushankar@purestorage.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.