| .. | .. |
|---|
| 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); |
|---|