nvme: add support for passing on the application tag
authorKanchan Joshi <joshi.k@samsung.com>
Thu, 28 Nov 2024 11:22:38 +0000 (16:52 +0530)
committerJens Axboe <axboe@kernel.dk>
Mon, 23 Dec 2024 15:17:16 +0000 (08:17 -0700)
With user integrity buffer, there is a way to specify the app_tag.
Set the corresponding protocol specific flags and send the app_tag down.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Anuj Gupta <anuj20.g@samsung.com>
Signed-off-by: Kanchan Joshi <joshi.k@samsung.com>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Link: https://lore.kernel.org/r/20241128112240.8867-9-anuj20.g@samsung.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/nvme/host/core.c

index 766df130cd824aa26d3461e68cee8770fb0224f4..0983482b3ea267b82f740e84b6f3ddf4035ffcd4 100644 (file)
@@ -885,6 +885,12 @@ static blk_status_t nvme_setup_discard(struct nvme_ns *ns, struct request *req,
        return BLK_STS_OK;
 }
 
+static void nvme_set_app_tag(struct request *req, struct nvme_command *cmnd)
+{
+       cmnd->rw.lbat = cpu_to_le16(bio_integrity(req->bio)->app_tag);
+       cmnd->rw.lbatm = cpu_to_le16(0xffff);
+}
+
 static void nvme_set_ref_tag(struct nvme_ns *ns, struct nvme_command *cmnd,
                              struct request *req)
 {
@@ -1025,6 +1031,10 @@ static inline blk_status_t nvme_setup_rw(struct nvme_ns *ns,
                                control |= NVME_RW_APPEND_PIREMAP;
                        nvme_set_ref_tag(ns, cmnd, req);
                }
+               if (bio_integrity_flagged(req->bio, BIP_CHECK_APPTAG)) {
+                       control |= NVME_RW_PRINFO_PRCHK_APP;
+                       nvme_set_app_tag(req, cmnd);
+               }
        }
 
        cmnd->rw.control = cpu_to_le16(control);