[openfabrics-ewg] [PATCH 1/3] IB/VNIC Fix failover from secondary path back to primary path

Ramachandra K ramachandra.kuchimanchi at qlogic.com
Tue Dec 19 08:41:42 PST 2006


This fixes a bug due to which failover from secondary path back to primary path
was not working.

Signed-off-by: Ramachandra K <ramachandra.kuchimanchi at qlogic.com>
---

 drivers/infiniband/ulp/vnic/vnic_ib.c   |    4 +++-
 drivers/infiniband/ulp/vnic/vnic_main.c |    9 +++++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/infiniband/ulp/vnic/vnic_ib.c b/drivers/infiniband/ulp/vnic/vnic_ib.c
index 6196e20..56ae9f7 100644
--- a/drivers/infiniband/ulp/vnic/vnic_ib.c
+++ b/drivers/infiniband/ulp/vnic/vnic_ib.c
@@ -303,10 +303,12 @@ int vnic_ib_get_path(struct netpath *net
 			       " path record query\n",
 			       config->path_info.status);
 
-		netpath_timer(netpath, vnic->config->no_path_timeout);
 		ret = config->path_info.status;
 	}
 out:
+	if (ret)
+		netpath_timer(netpath, vnic->config->no_path_timeout);
+
 	return ret;
 }
 
diff --git a/drivers/infiniband/ulp/vnic/vnic_main.c b/drivers/infiniband/ulp/vnic/vnic_main.c
index fca2b90..e15d3f9 100644
--- a/drivers/infiniband/ulp/vnic/vnic_main.c
+++ b/drivers/infiniband/ulp/vnic/vnic_main.c
@@ -710,17 +710,18 @@ static struct vnic * vnic_handle_npevent
 	case VNIC_PRINP_TIMEREXPIRED:
 		netpath = &vnic->primary_path;
 		netpath->timer_state = NETPATH_TS_EXPIRED;
-		if (netpath->carrier)
+		if (!netpath->carrier)
 			update_path_and_reconnect(netpath, vnic);
 		break;
 	case VNIC_SECNP_TIMEREXPIRED:
 		netpath = &vnic->secondary_path;
 		netpath->timer_state = NETPATH_TS_EXPIRED;
-		if (netpath->carrier) {
+		if (!netpath->carrier)
+			update_path_and_reconnect(netpath, vnic);
+		else {
 			if (vnic->state == VNIC_UNINITIALIZED)
 				vnic_npevent_register(vnic, netpath);
-		} else
-			update_path_and_reconnect(netpath, vnic);
+		}
 		break;
 	case VNIC_PRINP_LINKUP:
 		vnic->primary_path.carrier = 1;






More information about the ewg mailing list