| From e6f1ce812e6851424b83c26974d5aadf7d7868fd Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 21 Jul 2021 10:00:11 +0200 |
| Subject: nvme: set the PRACT bit when using Write Zeroes with T10 PI |
| |
| From: Christoph Hellwig <hch@lst.de> |
| |
| [ Upstream commit aaeb7bb061be545251606f4d9c82d710ca2a7c8e ] |
| |
| When using Write Zeroes on a namespace that has protection |
| information enabled they behavior without the PRACT bit |
| counter-intuitive and will generally lead to validation failures |
| when reading the written blocks. Fix this by always setting the |
| PRACT bit that generates matching PI data on the fly. |
| |
| Fixes: 6e02318eaea5 ("nvme: add support for the Write Zeroes command") |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Reviewed-by: Keith Busch <kbusch@kernel.org> |
| Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/nvme/host/core.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c |
| index 66973bb56305..148e756857a8 100644 |
| --- a/drivers/nvme/host/core.c |
| +++ b/drivers/nvme/host/core.c |
| @@ -880,7 +880,10 @@ static inline blk_status_t nvme_setup_write_zeroes(struct nvme_ns *ns, |
| cpu_to_le64(nvme_sect_to_lba(ns, blk_rq_pos(req))); |
| cmnd->write_zeroes.length = |
| cpu_to_le16((blk_rq_bytes(req) >> ns->lba_shift) - 1); |
| - cmnd->write_zeroes.control = 0; |
| + if (nvme_ns_has_pi(ns)) |
| + cmnd->write_zeroes.control = cpu_to_le16(NVME_RW_PRINFO_PRACT); |
| + else |
| + cmnd->write_zeroes.control = 0; |
| return BLK_STS_OK; |
| } |
| |
| -- |
| 2.30.2 |
| |