From: Bang Nguyen Date: Fri, 7 Jun 2013 00:15:07 +0000 (-0700) Subject: RDS: Move connection along with IP when failing over/back. X-Git-Tag: v4.1.12-92~293^2^2~62 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=e55f472f95c35cff0ec41c72d704ccde38291e9a;p=users%2Fjedix%2Flinux-maple.git 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) --- 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: