hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/cifs/smbdirect.c
....@@ -1394,6 +1394,7 @@
13941394 destroy_workqueue(info->workqueue);
13951395 log_rdma_event(INFO, "rdma session destroyed\n");
13961396 kfree(info);
1397
+ server->smbd_conn = NULL;
13971398 }
13981399
13991400 /*
....@@ -1690,6 +1691,7 @@
16901691
16911692 allocate_mr_failed:
16921693 /* At this point, need to a full transport shutdown */
1694
+ server->smbd_conn = info;
16931695 smbd_destroy(server);
16941696 return NULL;
16951697
....@@ -2238,6 +2240,7 @@
22382240 atomic_set(&info->mr_ready_count, 0);
22392241 atomic_set(&info->mr_used_count, 0);
22402242 init_waitqueue_head(&info->wait_for_mr_cleanup);
2243
+ INIT_WORK(&info->mr_recovery_work, smbd_mr_recovery_work);
22412244 /* Allocate more MRs (2x) than hardware responder_resources */
22422245 for (i = 0; i < info->responder_resources * 2; i++) {
22432246 smbdirect_mr = kzalloc(sizeof(*smbdirect_mr), GFP_KERNEL);
....@@ -2265,13 +2268,13 @@
22652268 list_add_tail(&smbdirect_mr->list, &info->mr_list);
22662269 atomic_inc(&info->mr_ready_count);
22672270 }
2268
- INIT_WORK(&info->mr_recovery_work, smbd_mr_recovery_work);
22692271 return 0;
22702272
22712273 out:
22722274 kfree(smbdirect_mr);
22732275
22742276 list_for_each_entry_safe(smbdirect_mr, tmp, &info->mr_list, list) {
2277
+ list_del(&smbdirect_mr->list);
22752278 ib_dereg_mr(smbdirect_mr->mr);
22762279 kfree(smbdirect_mr->sgl);
22772280 kfree(smbdirect_mr);