From e55f472f95c35cff0ec41c72d704ccde38291e9a Mon Sep 17 00:00:00 2001 From: Bang Nguyen Date: Thu, 6 Jun 2013 17:15:07 -0700 Subject: [PATCH] RDS: Move connection along with IP when failing over/back. Orabug: 16916648 Signed-off-by: Bang Nguyen Acked-by: Zheng Li Signed-off-by: Jerry Snitselaar (cherry picked from commit 78b7d86911046c3a10ffa52d90f4f1a4523d7ac3) --- net/rds/ib.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/net/rds/ib.c b/net/rds/ib.c index 9051b003fa6f..a547962030f7 100644 --- a/net/rds/ib.c +++ b/net/rds/ib.c @@ -525,6 +525,9 @@ static int rds_ib_move_ip(char *from_dev, int ret = 0; u8 active_port; struct in_device *in_dev; + unsigned long flags; + struct rds_ib_connection *ic; + struct rds_ib_device *rds_ibdev; page = alloc_page(GFP_HIGHUSER); if (!page) { @@ -622,29 +625,23 @@ static int rds_ib_move_ip(char *from_dev, "RDS/IB: IP %u.%u.%u.%u migrated from %s to %s\n", NIPQUAD(addr), from_dev2, to_dev2); - if (event_type == RDS_IB_PORT_EVENT_NET) { - unsigned long flags; - struct rds_ib_connection *ic; - struct rds_ib_device *rds_ibdev; - - rds_ibdev = ip_config[to_port].rds_ibdev; - spin_lock_irqsave(&rds_ibdev->spinlock, flags); - list_for_each_entry(ic, &rds_ibdev->conn_list, ib_node) - if (ic->conn->c_laddr == addr) { + rds_ibdev = ip_config[from_port].rds_ibdev; + spin_lock_irqsave(&rds_ibdev->spinlock, flags); + list_for_each_entry(ic, &rds_ibdev->conn_list, ib_node) + if (ic->conn->c_laddr == addr) { #if RDMA_RDS_APM_SUPPORTED - if (rds_ib_apm_enabled) { - if (!memcmp( - &ic->i_cur_path.p_sgid, - &ip_config[to_port].gid, - sizeof(union ib_gid))) { - continue; - } + if (rds_ib_apm_enabled) { + if (!memcmp( + &ic->i_cur_path.p_sgid, + &ip_config[to_port].gid, + sizeof(union ib_gid))) { + continue; } -#endif - rds_conn_drop(ic->conn); } - spin_unlock_irqrestore(&rds_ibdev->spinlock, flags); - } +#endif + rds_conn_drop(ic->conn); + } + spin_unlock_irqrestore(&rds_ibdev->spinlock, flags); } out: -- 2.50.1