Lines Matching refs:new_smc

875 static int smc_clcsock_accept(struct smc_sock *lsmc, struct smc_sock **new_smc)  in smc_clcsock_accept()  argument
887 *new_smc = NULL; in smc_clcsock_accept()
891 *new_smc = smc_sk(new_sk); in smc_clcsock_accept()
907 *new_smc = NULL; in smc_clcsock_accept()
911 (*new_smc)->clcsock = new_clcsock; in smc_clcsock_accept()
1047 static void smc_listen_out(struct smc_sock *new_smc) in smc_listen_out() argument
1049 struct smc_sock *lsmc = new_smc->listen_smc; in smc_listen_out()
1050 struct sock *newsmcsk = &new_smc->sk; in smc_listen_out()
1066 static void smc_listen_out_connected(struct smc_sock *new_smc) in smc_listen_out_connected() argument
1068 struct sock *newsmcsk = &new_smc->sk; in smc_listen_out_connected()
1074 smc_listen_out(new_smc); in smc_listen_out_connected()
1078 static void smc_listen_out_err(struct smc_sock *new_smc) in smc_listen_out_err() argument
1080 struct sock *newsmcsk = &new_smc->sk; in smc_listen_out_err()
1083 sock_put(&new_smc->sk); /* passive closing */ in smc_listen_out_err()
1085 smc_conn_free(&new_smc->conn); in smc_listen_out_err()
1087 smc_listen_out(new_smc); in smc_listen_out_err()
1091 static void smc_listen_decline(struct smc_sock *new_smc, int reason_code, in smc_listen_decline() argument
1096 smc_lgr_forget(new_smc->conn.lgr); in smc_listen_decline()
1098 smc_listen_out_err(new_smc); in smc_listen_decline()
1101 smc_conn_free(&new_smc->conn); in smc_listen_decline()
1102 smc_switch_to_fallback(new_smc); in smc_listen_decline()
1103 new_smc->fallback_rsn = reason_code; in smc_listen_decline()
1105 if (smc_clc_send_decline(new_smc, reason_code) < 0) { in smc_listen_decline()
1106 smc_listen_out_err(new_smc); in smc_listen_decline()
1110 smc_listen_out_connected(new_smc); in smc_listen_decline()
1114 static int smc_listen_prfx_check(struct smc_sock *new_smc, in smc_listen_prfx_check() argument
1118 struct socket *newclcsock = new_smc->clcsock; in smc_listen_prfx_check()
1128 static int smc_listen_rdma_init(struct smc_sock *new_smc, in smc_listen_rdma_init() argument
1134 rc = smc_conn_create(new_smc, ini); in smc_listen_rdma_init()
1139 if (smc_buf_create(new_smc, false)) in smc_listen_rdma_init()
1146 static int smc_listen_ism_init(struct smc_sock *new_smc, in smc_listen_ism_init() argument
1155 rc = smc_conn_create(new_smc, ini); in smc_listen_ism_init()
1160 if (smc_ism_cantalk(new_smc->conn.lgr->peer_gid, in smc_listen_ism_init()
1161 new_smc->conn.lgr->vlan_id, in smc_listen_ism_init()
1162 new_smc->conn.lgr->smcd)) { in smc_listen_ism_init()
1164 smc_lgr_forget(new_smc->conn.lgr); in smc_listen_ism_init()
1165 smc_conn_free(&new_smc->conn); in smc_listen_ism_init()
1170 if (smc_buf_create(new_smc, true)) { in smc_listen_ism_init()
1172 smc_lgr_forget(new_smc->conn.lgr); in smc_listen_ism_init()
1173 smc_conn_free(&new_smc->conn); in smc_listen_ism_init()
1181 static int smc_listen_rdma_reg(struct smc_sock *new_smc, int local_contact) in smc_listen_rdma_reg() argument
1183 struct smc_link *link = &new_smc->conn.lgr->lnk[SMC_SINGLE_LINK]; in smc_listen_rdma_reg()
1186 if (smc_reg_rmb(link, new_smc->conn.rmb_desc, true)) in smc_listen_rdma_reg()
1189 smc_rmb_sync_sg_for_device(&new_smc->conn); in smc_listen_rdma_reg()
1195 static int smc_listen_rdma_finish(struct smc_sock *new_smc, in smc_listen_rdma_finish() argument
1199 struct smc_link *link = &new_smc->conn.lgr->lnk[SMC_SINGLE_LINK]; in smc_listen_rdma_finish()
1205 if (smc_rmb_rtoken_handling(&new_smc->conn, cclc)) { in smc_listen_rdma_finish()
1216 reason_code = smc_serv_conf_first_link(new_smc); in smc_listen_rdma_finish()
1223 smc_listen_decline(new_smc, reason_code, local_contact); in smc_listen_rdma_finish()
1230 struct smc_sock *new_smc = container_of(work, struct smc_sock, in smc_listen_work() local
1232 struct socket *newclcsock = new_smc->clcsock; in smc_listen_work()
1240 if (new_smc->listen_smc->sk.sk_state != SMC_LISTEN) in smc_listen_work()
1241 return smc_listen_out_err(new_smc); in smc_listen_work()
1243 if (new_smc->use_fallback) { in smc_listen_work()
1244 smc_listen_out_connected(new_smc); in smc_listen_work()
1250 smc_switch_to_fallback(new_smc); in smc_listen_work()
1251 new_smc->fallback_rsn = SMC_CLC_DECL_PEERNOSMC; in smc_listen_work()
1252 smc_listen_out_connected(new_smc); in smc_listen_work()
1260 rc = smc_clc_wait_msg(new_smc, pclc, SMC_CLC_MAX_LEN, in smc_listen_work()
1266 if (using_ipsec(new_smc)) { in smc_listen_work()
1272 rc = smc_listen_prfx_check(new_smc, pclc); in smc_listen_work()
1277 if (smc_vlan_by_tcpsk(new_smc->clcsock, &ini)) { in smc_listen_work()
1283 smc_close_init(new_smc); in smc_listen_work()
1284 smc_rx_init(new_smc); in smc_listen_work()
1285 smc_tx_init(new_smc); in smc_listen_work()
1290 rc = smc_find_ism_device(new_smc, &ini); in smc_listen_work()
1292 rc = smc_listen_ism_init(new_smc, pclc, &ini); in smc_listen_work()
1305 rc = smc_find_rdma_device(new_smc, &ini); in smc_listen_work()
1313 rc = smc_listen_rdma_init(new_smc, &ini); in smc_listen_work()
1316 rc = smc_listen_rdma_reg(new_smc, ini.cln_first_contact); in smc_listen_work()
1322 rc = smc_clc_send_accept(new_smc, ini.cln_first_contact); in smc_listen_work()
1331 rc = smc_clc_wait_msg(new_smc, &cclc, sizeof(cclc), in smc_listen_work()
1341 rc = smc_listen_rdma_finish(new_smc, &cclc, in smc_listen_work()
1347 smc_conn_save_peer_info(new_smc, &cclc); in smc_listen_work()
1348 smc_listen_out_connected(new_smc); in smc_listen_work()
1354 smc_listen_decline(new_smc, rc, ini.cln_first_contact); in smc_listen_work()
1362 struct smc_sock *new_smc; in smc_tcp_listen_work() local
1367 rc = smc_clcsock_accept(lsmc, &new_smc); in smc_tcp_listen_work()
1370 if (!new_smc) in smc_tcp_listen_work()
1373 new_smc->listen_smc = lsmc; in smc_tcp_listen_work()
1374 new_smc->use_fallback = lsmc->use_fallback; in smc_tcp_listen_work()
1375 new_smc->fallback_rsn = lsmc->fallback_rsn; in smc_tcp_listen_work()
1377 INIT_WORK(&new_smc->smc_listen_work, smc_listen_work); in smc_tcp_listen_work()
1378 smc_copy_sock_settings_to_smc(new_smc); in smc_tcp_listen_work()
1379 new_smc->sk.sk_sndbuf = lsmc->sk.sk_sndbuf; in smc_tcp_listen_work()
1380 new_smc->sk.sk_rcvbuf = lsmc->sk.sk_rcvbuf; in smc_tcp_listen_work()
1381 sock_hold(&new_smc->sk); /* sock_put in passive closing */ in smc_tcp_listen_work()
1382 if (!schedule_work(&new_smc->smc_listen_work)) in smc_tcp_listen_work()
1383 sock_put(&new_smc->sk); in smc_tcp_listen_work()