[SCSI] scsi_dh_alua: Store the PREF bit from RTPG
authorMoger, Babu <Babu.Moger@netapp.com>
Tue, 27 Mar 2012 20:56:08 +0000 (20:56 +0000)
committerJames Bottomley <JBottomley@Parallels.com>
Mon, 23 Apr 2012 18:28:13 +0000 (19:28 +0100)
PREF bit indicates preferred target port group for accessing a logical
unit. This bit is used to optimize the STPG command handling.

Signed-off-by: Babu Moger <babu.moger@netapp.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/device_handler/scsi_dh_alua.c

index 506206ae575520f2bac742e7d72aee1e53af43f9..4865a99d9c38bf8816ee95d9d6d715e5bcada1fa 100644 (file)
@@ -63,6 +63,7 @@ struct alua_dh_data {
        int                     rel_port;
        int                     tpgs;
        int                     state;
+       int                     pref;
        unsigned                flags; /* used for optimizing STPG */
        unsigned char           inq[ALUA_INQUIRY_SIZE];
        unsigned char           *buff;
@@ -558,14 +559,16 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h)
        for (k = 4, ucp = h->buff + 4; k < len; k += off, ucp += off) {
                if (h->group_id == (ucp[2] << 8) + ucp[3]) {
                        h->state = ucp[0] & 0x0f;
+                       h->pref = ucp[0] >> 7;
                        valid_states = ucp[1];
                }
                off = 8 + (ucp[7] * 4);
        }
 
        sdev_printk(KERN_INFO, sdev,
-                   "%s: port group %02x state %c supports %c%c%c%c%c%c%c\n",
+                   "%s: port group %02x state %c %s supports %c%c%c%c%c%c%c\n",
                    ALUA_DH_NAME, h->group_id, print_alua_state(h->state),
+                   h->pref ? "preferred" : "non-preferred",
                    valid_states&TPGS_SUPPORT_TRANSITION?'T':'t',
                    valid_states&TPGS_SUPPORT_OFFLINE?'O':'o',
                    valid_states&TPGS_SUPPORT_LBA_DEPENDENT?'L':'l',