hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/infiniband/ulp/isert/ib_isert.c
....@@ -656,9 +656,13 @@
656656 isert_connect_error(struct rdma_cm_id *cma_id)
657657 {
658658 struct isert_conn *isert_conn = cma_id->qp->qp_context;
659
+ struct isert_np *isert_np = cma_id->context;
659660
660661 ib_drain_qp(isert_conn->qp);
662
+
663
+ mutex_lock(&isert_np->mutex);
661664 list_del_init(&isert_conn->node);
665
+ mutex_unlock(&isert_np->mutex);
662666 isert_conn->cm_id = NULL;
663667 isert_put_conn(isert_conn);
664668
....@@ -1553,12 +1557,12 @@
15531557 }
15541558 sec_offset_err = mr_status.sig_err.sig_err_offset;
15551559 do_div(sec_offset_err, block_size);
1556
- se_cmd->bad_sector = sec_offset_err + se_cmd->t_task_lba;
1560
+ se_cmd->sense_info = sec_offset_err + se_cmd->t_task_lba;
15571561
15581562 isert_err("PI error found type %d at sector 0x%llx "
15591563 "expected 0x%x vs actual 0x%x\n",
15601564 mr_status.sig_err.err_type,
1561
- (unsigned long long)se_cmd->bad_sector,
1565
+ (unsigned long long)se_cmd->sense_info,
15621566 mr_status.sig_err.expected,
15631567 mr_status.sig_err.actual);
15641568 ret = 1;
....@@ -2421,6 +2425,7 @@
24212425 {
24222426 struct isert_np *isert_np = np->np_context;
24232427 struct isert_conn *isert_conn, *n;
2428
+ LIST_HEAD(drop_conn_list);
24242429
24252430 if (isert_np->cm_id)
24262431 rdma_destroy_id(isert_np->cm_id);
....@@ -2440,7 +2445,7 @@
24402445 node) {
24412446 isert_info("cleaning isert_conn %p state (%d)\n",
24422447 isert_conn, isert_conn->state);
2443
- isert_connect_release(isert_conn);
2448
+ list_move_tail(&isert_conn->node, &drop_conn_list);
24442449 }
24452450 }
24462451
....@@ -2451,11 +2456,16 @@
24512456 node) {
24522457 isert_info("cleaning isert_conn %p state (%d)\n",
24532458 isert_conn, isert_conn->state);
2454
- isert_connect_release(isert_conn);
2459
+ list_move_tail(&isert_conn->node, &drop_conn_list);
24552460 }
24562461 }
24572462 mutex_unlock(&isert_np->mutex);
24582463
2464
+ list_for_each_entry_safe(isert_conn, n, &drop_conn_list, node) {
2465
+ list_del_init(&isert_conn->node);
2466
+ isert_connect_release(isert_conn);
2467
+ }
2468
+
24592469 np->np_context = NULL;
24602470 kfree(isert_np);
24612471 }