210 list_splice(&loop_conns, &tmp_list);
211 mutex_exit(&loop_conns_lock);
212
213 RDSV3_FOR_EACH_LIST_NODE_SAFE(lc, _lc, &tmp_list, loop_node) {
214 ASSERT(!lc->conn->c_passive);
215 rdsv3_conn_destroy(lc->conn);
216 }
217
218 list_destroy(&loop_conns);
219 mutex_destroy(&loop_conns_lock);
220
221 RDSV3_DPRINTF4("rdsv3_loop_exit", "Return");
222 }
223
224 /*
225 * This is missing .xmit_* because loop doesn't go through generic
226 * rdsv3_send_xmit() and doesn't call rdsv3_recv_incoming(). .listen_stop and
227 * .laddr_check are missing because transport.c doesn't iterate over
228 * rdsv3_loop_transport.
229 */
230 #ifndef __lock_lint
231 struct rdsv3_transport rdsv3_loop_transport = {
232 .xmit = rdsv3_loop_xmit,
233 .xmit_cong_map = rdsv3_loop_xmit_cong_map,
234 .recv = rdsv3_loop_recv,
235 .conn_alloc = rdsv3_loop_conn_alloc,
236 .conn_free = rdsv3_loop_conn_free,
237 .conn_connect = rdsv3_loop_conn_connect,
238 .conn_shutdown = rdsv3_loop_conn_shutdown,
239 .inc_copy_to_user = rdsv3_message_inc_copy_to_user,
240 .inc_free = rdsv3_loop_inc_free,
241 .t_name = "loopback",
242 };
243 #else
244 struct rdsv3_transport rdsv3_loop_transport;
245 #endif
|
210 list_splice(&loop_conns, &tmp_list);
211 mutex_exit(&loop_conns_lock);
212
213 RDSV3_FOR_EACH_LIST_NODE_SAFE(lc, _lc, &tmp_list, loop_node) {
214 ASSERT(!lc->conn->c_passive);
215 rdsv3_conn_destroy(lc->conn);
216 }
217
218 list_destroy(&loop_conns);
219 mutex_destroy(&loop_conns_lock);
220
221 RDSV3_DPRINTF4("rdsv3_loop_exit", "Return");
222 }
223
224 /*
225 * This is missing .xmit_* because loop doesn't go through generic
226 * rdsv3_send_xmit() and doesn't call rdsv3_recv_incoming(). .listen_stop and
227 * .laddr_check are missing because transport.c doesn't iterate over
228 * rdsv3_loop_transport.
229 */
230 struct rdsv3_transport rdsv3_loop_transport = {
231 .xmit = rdsv3_loop_xmit,
232 .xmit_cong_map = rdsv3_loop_xmit_cong_map,
233 .recv = rdsv3_loop_recv,
234 .conn_alloc = rdsv3_loop_conn_alloc,
235 .conn_free = rdsv3_loop_conn_free,
236 .conn_connect = rdsv3_loop_conn_connect,
237 .conn_shutdown = rdsv3_loop_conn_shutdown,
238 .inc_copy_to_user = rdsv3_message_inc_copy_to_user,
239 .inc_free = rdsv3_loop_inc_free,
240 .t_name = "loopback",
241 };
|