[PATCH v2 10/10] nvme: add handling for user integrity buffer
Christoph Hellwig
hch at lst.de
Wed Jun 26 23:29:27 PDT 2024
On Wed, Jun 26, 2024 at 03:37:00PM +0530, Anuj Gupta wrote:
> From: Kanchan Joshi <joshi.k at samsung.com>
>
> Create a new helper that contains the handling for both kernel and user
> generated integrity buffer.
> For user provided integrity buffer, convert bip flags
> (guard/reftag/apptag checks) to protocol specific flags. Also pass
> apptag and reftag down.
The driver should not have to know about the source.
> +static void nvme_set_app_tag(struct nvme_command *cmnd, u16 apptag)
> +{
> + cmnd->rw.apptag = cpu_to_le16(apptag);
> + /* use 0xfff as mask so that apptag is used in entirety*/
missing space before the closing comment. But I think this also make
sense as:
/* use the entire application tag */
> + if (!bip || !(bip->bip_flags & BIP_INTEGRITY_USER)) {
> + /*
> + * If formated with metadata, the block layer always provides a
> + * metadata buffer if CONFIG_BLK_DEV_INTEGRITY is enabled. Else
> + * we enable the PRACT bit for protection information or set the
> + * namespace capacity to zero to prevent any I/O.
> + */
> + if (!blk_integrity_rq(req)) {
> + if (WARN_ON_ONCE(!nvme_ns_has_pi(ns->head)))
> + return BLK_STS_NOTSUPP;
> + *control |= NVME_RW_PRINFO_PRACT;
> + }
This feels like the wrong level of conditionals. !bip implies
!blk_integrity_rq(req) already.
> + } else {
> + unsigned short bip_flags = bip->bip_flags;
> +
> + if (bip_flags & BIP_USER_CHK_GUARD)
> + *control |= NVME_RW_PRINFO_PRCHK_GUARD;
> + if (bip_flags & BIP_USER_CHK_REFTAG) {
> + *control |= NVME_RW_PRINFO_PRCHK_REF;
> + nvme_set_ref_tag(ns, cmnd, req);
> + }
> + if (bip_flags & BIP_USER_CHK_APPTAG) {
> + *control |= NVME_RW_PRINFO_PRCHK_APP;
> + nvme_set_app_tag(cmnd, bip->apptag);
> + }
But excpept for that the driver should always rely on the actual
flags passed by the block layer instead of having to see if it
is user passthrough data. Also it seems like this series fails
to update the SCSI code to account for these new flags.
More information about the Linux-nvme
mailing list