On Sat, 2012-10-06 at 21:49 -0400, Christoph Hellwig wrote:
> Currenly all non-pscsi bakcneds report their standards version as
> SPC 2 via ->get_device_rev.

No, the proper on-the-wire bits to signal SPC-3 compliance are already
being returned by virtual backend drivers within standard INQUIRY
payload data.  

Notice the comment:

root@tifa:/usr/src/target-pending.git# grep SCSI_SPC_2 drivers/target/*.c
drivers/target/target_core_file.c:      return SCSI_SPC_2; /* Returns SPC-3 in 
Initiator Data */
drivers/target/target_core_iblock.c:    return SCSI_SPC_2; /* Returns SPC-3 in 
Initiator Data */
drivers/target/target_core_rd.c:        return SCSI_SPC_2; /* Returns SPC-3 in 
Initiator Data */

>  In addition to putting it into the
> inquirty data in spc_emulate_inquiry_std we also use it in two
> places to check on the version of the persistent reservation and
> alua support.  What is the benefit of supporting the old-style SCSI 2
> reservations and ALUA support when they can't be used at all with
> the virtual backends, and can only be used in the corner case emulated
> ALUA/PR support for pscsi?
> 

It's the include/scsi/scsi.h SCSI_3 + SCSI_SPC_* version definition
names that are incorrect:

#define SCSI_UNKNOWN    0
#define SCSI_1          1
#define SCSI_1_CCS      2
#define SCSI_2          3
#define SCSI_3          4        /* SPC */
#define SCSI_SPC_2      5
#define SCSI_SPC_3      6

from spc4r30 section 6.4.2 Standard INQUIRY data, Table 142 -- Version:

   00h     The device server does not claim conformance to any standard.
01h to 02h Obsolete
   03h     The device server complies to ANSI INCITS 301-1997 (a withdrawn 
standard).
   04h     The device server complies to ANSI INCITS 351-2001 (SPC-2).
   05h     The device server complies to ANSI INCITS 408-2005 (SPC-3).
   06h     The device server complies to this standard.

How about the following patch to fix the long-standing incorrect name
usage of these three scsi.h defines..?

diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index d947ffc..60ae194 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -834,7 +834,7 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned 
char *inq_result,
        sdev->lockable = sdev->removable;
        sdev->soft_reset = (inq_result[7] & 1) && ((inq_result[3] & 7) == 2);
 
-       if (sdev->scsi_level >= SCSI_3 ||
+       if (sdev->scsi_level >= SCSI_SPC_2 ||
                        (sdev->inquiry_len > 56 && inq_result[56] & 0x04))
                sdev->ppr = 1;
        if (inq_result[7] & 0x60)
@@ -1200,7 +1200,7 @@ static void scsi_sequential_lun_scan(struct scsi_target 
*starget,
         * Do not scan SCSI-2 or lower device past LUN 7, unless
         * BLIST_LARGELUN.
         */
-       if (scsi_level < SCSI_3 && !(bflags & BLIST_LARGELUN))
+       if (scsi_level < SCSI_SPC_2 && !(bflags & BLIST_LARGELUN))
                max_dev_lun = min(8U, max_dev_lun);
 
        /*
@@ -1327,7 +1327,7 @@ static int scsi_report_lun_scan(struct scsi_target 
*starget, int bflags,
        if (starget->scsi_level < SCSI_2 &&
            starget->scsi_level != SCSI_UNKNOWN)
                return 1;
-       if (starget->scsi_level < SCSI_3 &&
+       if (starget->scsi_level < SCSI_SPC_2 &&
            (!(bflags & BLIST_REPORTLUN2) || shost->max_lun <= 8))
                return 1;
        if (bflags & BLIST_NOLUN)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 4df73e5..f7dd7ec 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1901,7 +1901,7 @@ static int sd_try_rc16_first(struct scsi_device *sdp)
                return 0;
        if (sdp->try_rc_10_first)
                return 0;
-       if (sdp->scsi_level > SCSI_SPC_2)
+       if (sdp->scsi_level > SCSI_SPC_3)
                return 1;
        if (scsi_device_protection(sdp))
                return 1;
@@ -2443,7 +2443,7 @@ static int sd_try_extended_inquiry(struct scsi_device 
*sdp)
         * some USB ones crash on receiving them, and the pages
         * we currently ask for are for SPC-3 and beyond
         */
-       if (sdp->scsi_level > SCSI_SPC_2 && !sdp->skip_vpd_pages)
+       if (sdp->scsi_level > SCSI_SPC_3 && !sdp->skip_vpd_pages)
                return 1;
        return 0;
 }
diff --git a/drivers/target/target_core_file.c 
b/drivers/target/target_core_file.c
index 0360383..65941e5 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -536,7 +536,7 @@ static ssize_t fd_show_configfs_dev_params(
  */
 static u32 fd_get_device_rev(struct se_device *dev)
 {
-       return SCSI_SPC_2; /* Returns SPC-3 in Initiator Data */
+       return SCSI_SPC_3;
 }
 
 /*     fd_get_device_type(): (Part of se_subsystem_api_t template)
diff --git a/drivers/target/target_core_iblock.c 
b/drivers/target/target_core_iblock.c
index 29408d4..7ed94b0 100644
--- a/drivers/target/target_core_iblock.c
+++ b/drivers/target/target_core_iblock.c
@@ -713,7 +713,7 @@ fail:
 
 static u32 iblock_get_device_rev(struct se_device *dev)
 {
-       return SCSI_SPC_2; /* Returns SPC-3 in Initiator Data */
+       return SCSI_SPC_3;
 }
 
 static u32 iblock_get_device_type(struct se_device *dev)
diff --git a/drivers/target/target_core_rd.c b/drivers/target/target_core_rd.c
index d00bbe3..df5a811 100644
--- a/drivers/target/target_core_rd.c
+++ b/drivers/target/target_core_rd.c
@@ -445,7 +445,7 @@ static ssize_t rd_show_configfs_dev_params(
 
 static u32 rd_get_device_rev(struct se_device *dev)
 {
-       return SCSI_SPC_2; /* Returns SPC-3 in Initiator Data */
+       return SCSI_SPC_3;
 }
 
 static u32 rd_get_device_type(struct se_device *dev)
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
index 66216c1..cad47eb 100644
--- a/include/scsi/scsi.h
+++ b/include/scsi/scsi.h
@@ -536,9 +536,9 @@ static inline int scsi_is_wlun(unsigned int lun)
 #define SCSI_1          1
 #define SCSI_1_CCS      2
 #define SCSI_2          3
-#define SCSI_3          4        /* SPC */
-#define SCSI_SPC_2      5
-#define SCSI_SPC_3      6
+#define SCSI_SPC_2      4      /* ANSI INCITS 351-2001 (SPC-2) */
+#define SCSI_SPC_3      5      /* ANSI INCITS 408-2005 (SPC-3) */
+#define SCSI_SPC_4      6
 
 /*
  * INQ PERIPHERAL QUALIFIERS


--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to