sd_dif: problem with verify of type 1 protection information (PI)
PATCH 1/1 sd_dif: problem with verify of type 1 protection information (PI)
It appears to me that there is a problem with handling of type 1 protection information.
It is considering a logical block reference tag of 0xffffffff to be an error, but it is actually valid any time ((lba & 0xffffffff) == 0xffffffff) [for example, 2TiB-1, 4TiB-1, 6TiB-1, etc.].
I'm going by what's written in 4.18.3 of SBC3, where there doesn't appear to be any invalid value for the reference tag.
sd_dif.c | 8 -------- 1 file changed, 8 deletions(-)
drivers/scsi/sd_dif.c +0 -8
@@ -93,14 +93,6 @@ static int sd_dif_type1_verify(struct blif (sdt->app_tag ==0xffff )return 0 ; -/* Bad ref tag received from disk */ -if (sdt->ref_tag ==0xffffffff ) { -printk (KERN_ERR -"%s: bad phys ref tag on sector %lu\n" , - bix->disk_name, (unsigned long )sector); -return -EIO ; - } -if (be32_to_cpu (sdt->ref_tag) != (sector &0xffffffff )) { printk(KERN_ERR "%s: ref tag error on sector %lu (rcvd %u)\n",
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Jeremy" == Jeremy Higdon <[email protected]> writes:
Jeremy> It appears to me that there is a problem with handling of type 1 Jeremy> protection information. It is considering a logical block Jeremy> reference tag of 0xffffffff to be an error, but it is actually Jeremy> valid any time ((lba & 0xffffffff) == 0xffffffff) [for example, Jeremy> 2TiB-1, 4TiB-1, 6TiB-1, etc.].
Yes, that's a bogus check. It's actually one I put in way back to debug a faulty device and forgot to back out. My DIF test tooling does not rely on the block layer generate/verify functions so I never noticed.
The same issue was reported recently by Keith Busch.
Signature · 1 line
Martin K. Petersen Oracle Linux Engineering