[PATCH] ibmvfc: Avoid unnecessary port relogin

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Following an RSCN, ibmvfc will issue an ADISC to determine
if the underlying target has changed, comparing the
SCSI ID, WWPN, and WWNN to determine how to handle the
rport in discovery. However, the comparison of the WWPN
and WWNN was performing a memcmp between a big endian
field against a CPU endian field, which resulted in
the wrong answer on LE systems. This was observed as unexpected
errors getting logged at boot time as targets were getting
relogins when not needed.

Signed-off-by: Brian King <brking@xxxxxxxxxxxxxxxxxx>
---

Index: linux.git/drivers/scsi/ibmvscsi/ibmvfc.c
===================================================================
--- linux.git.orig/drivers/scsi/ibmvscsi/ibmvfc.c
+++ linux.git/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -3579,11 +3579,9 @@ static void ibmvfc_tgt_implicit_logout(s
 static int ibmvfc_adisc_needs_plogi(struct ibmvfc_passthru_mad *mad,
 				    struct ibmvfc_target *tgt)
 {
-	if (memcmp(&mad->fc_iu.response[2], &tgt->ids.port_name,
-		   sizeof(tgt->ids.port_name)))
+	if (wwn_to_u64((u8 *)&mad->fc_iu.response[2]) != tgt->ids.port_name)
 		return 1;
-	if (memcmp(&mad->fc_iu.response[4], &tgt->ids.node_name,
-		   sizeof(tgt->ids.node_name)))
+	if (wwn_to_u64((u8 *)&mad->fc_iu.response[4]) != tgt->ids.node_name)
 		return 1;
 	if (be32_to_cpu(mad->fc_iu.response[6]) != tgt->scsi_id)
 		return 1;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux