Lines Matching +full:entry +full:- +full:method
1 // SPDX-License-Identifier: GPL-2.0-or-later
27 unsigned int method; member
35 xa_for_each(&sess->ksmbd_chann_list, index, chann) { in free_channel_list()
36 xa_erase(&sess->ksmbd_chann_list, index); in free_channel_list()
40 xa_destroy(&sess->ksmbd_chann_list); in free_channel_list()
44 struct ksmbd_session_rpc *entry) in __session_rpc_close() argument
48 resp = ksmbd_rpc_close(sess, entry->id); in __session_rpc_close()
50 pr_err("Unable to close RPC pipe %d\n", entry->id); in __session_rpc_close()
53 ksmbd_rpc_id_free(entry->id); in __session_rpc_close()
54 kfree(entry); in __session_rpc_close()
59 struct ksmbd_session_rpc *entry; in ksmbd_session_rpc_clear_list() local
62 down_write(&sess->rpc_lock); in ksmbd_session_rpc_clear_list()
63 xa_for_each(&sess->rpc_handle_list, index, entry) { in ksmbd_session_rpc_clear_list()
64 xa_erase(&sess->rpc_handle_list, index); in ksmbd_session_rpc_clear_list()
65 __session_rpc_close(sess, entry); in ksmbd_session_rpc_clear_list()
67 up_write(&sess->rpc_lock); in ksmbd_session_rpc_clear_list()
69 xa_destroy(&sess->rpc_handle_list); in ksmbd_session_rpc_clear_list()
95 struct ksmbd_session_rpc *entry, *old; in ksmbd_session_rpc_open() local
97 int method, id; in ksmbd_session_rpc_open() local
99 method = __rpc_method(rpc_name); in ksmbd_session_rpc_open()
100 if (!method) in ksmbd_session_rpc_open()
101 return -EINVAL; in ksmbd_session_rpc_open()
103 entry = kzalloc(sizeof(struct ksmbd_session_rpc), KSMBD_DEFAULT_GFP); in ksmbd_session_rpc_open()
104 if (!entry) in ksmbd_session_rpc_open()
105 return -ENOMEM; in ksmbd_session_rpc_open()
107 down_read(&sess->rpc_lock); in ksmbd_session_rpc_open()
108 entry->method = method; in ksmbd_session_rpc_open()
109 entry->id = id = ksmbd_ipc_id_alloc(); in ksmbd_session_rpc_open()
112 old = xa_store(&sess->rpc_handle_list, id, entry, KSMBD_DEFAULT_GFP); in ksmbd_session_rpc_open()
120 up_read(&sess->rpc_lock); in ksmbd_session_rpc_open()
124 xa_erase(&sess->rpc_handle_list, entry->id); in ksmbd_session_rpc_open()
126 ksmbd_rpc_id_free(entry->id); in ksmbd_session_rpc_open()
128 kfree(entry); in ksmbd_session_rpc_open()
129 up_read(&sess->rpc_lock); in ksmbd_session_rpc_open()
130 return -EINVAL; in ksmbd_session_rpc_open()
135 struct ksmbd_session_rpc *entry; in ksmbd_session_rpc_close() local
137 down_write(&sess->rpc_lock); in ksmbd_session_rpc_close()
138 entry = xa_erase(&sess->rpc_handle_list, id); in ksmbd_session_rpc_close()
139 if (entry) in ksmbd_session_rpc_close()
140 __session_rpc_close(sess, entry); in ksmbd_session_rpc_close()
141 up_write(&sess->rpc_lock); in ksmbd_session_rpc_close()
146 struct ksmbd_session_rpc *entry; in ksmbd_session_rpc_method() local
148 entry = xa_load(&sess->rpc_handle_list, id); in ksmbd_session_rpc_method()
149 return entry ? entry->method : 0; in ksmbd_session_rpc_method()
157 if (sess->user) in ksmbd_session_destroy()
158 ksmbd_free_user(sess->user); in ksmbd_session_destroy()
161 ksmbd_destroy_file_table(&sess->file_table); in ksmbd_session_destroy()
165 kfree(sess->Preauth_HashValue); in ksmbd_session_destroy()
166 ksmbd_release_id(&session_ida, sess->id); in ksmbd_session_destroy()
175 if (id == sess->id) { in __session_lookup()
176 sess->last_active = jiffies; in __session_lookup()
189 down_write(&conn->session_lock); in ksmbd_expire_session()
190 xa_for_each(&conn->sessions, id, sess) { in ksmbd_expire_session()
191 if (atomic_read(&sess->refcnt) <= 1 && in ksmbd_expire_session()
192 (sess->state != SMB2_SESSION_VALID || in ksmbd_expire_session()
194 sess->last_active + SMB2_SESSION_TIMEOUT))) { in ksmbd_expire_session()
195 xa_erase(&conn->sessions, sess->id); in ksmbd_expire_session()
196 hash_del(&sess->hlist); in ksmbd_expire_session()
201 up_write(&conn->session_lock); in ksmbd_expire_session()
208 sess->dialect = conn->dialect; in ksmbd_session_register()
209 memcpy(sess->ClientGUID, conn->ClientGUID, SMB2_CLIENT_GUID_SIZE); in ksmbd_session_register()
211 return xa_err(xa_store(&conn->sessions, sess->id, sess, KSMBD_DEFAULT_GFP)); in ksmbd_session_register()
218 chann = xa_erase(&sess->ksmbd_chann_list, (long)conn); in ksmbd_chann_del()
220 return -ENOENT; in ksmbd_chann_del()
232 if (conn->binding) { in ksmbd_sessions_deregister()
238 xa_empty(&sess->ksmbd_chann_list)) { in ksmbd_sessions_deregister()
239 hash_del(&sess->hlist); in ksmbd_sessions_deregister()
240 down_write(&conn->session_lock); in ksmbd_sessions_deregister()
241 xa_erase(&conn->sessions, sess->id); in ksmbd_sessions_deregister()
242 up_write(&conn->session_lock); in ksmbd_sessions_deregister()
243 if (atomic_dec_and_test(&sess->refcnt)) in ksmbd_sessions_deregister()
249 down_write(&conn->session_lock); in ksmbd_sessions_deregister()
250 xa_for_each(&conn->sessions, id, sess) { in ksmbd_sessions_deregister()
254 xa_for_each(&sess->ksmbd_chann_list, chann_id, chann) { in ksmbd_sessions_deregister()
255 if (chann->conn != conn) in ksmbd_sessions_deregister()
256 ksmbd_conn_set_exiting(chann->conn); in ksmbd_sessions_deregister()
260 if (xa_empty(&sess->ksmbd_chann_list)) { in ksmbd_sessions_deregister()
261 xa_erase(&conn->sessions, sess->id); in ksmbd_sessions_deregister()
262 hash_del(&sess->hlist); in ksmbd_sessions_deregister()
263 if (atomic_dec_and_test(&sess->refcnt)) in ksmbd_sessions_deregister()
267 up_write(&conn->session_lock); in ksmbd_sessions_deregister()
276 down_read(&conn->session_lock); in is_ksmbd_session_in_connection()
277 sess = xa_load(&conn->sessions, id); in is_ksmbd_session_in_connection()
279 up_read(&conn->session_lock); in is_ksmbd_session_in_connection()
282 up_read(&conn->session_lock); in is_ksmbd_session_in_connection()
292 down_read(&conn->session_lock); in ksmbd_session_lookup()
293 sess = xa_load(&conn->sessions, id); in ksmbd_session_lookup()
295 sess->last_active = jiffies; in ksmbd_session_lookup()
298 up_read(&conn->session_lock); in ksmbd_session_lookup()
321 if (!sess && conn->binding) in ksmbd_session_lookup_all()
323 if (sess && sess->state != SMB2_SESSION_VALID) in ksmbd_session_lookup_all()
330 atomic_inc(&sess->refcnt); in ksmbd_user_session_get()
338 if (atomic_read(&sess->refcnt) <= 0) in ksmbd_user_session_put()
340 else if (atomic_dec_and_test(&sess->refcnt)) in ksmbd_user_session_put()
353 sess->id = sess_id; in ksmbd_preauth_session_alloc()
354 memcpy(sess->Preauth_HashValue, conn->preauth_info->Preauth_HashValue, in ksmbd_preauth_session_alloc()
356 list_add(&sess->preauth_entry, &conn->preauth_sess_table); in ksmbd_preauth_session_alloc()
369 down_write(&conn->session_lock); in destroy_previous_session()
371 if (!prev_sess || prev_sess->state == SMB2_SESSION_EXPIRED) in destroy_previous_session()
374 prev_user = prev_sess->user; in destroy_previous_session()
376 strcmp(user->name, prev_user->name) || in destroy_previous_session()
377 user->passkey_sz != prev_user->passkey_sz || in destroy_previous_session()
378 memcmp(user->passkey, prev_user->passkey, user->passkey_sz)) in destroy_previous_session()
388 ksmbd_destroy_file_table(&prev_sess->file_table); in destroy_previous_session()
389 prev_sess->state = SMB2_SESSION_EXPIRED; in destroy_previous_session()
393 up_write(&conn->session_lock); in destroy_previous_session()
400 return sess->id == id; in ksmbd_preauth_session_id_match()
408 list_for_each_entry(sess, &conn->preauth_sess_table, preauth_entry) { in ksmbd_preauth_session_lookup()
420 return -EINVAL; in __init_smb2_session()
421 sess->id = id; in __init_smb2_session()
437 if (ksmbd_init_file_table(&sess->file_table)) in __session_create()
440 sess->last_active = jiffies; in __session_create()
441 sess->state = SMB2_SESSION_IN_PROGRESS; in __session_create()
443 xa_init(&sess->tree_conns); in __session_create()
444 xa_init(&sess->ksmbd_chann_list); in __session_create()
445 xa_init(&sess->rpc_handle_list); in __session_create()
446 sess->sequence_number = 1; in __session_create()
447 rwlock_init(&sess->tree_conns_lock); in __session_create()
448 atomic_set(&sess->refcnt, 2); in __session_create()
449 init_rwsem(&sess->rpc_lock); in __session_create()
455 ida_init(&sess->tree_conn_ida); in __session_create()
458 hash_add(sessions_table, &sess->hlist, sess->id); in __session_create()
475 int id = -EINVAL; in ksmbd_acquire_tree_conn_id()
478 id = ksmbd_acquire_smb2_tid(&sess->tree_conn_ida); in ksmbd_acquire_tree_conn_id()
486 ksmbd_release_id(&sess->tree_conn_ida, id); in ksmbd_release_tree_conn_id()