Lines Matching refs:new_smc

1146 static int smc_clcsock_accept(struct smc_sock *lsmc, struct smc_sock **new_smc)
1158 *new_smc = NULL;
1162 *new_smc = smc_sk(new_sk);
1178 *new_smc = NULL;
1186 (*new_smc)->clcsock = new_clcsock;
1309 static void smc_listen_out(struct smc_sock *new_smc)
1311 struct smc_sock *lsmc = new_smc->listen_smc;
1312 struct sock *newsmcsk = &new_smc->sk;
1328 static void smc_listen_out_connected(struct smc_sock *new_smc)
1330 struct sock *newsmcsk = &new_smc->sk;
1335 smc_listen_out(new_smc);
1339 static void smc_listen_out_err(struct smc_sock *new_smc)
1341 struct sock *newsmcsk = &new_smc->sk;
1344 sock_put(&new_smc->sk); /* passive closing */
1347 smc_listen_out(new_smc);
1351 static void smc_listen_decline(struct smc_sock *new_smc, int reason_code,
1356 smc_lgr_cleanup_early(&new_smc->conn);
1358 smc_conn_free(&new_smc->conn);
1360 smc_listen_out_err(new_smc);
1363 smc_switch_to_fallback(new_smc);
1364 new_smc->fallback_rsn = reason_code;
1366 if (smc_clc_send_decline(new_smc, reason_code, version) < 0) {
1367 smc_listen_out_err(new_smc);
1371 smc_listen_out_connected(new_smc);
1375 static int smc_listen_v2_check(struct smc_sock *new_smc,
1416 static int smc_listen_prfx_check(struct smc_sock *new_smc,
1420 struct socket *newclcsock = new_smc->clcsock;
1432 static int smc_listen_rdma_init(struct smc_sock *new_smc,
1438 rc = smc_conn_create(new_smc, ini);
1443 if (smc_buf_create(new_smc, false))
1450 static int smc_listen_ism_init(struct smc_sock *new_smc,
1455 rc = smc_conn_create(new_smc, ini);
1460 rc = smc_buf_create(new_smc, true);
1463 smc_lgr_cleanup_early(&new_smc->conn);
1465 smc_conn_free(&new_smc->conn);
1508 static void smc_find_ism_v2_device_serv(struct smc_sock *new_smc,
1560 if (smc_listen_ism_init(new_smc, ini))
1574 static void smc_find_ism_v1_device_serv(struct smc_sock *new_smc,
1585 if (smc_find_ism_device(new_smc, ini))
1588 if (!smc_listen_ism_init(new_smc, ini))
1597 static int smc_listen_rdma_reg(struct smc_sock *new_smc, bool local_first)
1599 struct smc_connection *conn = &new_smc->conn;
1605 smc_rmb_sync_sg_for_device(&new_smc->conn);
1610 static int smc_find_rdma_v1_device_serv(struct smc_sock *new_smc,
1621 rc = smc_find_rdma_device(new_smc, ini);
1629 rc = smc_listen_rdma_init(new_smc, ini);
1632 return smc_listen_rdma_reg(new_smc, ini->first_contact_local);
1636 static int smc_listen_find_device(struct smc_sock *new_smc,
1643 smc_find_ism_v2_device_serv(new_smc, pclc, ini);
1651 rc = smc_listen_prfx_check(new_smc, pclc);
1656 if (smc_vlan_by_tcpsk(new_smc->clcsock, ini))
1660 smc_find_ism_v1_device_serv(new_smc, pclc, ini);
1668 return smc_find_rdma_v1_device_serv(new_smc, pclc, ini);
1672 static int smc_listen_rdma_finish(struct smc_sock *new_smc,
1676 struct smc_link *link = new_smc->conn.lnk;
1682 if (smc_rmb_rtoken_handling(&new_smc->conn, link, cclc))
1690 reason_code = smcr_serv_conf_first_link(new_smc);
1699 struct smc_sock *new_smc = container_of(work, struct smc_sock,
1702 struct socket *newclcsock = new_smc->clcsock;
1709 if (new_smc->listen_smc->sk.sk_state != SMC_LISTEN)
1710 return smc_listen_out_err(new_smc);
1712 if (new_smc->use_fallback) {
1713 smc_listen_out_connected(new_smc);
1719 smc_switch_to_fallback(new_smc);
1720 new_smc->fallback_rsn = SMC_CLC_DECL_PEERNOSMC;
1721 smc_listen_out_connected(new_smc);
1734 rc = smc_clc_wait_msg(new_smc, pclc, sizeof(*buf),
1741 if (using_ipsec(new_smc)) {
1753 rc = smc_listen_v2_check(new_smc, pclc, ini);
1758 smc_close_init(new_smc);
1759 smc_rx_init(new_smc);
1760 smc_tx_init(new_smc);
1763 rc = smc_listen_find_device(new_smc, pclc, ini);
1768 rc = smc_clc_send_accept(new_smc, ini->first_contact_local,
1780 rc = smc_clc_wait_msg(new_smc, cclc, sizeof(*buf),
1790 rc = smc_listen_rdma_finish(new_smc, cclc,
1796 smc_conn_save_peer_info(new_smc, cclc);
1797 smc_listen_out_connected(new_smc);
1803 smc_listen_decline(new_smc, rc, ini ? ini->first_contact_local : 0,
1815 struct smc_sock *new_smc;
1820 rc = smc_clcsock_accept(lsmc, &new_smc);
1823 if (!new_smc)
1826 new_smc->listen_smc = lsmc;
1827 new_smc->use_fallback = lsmc->use_fallback;
1828 new_smc->fallback_rsn = lsmc->fallback_rsn;
1830 INIT_WORK(&new_smc->smc_listen_work, smc_listen_work);
1831 smc_copy_sock_settings_to_smc(new_smc);
1832 new_smc->sk.sk_sndbuf = lsmc->sk.sk_sndbuf;
1833 new_smc->sk.sk_rcvbuf = lsmc->sk.sk_rcvbuf;
1834 sock_hold(&new_smc->sk); /* sock_put in passive closing */
1835 if (!queue_work(smc_hs_wq, &new_smc->smc_listen_work))
1836 sock_put(&new_smc->sk);