Lines Matching refs:sess
31 static void free_channel_list(struct ksmbd_session *sess) in free_channel_list() argument
35 list_for_each_entry_safe(chann, tmp, &sess->ksmbd_chann_list, in free_channel_list()
42 static void __session_rpc_close(struct ksmbd_session *sess, in __session_rpc_close() argument
47 resp = ksmbd_rpc_close(sess, entry->id); in __session_rpc_close()
56 static void ksmbd_session_rpc_clear_list(struct ksmbd_session *sess) in ksmbd_session_rpc_clear_list() argument
60 while (!list_empty(&sess->rpc_handle_list)) { in ksmbd_session_rpc_clear_list()
61 entry = list_entry(sess->rpc_handle_list.next, in ksmbd_session_rpc_clear_list()
66 __session_rpc_close(sess, entry); in ksmbd_session_rpc_clear_list()
91 int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name) in ksmbd_session_rpc_open() argument
105 list_add(&entry->list, &sess->rpc_handle_list); in ksmbd_session_rpc_open()
111 resp = ksmbd_rpc_open(sess, entry->id); in ksmbd_session_rpc_open()
123 void ksmbd_session_rpc_close(struct ksmbd_session *sess, int id) in ksmbd_session_rpc_close() argument
127 list_for_each_entry(entry, &sess->rpc_handle_list, list) { in ksmbd_session_rpc_close()
130 __session_rpc_close(sess, entry); in ksmbd_session_rpc_close()
136 int ksmbd_session_rpc_method(struct ksmbd_session *sess, int id) in ksmbd_session_rpc_method() argument
140 list_for_each_entry(entry, &sess->rpc_handle_list, list) { in ksmbd_session_rpc_method()
147 void ksmbd_session_destroy(struct ksmbd_session *sess) in ksmbd_session_destroy() argument
149 if (!sess) in ksmbd_session_destroy()
152 if (!atomic_dec_and_test(&sess->refcnt)) in ksmbd_session_destroy()
155 list_del(&sess->sessions_entry); in ksmbd_session_destroy()
158 hash_del(&sess->hlist); in ksmbd_session_destroy()
161 if (sess->user) in ksmbd_session_destroy()
162 ksmbd_free_user(sess->user); in ksmbd_session_destroy()
164 ksmbd_tree_conn_session_logoff(sess); in ksmbd_session_destroy()
165 ksmbd_destroy_file_table(&sess->file_table); in ksmbd_session_destroy()
166 ksmbd_session_rpc_clear_list(sess); in ksmbd_session_destroy()
167 free_channel_list(sess); in ksmbd_session_destroy()
168 kfree(sess->Preauth_HashValue); in ksmbd_session_destroy()
169 ksmbd_release_id(&session_ida, sess->id); in ksmbd_session_destroy()
170 kfree(sess); in ksmbd_session_destroy()
175 struct ksmbd_session *sess; in __session_lookup() local
177 hash_for_each_possible(sessions_table, sess, hlist, id) { in __session_lookup()
178 if (id == sess->id) in __session_lookup()
179 return sess; in __session_lookup()
185 struct ksmbd_session *sess) in ksmbd_session_register() argument
187 sess->conn = conn; in ksmbd_session_register()
188 list_add(&sess->sessions_entry, &conn->sessions); in ksmbd_session_register()
193 struct ksmbd_session *sess; in ksmbd_sessions_deregister() local
196 sess = list_entry(conn->sessions.next, in ksmbd_sessions_deregister()
200 ksmbd_session_destroy(sess); in ksmbd_sessions_deregister()
204 static bool ksmbd_session_id_match(struct ksmbd_session *sess, in ksmbd_session_id_match() argument
207 return sess->id == id; in ksmbd_session_id_match()
213 struct ksmbd_session *sess = NULL; in ksmbd_session_lookup() local
215 list_for_each_entry(sess, &conn->sessions, sessions_entry) { in ksmbd_session_lookup()
216 if (ksmbd_session_id_match(sess, id)) in ksmbd_session_lookup()
217 return sess; in ksmbd_session_lookup()
222 int get_session(struct ksmbd_session *sess) in get_session() argument
224 return atomic_inc_not_zero(&sess->refcnt); in get_session()
227 void put_session(struct ksmbd_session *sess) in put_session() argument
229 if (atomic_dec_and_test(&sess->refcnt)) in put_session()
235 struct ksmbd_session *sess; in ksmbd_session_lookup_slowpath() local
238 sess = __session_lookup(id); in ksmbd_session_lookup_slowpath()
239 if (sess) { in ksmbd_session_lookup_slowpath()
240 if (!get_session(sess)) in ksmbd_session_lookup_slowpath()
241 sess = NULL; in ksmbd_session_lookup_slowpath()
245 return sess; in ksmbd_session_lookup_slowpath()
251 struct ksmbd_session *sess; in ksmbd_session_lookup_all() local
253 sess = ksmbd_session_lookup(conn, id); in ksmbd_session_lookup_all()
254 if (!sess && conn->binding) in ksmbd_session_lookup_all()
255 sess = ksmbd_session_lookup_slowpath(id); in ksmbd_session_lookup_all()
256 return sess; in ksmbd_session_lookup_all()
262 struct preauth_session *sess; in ksmbd_preauth_session_alloc() local
264 sess = kmalloc(sizeof(struct preauth_session), GFP_KERNEL); in ksmbd_preauth_session_alloc()
265 if (!sess) in ksmbd_preauth_session_alloc()
268 sess->id = sess_id; in ksmbd_preauth_session_alloc()
269 memcpy(sess->Preauth_HashValue, conn->preauth_info->Preauth_HashValue, in ksmbd_preauth_session_alloc()
271 list_add(&sess->preauth_entry, &conn->preauth_sess_table); in ksmbd_preauth_session_alloc()
273 return sess; in ksmbd_preauth_session_alloc()
276 static bool ksmbd_preauth_session_id_match(struct preauth_session *sess, in ksmbd_preauth_session_id_match() argument
279 return sess->id == id; in ksmbd_preauth_session_id_match()
285 struct preauth_session *sess = NULL; in ksmbd_preauth_session_lookup() local
287 list_for_each_entry(sess, &conn->preauth_sess_table, preauth_entry) { in ksmbd_preauth_session_lookup()
288 if (ksmbd_preauth_session_id_match(sess, id)) in ksmbd_preauth_session_lookup()
289 return sess; in ksmbd_preauth_session_lookup()
294 static int __init_smb2_session(struct ksmbd_session *sess) in __init_smb2_session() argument
300 sess->id = id; in __init_smb2_session()
306 struct ksmbd_session *sess; in __session_create() local
309 sess = kzalloc(sizeof(struct ksmbd_session), GFP_KERNEL); in __session_create()
310 if (!sess) in __session_create()
313 if (ksmbd_init_file_table(&sess->file_table)) in __session_create()
316 set_session_flag(sess, protocol); in __session_create()
317 INIT_LIST_HEAD(&sess->sessions_entry); in __session_create()
318 xa_init(&sess->tree_conns); in __session_create()
319 INIT_LIST_HEAD(&sess->ksmbd_chann_list); in __session_create()
320 INIT_LIST_HEAD(&sess->rpc_handle_list); in __session_create()
321 sess->sequence_number = 1; in __session_create()
322 atomic_set(&sess->refcnt, 1); in __session_create()
326 ret = __init_smb2_session(sess); in __session_create()
336 ida_init(&sess->tree_conn_ida); in __session_create()
340 hash_add(sessions_table, &sess->hlist, sess->id); in __session_create()
343 return sess; in __session_create()
346 ksmbd_session_destroy(sess); in __session_create()
355 int ksmbd_acquire_tree_conn_id(struct ksmbd_session *sess) in ksmbd_acquire_tree_conn_id() argument
359 if (test_session_flag(sess, CIFDS_SESSION_FLAG_SMB2)) in ksmbd_acquire_tree_conn_id()
360 id = ksmbd_acquire_smb2_tid(&sess->tree_conn_ida); in ksmbd_acquire_tree_conn_id()
365 void ksmbd_release_tree_conn_id(struct ksmbd_session *sess, int id) in ksmbd_release_tree_conn_id() argument
368 ksmbd_release_id(&sess->tree_conn_ida, id); in ksmbd_release_tree_conn_id()