diff options
Diffstat (limited to 'net/rds/iw_rdma.c')
| -rw-r--r-- | net/rds/iw_rdma.c | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/net/rds/iw_rdma.c b/net/rds/iw_rdma.c index 1c02a8f952d..dcdb37da80f 100644 --- a/net/rds/iw_rdma.c +++ b/net/rds/iw_rdma.c | |||
| @@ -196,7 +196,7 @@ int rds_iw_update_cm_id(struct rds_iw_device *rds_iwdev, struct rdma_cm_id *cm_i | |||
| 196 | return rds_iw_add_cm_id(rds_iwdev, cm_id); | 196 | return rds_iw_add_cm_id(rds_iwdev, cm_id); |
| 197 | } | 197 | } |
| 198 | 198 | ||
| 199 | int rds_iw_add_conn(struct rds_iw_device *rds_iwdev, struct rds_connection *conn) | 199 | void rds_iw_add_conn(struct rds_iw_device *rds_iwdev, struct rds_connection *conn) |
| 200 | { | 200 | { |
| 201 | struct rds_iw_connection *ic = conn->c_transport_data; | 201 | struct rds_iw_connection *ic = conn->c_transport_data; |
| 202 | 202 | ||
| @@ -205,45 +205,45 @@ int rds_iw_add_conn(struct rds_iw_device *rds_iwdev, struct rds_connection *conn | |||
| 205 | BUG_ON(list_empty(&iw_nodev_conns)); | 205 | BUG_ON(list_empty(&iw_nodev_conns)); |
| 206 | BUG_ON(list_empty(&ic->iw_node)); | 206 | BUG_ON(list_empty(&ic->iw_node)); |
| 207 | list_del(&ic->iw_node); | 207 | list_del(&ic->iw_node); |
| 208 | spin_unlock_irq(&iw_nodev_conns_lock); | ||
| 209 | 208 | ||
| 210 | spin_lock_irq(&rds_iwdev->spinlock); | 209 | spin_lock_irq(&rds_iwdev->spinlock); |
| 211 | list_add_tail(&ic->iw_node, &rds_iwdev->conn_list); | 210 | list_add_tail(&ic->iw_node, &rds_iwdev->conn_list); |
| 212 | spin_unlock_irq(&rds_iwdev->spinlock); | 211 | spin_unlock_irq(&rds_iwdev->spinlock); |
| 212 | spin_unlock_irq(&iw_nodev_conns_lock); | ||
| 213 | 213 | ||
| 214 | ic->rds_iwdev = rds_iwdev; | 214 | ic->rds_iwdev = rds_iwdev; |
| 215 | |||
| 216 | return 0; | ||
| 217 | } | 215 | } |
| 218 | 216 | ||
| 219 | void rds_iw_remove_nodev_conns(void) | 217 | void rds_iw_remove_conn(struct rds_iw_device *rds_iwdev, struct rds_connection *conn) |
| 220 | { | 218 | { |
| 221 | struct rds_iw_connection *ic, *_ic; | 219 | struct rds_iw_connection *ic = conn->c_transport_data; |
| 222 | LIST_HEAD(tmp_list); | ||
| 223 | 220 | ||
| 224 | /* avoid calling conn_destroy with irqs off */ | 221 | /* place conn on nodev_conns_list */ |
| 225 | spin_lock_irq(&iw_nodev_conns_lock); | 222 | spin_lock(&iw_nodev_conns_lock); |
| 226 | list_splice(&iw_nodev_conns, &tmp_list); | ||
| 227 | INIT_LIST_HEAD(&iw_nodev_conns); | ||
| 228 | spin_unlock_irq(&iw_nodev_conns_lock); | ||
| 229 | 223 | ||
| 230 | list_for_each_entry_safe(ic, _ic, &tmp_list, iw_node) { | 224 | spin_lock_irq(&rds_iwdev->spinlock); |
| 231 | if (ic->conn->c_passive) | 225 | BUG_ON(list_empty(&ic->iw_node)); |
| 232 | rds_conn_destroy(ic->conn->c_passive); | 226 | list_del(&ic->iw_node); |
| 233 | rds_conn_destroy(ic->conn); | 227 | spin_unlock_irq(&rds_iwdev->spinlock); |
| 234 | } | 228 | |
| 229 | list_add_tail(&ic->iw_node, &iw_nodev_conns); | ||
| 230 | |||
| 231 | spin_unlock(&iw_nodev_conns_lock); | ||
| 232 | |||
| 233 | rds_iw_remove_cm_id(ic->rds_iwdev, ic->i_cm_id); | ||
| 234 | ic->rds_iwdev = NULL; | ||
| 235 | } | 235 | } |
| 236 | 236 | ||
| 237 | void rds_iw_remove_conns(struct rds_iw_device *rds_iwdev) | 237 | void __rds_iw_destroy_conns(struct list_head *list, spinlock_t *list_lock) |
| 238 | { | 238 | { |
| 239 | struct rds_iw_connection *ic, *_ic; | 239 | struct rds_iw_connection *ic, *_ic; |
| 240 | LIST_HEAD(tmp_list); | 240 | LIST_HEAD(tmp_list); |
| 241 | 241 | ||
| 242 | /* avoid calling conn_destroy with irqs off */ | 242 | /* avoid calling conn_destroy with irqs off */ |
| 243 | spin_lock_irq(&rds_iwdev->spinlock); | 243 | spin_lock_irq(list_lock); |
| 244 | list_splice(&rds_iwdev->conn_list, &tmp_list); | 244 | list_splice(list, &tmp_list); |
| 245 | INIT_LIST_HEAD(&rds_iwdev->conn_list); | 245 | INIT_LIST_HEAD(list); |
| 246 | spin_unlock_irq(&rds_iwdev->spinlock); | 246 | spin_unlock_irq(list_lock); |
| 247 | 247 | ||
| 248 | list_for_each_entry_safe(ic, _ic, &tmp_list, iw_node) { | 248 | list_for_each_entry_safe(ic, _ic, &tmp_list, iw_node) { |
| 249 | if (ic->conn->c_passive) | 249 | if (ic->conn->c_passive) |
