Message ID | 20220222163144.1782447-3-kbusch@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | 64-bit data integrity field support | expand |
On Tue, Feb 22, 2022 at 08:31:36AM -0800, Keith Busch wrote: > The block integrity subsystem knows how to construct protection > information buffers with metadata beyond the protection information > fields. Remove the driver restriction. > > Note, this can only work if the PI field appears first in the metadata, > as the integrity subsystem doesn't calculate guard tags on preceding > metadata. > > Reviewed-by: Hannes Reinecke <hare@suse.de> > Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> > Signed-off-by: Keith Busch <kbusch@kernel.org> Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 3b876dcab730..8132b1282082 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -1760,12 +1760,9 @@ static int nvme_configure_metadata(struct nvme_ns *ns, struct nvme_id_ns *id) { struct nvme_ctrl *ctrl = ns->ctrl; - /* - * The PI implementation requires the metadata size to be equal to the - * t10 pi tuple size. - */ ns->ms = le16_to_cpu(id->lbaf[id->flbas & NVME_NS_FLBAS_LBA_MASK].ms); - if (ns->ms == sizeof(struct t10_pi_tuple)) + if (id->dps & NVME_NS_DPS_PI_FIRST || + ns->ms == sizeof(struct t10_pi_tuple)) ns->pi_type = id->dps & NVME_NS_DPS_PI_MASK; else ns->pi_type = 0;