Lines Matching refs:srv
111 struct rtrs_srv *srv = sess->srv; in rtrs_srv_free_ops_ids() local
115 for (i = 0; i < srv->queue_depth; i++) in rtrs_srv_free_ops_ids()
138 struct rtrs_srv *srv = sess->srv; in rtrs_srv_alloc_ops_ids() local
142 sess->ops_ids = kcalloc(srv->queue_depth, sizeof(*sess->ops_ids), in rtrs_srv_alloc_ops_ids()
147 for (i = 0; i < srv->queue_depth; ++i) { in rtrs_srv_alloc_ops_ids()
541 void rtrs_srv_set_sess_priv(struct rtrs_srv *srv, void *priv) in rtrs_srv_set_sess_priv() argument
543 srv->priv = priv; in rtrs_srv_set_sess_priv()
566 struct rtrs_srv *srv = sess->srv; in map_cont_bufs() local
581 mrs_num = srv->queue_depth; in map_cont_bufs()
585 mrs_num = DIV_ROUND_UP(srv->queue_depth, chunks_per_mr); in map_cont_bufs()
586 chunks_per_mr = DIV_ROUND_UP(srv->queue_depth, mrs_num); in map_cont_bufs()
605 srv->queue_depth - chunks); in map_cont_bufs()
612 sg_set_page(s, srv->chunks[chunks + i], in map_cont_bufs()
672 chunk_bits = ilog2(srv->queue_depth - 1) + 1; in map_cont_bufs()
723 struct rtrs_srv *srv = sess->srv; in rtrs_srv_sess_up() local
724 struct rtrs_srv_ctx *ctx = srv->ctx; in rtrs_srv_sess_up()
727 mutex_lock(&srv->paths_ev_mutex); in rtrs_srv_sess_up()
728 up = ++srv->paths_up; in rtrs_srv_sess_up()
730 ctx->ops.link_ev(srv, RTRS_SRV_LINK_EV_CONNECTED, NULL); in rtrs_srv_sess_up()
731 mutex_unlock(&srv->paths_ev_mutex); in rtrs_srv_sess_up()
739 struct rtrs_srv *srv = sess->srv; in rtrs_srv_sess_down() local
740 struct rtrs_srv_ctx *ctx = srv->ctx; in rtrs_srv_sess_down()
746 mutex_lock(&srv->paths_ev_mutex); in rtrs_srv_sess_down()
747 WARN_ON(!srv->paths_up); in rtrs_srv_sess_down()
748 if (--srv->paths_up == 0) in rtrs_srv_sess_down()
749 ctx->ops.link_ev(srv, RTRS_SRV_LINK_EV_DISCONNECTED, srv->priv); in rtrs_srv_sess_down()
750 mutex_unlock(&srv->paths_ev_mutex); in rtrs_srv_sess_down()
756 struct rtrs_srv *srv; in exist_sessname() local
761 list_for_each_entry(srv, &ctx->srv_list, ctx_list) { in exist_sessname()
762 mutex_lock(&srv->paths_mutex); in exist_sessname()
765 if (uuid_equal(&srv->paths_uuid, path_uuid)) { in exist_sessname()
766 mutex_unlock(&srv->paths_mutex); in exist_sessname()
770 list_for_each_entry(sess, &srv->paths_list, s.entry) { in exist_sessname()
777 mutex_unlock(&srv->paths_mutex); in exist_sessname()
811 if (exist_sessname(sess->srv->ctx, in process_info_req()
812 msg->sessname, &sess->srv->paths_uuid)) { in process_info_req()
861 get_device(&sess->srv->dev); in process_info_req()
971 struct rtrs_srv *srv = sess->srv; in post_recv_sess() local
980 q_size = srv->queue_depth; in post_recv_sess()
998 struct rtrs_srv *srv = sess->srv; in process_read() local
999 struct rtrs_srv_ctx *ctx = srv->ctx; in process_read()
1026 data = page_address(srv->chunks[buf_id]); in process_read()
1027 ret = ctx->ops.rdma_ev(srv->priv, id, READ, data, data_len, in process_read()
1056 struct rtrs_srv *srv = sess->srv; in process_write() local
1057 struct rtrs_srv_ctx *ctx = srv->ctx; in process_write()
1079 data = page_address(srv->chunks[buf_id]); in process_write()
1080 ret = ctx->ops.rdma_ev(srv->priv, id, WRITE, data, data_len, in process_write()
1142 struct rtrs_srv *srv = sess->srv; in rtrs_srv_inv_rkey_done() local
1153 data = page_address(srv->chunks[msg_id]) + off; in rtrs_srv_inv_rkey_done()
1199 struct rtrs_srv *srv = sess->srv; in rtrs_srv_rdma_done() local
1236 if (msg_id >= srv->queue_depth || off >= max_chunk_size) { in rtrs_srv_rdma_done()
1255 data = page_address(srv->chunks[msg_id]) + off; in rtrs_srv_rdma_done()
1292 int rtrs_srv_get_sess_name(struct rtrs_srv *srv, char *sessname, size_t len) in rtrs_srv_get_sess_name() argument
1297 mutex_lock(&srv->paths_mutex); in rtrs_srv_get_sess_name()
1298 list_for_each_entry(sess, &srv->paths_list, s.entry) { in rtrs_srv_get_sess_name()
1306 mutex_unlock(&srv->paths_mutex); in rtrs_srv_get_sess_name()
1316 int rtrs_srv_get_queue_depth(struct rtrs_srv *srv) in rtrs_srv_get_queue_depth() argument
1318 return srv->queue_depth; in rtrs_srv_get_queue_depth()
1342 struct rtrs_srv *srv = container_of(dev, struct rtrs_srv, dev); in rtrs_srv_dev_release() local
1344 kfree(srv); in rtrs_srv_dev_release()
1347 static void free_srv(struct rtrs_srv *srv) in free_srv() argument
1351 WARN_ON(refcount_read(&srv->refcount)); in free_srv()
1352 for (i = 0; i < srv->queue_depth; i++) in free_srv()
1353 mempool_free(srv->chunks[i], chunk_pool); in free_srv()
1354 kfree(srv->chunks); in free_srv()
1355 mutex_destroy(&srv->paths_mutex); in free_srv()
1356 mutex_destroy(&srv->paths_ev_mutex); in free_srv()
1358 put_device(&srv->dev); in free_srv()
1365 struct rtrs_srv *srv; in get_or_create_srv() local
1369 list_for_each_entry(srv, &ctx->srv_list, ctx_list) { in get_or_create_srv()
1370 if (uuid_equal(&srv->paths_uuid, paths_uuid) && in get_or_create_srv()
1371 refcount_inc_not_zero(&srv->refcount)) { in get_or_create_srv()
1373 return srv; in get_or_create_srv()
1387 srv = kzalloc(sizeof(*srv), GFP_KERNEL); in get_or_create_srv()
1388 if (!srv) in get_or_create_srv()
1391 INIT_LIST_HEAD(&srv->paths_list); in get_or_create_srv()
1392 mutex_init(&srv->paths_mutex); in get_or_create_srv()
1393 mutex_init(&srv->paths_ev_mutex); in get_or_create_srv()
1394 uuid_copy(&srv->paths_uuid, paths_uuid); in get_or_create_srv()
1395 srv->queue_depth = sess_queue_depth; in get_or_create_srv()
1396 srv->ctx = ctx; in get_or_create_srv()
1397 device_initialize(&srv->dev); in get_or_create_srv()
1398 srv->dev.release = rtrs_srv_dev_release; in get_or_create_srv()
1400 srv->chunks = kcalloc(srv->queue_depth, sizeof(*srv->chunks), in get_or_create_srv()
1402 if (!srv->chunks) in get_or_create_srv()
1405 for (i = 0; i < srv->queue_depth; i++) { in get_or_create_srv()
1406 srv->chunks[i] = mempool_alloc(chunk_pool, GFP_KERNEL); in get_or_create_srv()
1407 if (!srv->chunks[i]) in get_or_create_srv()
1410 refcount_set(&srv->refcount, 1); in get_or_create_srv()
1412 list_add(&srv->ctx_list, &ctx->srv_list); in get_or_create_srv()
1415 return srv; in get_or_create_srv()
1419 mempool_free(srv->chunks[i], chunk_pool); in get_or_create_srv()
1420 kfree(srv->chunks); in get_or_create_srv()
1423 kfree(srv); in get_or_create_srv()
1427 static void put_srv(struct rtrs_srv *srv) in put_srv() argument
1429 if (refcount_dec_and_test(&srv->refcount)) { in put_srv()
1430 struct rtrs_srv_ctx *ctx = srv->ctx; in put_srv()
1432 WARN_ON(srv->dev.kobj.state_in_sysfs); in put_srv()
1435 list_del(&srv->ctx_list); in put_srv()
1437 free_srv(srv); in put_srv()
1441 static void __add_path_to_srv(struct rtrs_srv *srv, in __add_path_to_srv() argument
1444 list_add_tail(&sess->s.entry, &srv->paths_list); in __add_path_to_srv()
1445 srv->paths_num++; in __add_path_to_srv()
1446 WARN_ON(srv->paths_num >= MAX_PATHS_NUM); in __add_path_to_srv()
1451 struct rtrs_srv *srv = sess->srv; in del_path_from_srv() local
1453 if (WARN_ON(!srv)) in del_path_from_srv()
1456 mutex_lock(&srv->paths_mutex); in del_path_from_srv()
1458 WARN_ON(!srv->paths_num); in del_path_from_srv()
1459 srv->paths_num--; in del_path_from_srv()
1460 mutex_unlock(&srv->paths_mutex); in del_path_from_srv()
1487 static bool __is_path_w_addr_exists(struct rtrs_srv *srv, in __is_path_w_addr_exists() argument
1492 list_for_each_entry(sess, &srv->paths_list, s.entry) in __is_path_w_addr_exists()
1558 put_srv(sess->srv); in rtrs_srv_close_work()
1559 sess->srv = NULL; in rtrs_srv_close_work()
1570 struct rtrs_srv *srv = sess->srv; in rtrs_rdma_do_accept() local
1584 .queue_depth = cpu_to_le16(srv->queue_depth), in rtrs_rdma_do_accept()
1619 __find_sess(struct rtrs_srv *srv, const uuid_t *sess_uuid) in __find_sess() argument
1623 list_for_each_entry(sess, &srv->paths_list, s.entry) { in __find_sess()
1635 struct rtrs_srv *srv = sess->srv; in create_con() local
1664 s->signal_interval = min_not_zero(srv->queue_depth, in create_con()
1671 srv->queue_depth * (1 + 4) + 1); in create_con()
1675 srv->queue_depth * (1 + 2) + 1); in create_con()
1677 max_recv_wr = srv->queue_depth + 1; in create_con()
1722 static struct rtrs_srv_sess *__alloc_sess(struct rtrs_srv *srv, in __alloc_sess() argument
1733 if (srv->paths_num >= MAX_PATHS_NUM) { in __alloc_sess()
1737 if (__is_path_w_addr_exists(srv, &cm_id->route.addr)) { in __alloc_sess()
1752 sess->dma_addr = kcalloc(srv->queue_depth, sizeof(*sess->dma_addr), in __alloc_sess()
1762 sess->srv = srv; in __alloc_sess()
1794 __add_path_to_srv(srv, sess); in __alloc_sess()
1820 struct rtrs_srv *srv; in rtrs_rdma_connect() local
1853 srv = get_or_create_srv(ctx, &msg->paths_uuid, msg->first_conn); in rtrs_rdma_connect()
1854 if (IS_ERR(srv)) { in rtrs_rdma_connect()
1855 err = PTR_ERR(srv); in rtrs_rdma_connect()
1859 mutex_lock(&srv->paths_mutex); in rtrs_rdma_connect()
1860 sess = __find_sess(srv, &msg->sess_uuid); in rtrs_rdma_connect()
1865 put_srv(srv); in rtrs_rdma_connect()
1870 mutex_unlock(&srv->paths_mutex); in rtrs_rdma_connect()
1879 mutex_unlock(&srv->paths_mutex); in rtrs_rdma_connect()
1885 mutex_unlock(&srv->paths_mutex); in rtrs_rdma_connect()
1889 sess = __alloc_sess(srv, cm_id, con_num, recon_cnt, in rtrs_rdma_connect()
1892 mutex_unlock(&srv->paths_mutex); in rtrs_rdma_connect()
1893 put_srv(srv); in rtrs_rdma_connect()
1923 mutex_unlock(&srv->paths_mutex); in rtrs_rdma_connect()
1931 mutex_unlock(&srv->paths_mutex); in rtrs_rdma_connect()
2179 static void close_sessions(struct rtrs_srv *srv) in close_sessions() argument
2183 mutex_lock(&srv->paths_mutex); in close_sessions()
2184 list_for_each_entry(sess, &srv->paths_list, s.entry) in close_sessions()
2186 mutex_unlock(&srv->paths_mutex); in close_sessions()
2191 struct rtrs_srv *srv; in close_ctx() local
2194 list_for_each_entry(srv, &ctx->srv_list, ctx_list) in close_ctx()
2195 close_sessions(srv); in close_ctx()