|
@@ -151,12 +151,17 @@ int rds_ib_update_ipaddr(struct rds_ib_device *rds_ibdev, __be32 ipaddr)
|
|
struct rds_ib_device *rds_ibdev_old;
|
|
struct rds_ib_device *rds_ibdev_old;
|
|
|
|
|
|
rds_ibdev_old = rds_ib_get_device(ipaddr);
|
|
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_remove_ipaddr(rds_ibdev_old, ipaddr);
|
|
rds_ib_dev_put(rds_ibdev_old);
|
|
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)
|
|
void rds_ib_add_conn(struct rds_ib_device *rds_ibdev, struct rds_connection *conn)
|