.. | .. |
---|
1394 | 1394 | destroy_workqueue(info->workqueue); |
---|
1395 | 1395 | log_rdma_event(INFO, "rdma session destroyed\n"); |
---|
1396 | 1396 | kfree(info); |
---|
| 1397 | + server->smbd_conn = NULL; |
---|
1397 | 1398 | } |
---|
1398 | 1399 | |
---|
1399 | 1400 | /* |
---|
.. | .. |
---|
1690 | 1691 | |
---|
1691 | 1692 | allocate_mr_failed: |
---|
1692 | 1693 | /* At this point, need to a full transport shutdown */ |
---|
| 1694 | + server->smbd_conn = info; |
---|
1693 | 1695 | smbd_destroy(server); |
---|
1694 | 1696 | return NULL; |
---|
1695 | 1697 | |
---|
.. | .. |
---|
2238 | 2240 | atomic_set(&info->mr_ready_count, 0); |
---|
2239 | 2241 | atomic_set(&info->mr_used_count, 0); |
---|
2240 | 2242 | init_waitqueue_head(&info->wait_for_mr_cleanup); |
---|
| 2243 | + INIT_WORK(&info->mr_recovery_work, smbd_mr_recovery_work); |
---|
2241 | 2244 | /* Allocate more MRs (2x) than hardware responder_resources */ |
---|
2242 | 2245 | for (i = 0; i < info->responder_resources * 2; i++) { |
---|
2243 | 2246 | smbdirect_mr = kzalloc(sizeof(*smbdirect_mr), GFP_KERNEL); |
---|
.. | .. |
---|
2265 | 2268 | list_add_tail(&smbdirect_mr->list, &info->mr_list); |
---|
2266 | 2269 | atomic_inc(&info->mr_ready_count); |
---|
2267 | 2270 | } |
---|
2268 | | - INIT_WORK(&info->mr_recovery_work, smbd_mr_recovery_work); |
---|
2269 | 2271 | return 0; |
---|
2270 | 2272 | |
---|
2271 | 2273 | out: |
---|
2272 | 2274 | kfree(smbdirect_mr); |
---|
2273 | 2275 | |
---|
2274 | 2276 | list_for_each_entry_safe(smbdirect_mr, tmp, &info->mr_list, list) { |
---|
| 2277 | + list_del(&smbdirect_mr->list); |
---|
2275 | 2278 | ib_dereg_mr(smbdirect_mr->mr); |
---|
2276 | 2279 | kfree(smbdirect_mr->sgl); |
---|
2277 | 2280 | kfree(smbdirect_mr); |
---|