Lines Matching refs:srv_sess
100 rnbd_get_sess_dev(int dev_id, struct rnbd_srv_session *srv_sess) in rnbd_get_sess_dev() argument
106 sess_dev = xa_load(&srv_sess->index_idr, dev_id); in rnbd_get_sess_dev()
118 struct rnbd_srv_session *srv_sess, in process_rdma() argument
137 sess_dev = rnbd_get_sess_dev(dev_id, srv_sess); in process_rdma()
140 srv_sess->sessname, dev_id); in process_rdma()
165 prio = srv_sess->ver < RNBD_PROTO_VER_MAJOR || in process_rdma()
239 static void destroy_sess(struct rnbd_srv_session *srv_sess) in destroy_sess() argument
243 if (list_empty(&srv_sess->sess_dev_list)) in destroy_sess()
246 mutex_lock(&srv_sess->lock); in destroy_sess()
247 list_for_each_entry_safe(sess_dev, tmp, &srv_sess->sess_dev_list, in destroy_sess()
250 mutex_unlock(&srv_sess->lock); in destroy_sess()
253 xa_destroy(&srv_sess->index_idr); in destroy_sess()
254 bioset_exit(&srv_sess->sess_bio_set); in destroy_sess()
256 pr_info("RTRS Session %s disconnected\n", srv_sess->sessname); in destroy_sess()
259 list_del(&srv_sess->list); in destroy_sess()
262 mutex_destroy(&srv_sess->lock); in destroy_sess()
263 kfree(srv_sess); in destroy_sess()
268 struct rnbd_srv_session *srv_sess; in create_sess() local
278 srv_sess = kzalloc(sizeof(*srv_sess), GFP_KERNEL); in create_sess()
279 if (!srv_sess) in create_sess()
282 srv_sess->queue_depth = rtrs_srv_get_queue_depth(rtrs); in create_sess()
283 err = bioset_init(&srv_sess->sess_bio_set, srv_sess->queue_depth, in create_sess()
289 kfree(srv_sess); in create_sess()
293 xa_init_flags(&srv_sess->index_idr, XA_FLAGS_ALLOC); in create_sess()
294 INIT_LIST_HEAD(&srv_sess->sess_dev_list); in create_sess()
295 mutex_init(&srv_sess->lock); in create_sess()
297 list_add(&srv_sess->list, &sess_list); in create_sess()
300 srv_sess->rtrs = rtrs; in create_sess()
301 strlcpy(srv_sess->sessname, sessname, sizeof(srv_sess->sessname)); in create_sess()
303 rtrs_srv_set_sess_priv(rtrs, srv_sess); in create_sess()
311 struct rnbd_srv_session *srv_sess = priv; in rnbd_srv_link_ev() local
318 if (WARN_ON_ONCE(!srv_sess)) in rnbd_srv_link_ev()
321 destroy_sess(srv_sess); in rnbd_srv_link_ev()
326 ev, srv_sess->sessname); in rnbd_srv_link_ev()
332 struct rnbd_srv_session *srv_sess, in process_msg_close() argument
340 srv_sess); in process_msg_close()
345 mutex_lock(&srv_sess->lock); in process_msg_close()
347 mutex_unlock(&srv_sess->lock); in process_msg_close()
352 struct rnbd_srv_session *srv_sess,
357 struct rnbd_srv_session *srv_sess,
366 struct rnbd_srv_session *srv_sess = priv; in rnbd_srv_rdma_ev() local
371 if (WARN_ON_ONCE(!srv_sess)) in rnbd_srv_rdma_ev()
378 return process_rdma(rtrs, srv_sess, id, data, datalen, usr, in rnbd_srv_rdma_ev()
381 ret = process_msg_close(rtrs, srv_sess, data, datalen, in rnbd_srv_rdma_ev()
385 ret = process_msg_open(rtrs, srv_sess, usr, usrlen, in rnbd_srv_rdma_ev()
389 ret = process_msg_sess_info(rtrs, srv_sess, usr, usrlen, in rnbd_srv_rdma_ev()
394 type, dir, srv_sess->sessname); in rnbd_srv_rdma_ev()
403 *rnbd_sess_dev_alloc(struct rnbd_srv_session *srv_sess) in rnbd_sess_dev_alloc() argument
412 error = xa_alloc(&srv_sess->index_idr, &sess_dev->device_id, sess_dev, in rnbd_sess_dev_alloc()
464 struct rnbd_srv_session *srv_sess, in rnbd_srv_check_update_open_perm() argument
481 srv_dev->id, srv_sess->sessname, in rnbd_srv_check_update_open_perm()
492 srv_dev->id, srv_sess->sessname, in rnbd_srv_check_update_open_perm()
499 srv_dev->id, srv_sess->sessname, access_mode); in rnbd_srv_check_update_open_perm()
510 struct rnbd_srv_session *srv_sess, in rnbd_srv_get_or_create_srv_dev() argument
524 ret = rnbd_srv_check_update_open_perm(dev, srv_sess, access_mode); in rnbd_srv_get_or_create_srv_dev()
566 rnbd_srv_create_set_sess_dev(struct rnbd_srv_session *srv_sess, in rnbd_srv_create_set_sess_dev() argument
571 struct rnbd_srv_sess_dev *sdev = rnbd_sess_dev_alloc(srv_sess); in rnbd_srv_create_set_sess_dev()
581 sdev->sess = srv_sess; in rnbd_srv_create_set_sess_dev()
589 static char *rnbd_srv_get_full_path(struct rnbd_srv_session *srv_sess, in rnbd_srv_get_full_path() argument
608 dev_search_path, srv_sess->sessname, dev_name); in rnbd_srv_get_full_path()
611 dev_search_path, srv_sess->sessname, dev_name); in rnbd_srv_get_full_path()
639 struct rnbd_srv_session *srv_sess, in process_msg_sess_info() argument
646 srv_sess->ver = min_t(u8, sess_info_msg->ver, RNBD_PROTO_VER_MAJOR); in process_msg_sess_info()
648 srv_sess->sessname, srv_sess->ver, in process_msg_sess_info()
652 rsp->ver = srv_sess->ver; in process_msg_sess_info()
666 find_srv_sess_dev(struct rnbd_srv_session *srv_sess, const char *dev_name) in find_srv_sess_dev() argument
670 if (list_empty(&srv_sess->sess_dev_list)) in find_srv_sess_dev()
673 list_for_each_entry(sess_dev, &srv_sess->sess_dev_list, sess_list) in find_srv_sess_dev()
681 struct rnbd_srv_session *srv_sess, in process_msg_open() argument
695 srv_sess->sessname, open_msg->dev_name, in process_msg_open()
701 mutex_lock(&srv_sess->lock); in process_msg_open()
703 srv_sess_dev = find_srv_sess_dev(srv_sess, open_msg->dev_name); in process_msg_open()
710 srv_sess->sessname, dev_search_path, open_msg->dev_name, in process_msg_open()
717 srv_sess->sessname, open_msg->dev_name); in process_msg_open()
721 full_path = rnbd_srv_get_full_path(srv_sess, open_msg->dev_name); in process_msg_open()
725 open_msg->dev_name, srv_sess->sessname, ret); in process_msg_open()
730 &srv_sess->sess_bio_set); in process_msg_open()
733 full_path, srv_sess->sessname, PTR_ERR(rnbd_dev)); in process_msg_open()
738 srv_dev = rnbd_srv_get_or_create_srv_dev(rnbd_dev, srv_sess, in process_msg_open()
742 full_path, srv_sess->sessname, PTR_ERR(srv_dev)); in process_msg_open()
747 srv_sess_dev = rnbd_srv_create_set_sess_dev(srv_sess, open_msg, in process_msg_open()
752 full_path, srv_sess->sessname, PTR_ERR(srv_sess_dev)); in process_msg_open()
786 list_add(&srv_sess_dev->sess_list, &srv_sess->sess_dev_list); in process_msg_open()
794 mutex_unlock(&srv_sess->lock); in process_msg_open()
798 xa_erase(&srv_sess->index_idr, srv_sess_dev->device_id); in process_msg_open()
813 mutex_unlock(&srv_sess->lock); in process_msg_open()