From:       Jeremy Higdon <jeremy@sgi.com>
Subject:    [patch 1/1] sd_dif: problem with verify of type 1 protection information (PI)
Date:       2013-04-18 9:55:23
Patch-mainline: v3.10-rc1
Git-commit: 025a1f5029497c12a800a10d4540bf2313413b59
References: bnc#817010

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.

Signed-off-by: Jeremy Higdon <jeremy@sgi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Acked-by: Lee Duncan <lduncan@suse.com>


 sd_dif.c |    8 --------
 1 file changed, 8 deletions(-)


--- a/drivers/scsi/sd_dif.c	2013-04-14 17:45:16.000000000 -0700
+++ b/drivers/scsi/sd_dif.c	2013-04-18 02:36:27.000000000 -0700
@@ -93,14 +93,6 @@ static int sd_dif_type1_verify(struct bl
 		if (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",
