If the ip address tables hasn't changed, there is no need to remove
them only to be added back again.
Lets fix it.
Reviewed-by: Ajaykumar Hotchandani <ajaykumar.hotchandani@oracle.com>
Signed-off-by: Santosh Shilimkar <ssantosh@kernel.org>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
        struct rds_ib_device *rds_ibdev_old;
 
        rds_ibdev_old = rds_ib_get_device(ipaddr);
-       if (rds_ibdev_old) {
+       if (!rds_ibdev_old)
+               return rds_ib_add_ipaddr(rds_ibdev, ipaddr);
+
+       if (rds_ibdev_old != rds_ibdev) {
                rds_ib_remove_ipaddr(rds_ibdev_old, ipaddr);
                rds_ib_dev_put(rds_ibdev_old);
+               return rds_ib_add_ipaddr(rds_ibdev, ipaddr);
        }
+       rds_ib_dev_put(rds_ibdev_old);
 
-       return rds_ib_add_ipaddr(rds_ibdev, ipaddr);
+       return 0;
 }
 
 void rds_ib_add_conn(struct rds_ib_device *rds_ibdev, struct rds_connection *conn)