Lines Matching refs:new_smc

1720 static int smc_clcsock_accept(struct smc_sock *lsmc, struct smc_sock **new_smc)
1732 *new_smc = NULL;
1736 *new_smc = smc_sk(new_sk);
1752 *new_smc = NULL;
1773 (*new_smc)->clcsock = new_clcsock;
1908 static void smc_listen_out(struct smc_sock *new_smc)
1910 struct smc_sock *lsmc = new_smc->listen_smc;
1911 struct sock *newsmcsk = &new_smc->sk;
1913 if (tcp_sk(new_smc->clcsock->sk)->syn_smc)
1930 static void smc_listen_out_connected(struct smc_sock *new_smc)
1932 struct sock *newsmcsk = &new_smc->sk;
1937 smc_listen_out(new_smc);
1941 static void smc_listen_out_err(struct smc_sock *new_smc)
1943 struct sock *newsmcsk = &new_smc->sk;
1948 sock_put(&new_smc->sk); /* passive closing */
1951 smc_listen_out(new_smc);
1955 static void smc_listen_decline(struct smc_sock *new_smc, int reason_code,
1959 smc_conn_abort(new_smc, local_first);
1961 smc_switch_to_fallback(new_smc, reason_code)) {
1963 smc_listen_out_err(new_smc);
1967 if (smc_clc_send_decline(new_smc, reason_code, version) < 0) {
1968 smc_listen_out_err(new_smc);
1972 smc_listen_out_connected(new_smc);
1976 static int smc_listen_v2_check(struct smc_sock *new_smc,
2038 static int smc_listen_prfx_check(struct smc_sock *new_smc,
2042 struct socket *newclcsock = new_smc->clcsock;
2054 static int smc_listen_rdma_init(struct smc_sock *new_smc,
2060 rc = smc_conn_create(new_smc, ini);
2065 if (smc_buf_create(new_smc, false)) {
2066 smc_conn_abort(new_smc, ini->first_contact_local);
2074 static int smc_listen_ism_init(struct smc_sock *new_smc,
2079 rc = smc_conn_create(new_smc, ini);
2084 rc = smc_buf_create(new_smc, true);
2086 smc_conn_abort(new_smc, ini->first_contact_local);
2135 static void smc_find_ism_v2_device_serv(struct smc_sock *new_smc,
2186 rc = smc_listen_ism_init(new_smc, ini);
2204 static void smc_find_ism_v1_device_serv(struct smc_sock *new_smc,
2216 rc = smc_find_ism_device(new_smc, ini);
2220 rc = smc_listen_ism_init(new_smc, ini);
2232 static int smc_listen_rdma_reg(struct smc_sock *new_smc, bool local_first)
2234 struct smc_connection *conn = &new_smc->conn;
2250 static void smc_find_rdma_v2_device_serv(struct smc_sock *new_smc,
2270 ini->smcrv2.clc_sk = new_smc->clcsock->sk;
2271 ini->smcrv2.saddr = new_smc->clcsock->sk->sk_rcv_saddr;
2273 rc = smc_find_rdma_device(new_smc, ini);
2283 rc = smc_listen_rdma_init(new_smc, ini);
2285 rc = smc_listen_rdma_reg(new_smc, ini->first_contact_local);
2287 smc_conn_abort(new_smc, ini->first_contact_local);
2300 static int smc_find_rdma_v1_device_serv(struct smc_sock *new_smc,
2313 rc = smc_find_rdma_device(new_smc, ini);
2318 rc = smc_listen_rdma_init(new_smc, ini);
2321 return smc_listen_rdma_reg(new_smc, ini->first_contact_local);
2325 static int smc_listen_find_device(struct smc_sock *new_smc,
2332 smc_find_ism_v2_device_serv(new_smc, pclc, ini);
2337 prfx_rc = smc_listen_prfx_check(new_smc, pclc);
2342 if (smc_vlan_by_tcpsk(new_smc->clcsock, ini))
2347 smc_find_ism_v1_device_serv(new_smc, pclc, ini);
2357 smc_find_rdma_v2_device_serv(new_smc, pclc, ini);
2365 rc = smc_find_rdma_v1_device_serv(new_smc, pclc, ini);
2373 static int smc_listen_rdma_finish(struct smc_sock *new_smc,
2378 struct smc_link *link = new_smc->conn.lnk;
2384 if (smc_rmb_rtoken_handling(&new_smc->conn, link, cclc))
2392 reason_code = smcr_serv_conf_first_link(new_smc);
2401 struct smc_sock *new_smc = container_of(work, struct smc_sock,
2403 struct socket *newclcsock = new_smc->clcsock;
2412 if (new_smc->listen_smc->sk.sk_state != SMC_LISTEN)
2413 return smc_listen_out_err(new_smc);
2415 if (new_smc->use_fallback) {
2416 smc_listen_out_connected(new_smc);
2422 rc = smc_switch_to_fallback(new_smc, SMC_CLC_DECL_PEERNOSMC);
2424 smc_listen_out_err(new_smc);
2426 smc_listen_out_connected(new_smc);
2439 rc = smc_clc_wait_msg(new_smc, pclc, sizeof(*buf),
2448 if (using_ipsec(new_smc)) {
2460 rc = smc_listen_v2_check(new_smc, pclc, ini);
2469 smc_close_init(new_smc);
2470 smc_rx_init(new_smc);
2471 smc_tx_init(new_smc);
2474 rc = smc_listen_find_device(new_smc, pclc, ini);
2480 rc = smc_clc_send_accept(new_smc, ini->first_contact_local,
2492 rc = smc_clc_wait_msg(new_smc, cclc, sizeof(*buf),
2510 smc_conn_save_peer_info_fce(new_smc, cclc);
2514 rc = smc_listen_rdma_finish(new_smc, cclc,
2520 smc_conn_save_peer_info(new_smc, cclc);
2521 smc_listen_out_connected(new_smc);
2528 smc_listen_decline(new_smc, rc, ini ? ini->first_contact_local : 0,
2540 struct smc_sock *new_smc;
2545 rc = smc_clcsock_accept(lsmc, &new_smc);
2548 if (!new_smc)
2551 if (tcp_sk(new_smc->clcsock->sk)->syn_smc)
2554 new_smc->listen_smc = lsmc;
2555 new_smc->use_fallback = lsmc->use_fallback;
2556 new_smc->fallback_rsn = lsmc->fallback_rsn;
2558 INIT_WORK(&new_smc->smc_listen_work, smc_listen_work);
2559 smc_copy_sock_settings_to_smc(new_smc);
2560 sock_hold(&new_smc->sk); /* sock_put in passive closing */
2561 if (!queue_work(smc_hs_wq, &new_smc->smc_listen_work))
2562 sock_put(&new_smc->sk);