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 xa_for_each(&sess->rpc_handle_list, index, entry) { in ksmbd_session_rpc_clear_list()
63 xa_erase(&sess->rpc_handle_list, index); in ksmbd_session_rpc_clear_list()
64 __session_rpc_close(sess, entry); in ksmbd_session_rpc_clear_list()
67 xa_destroy(&sess->rpc_handle_list); in ksmbd_session_rpc_clear_list()
93 struct ksmbd_session_rpc *entry; in ksmbd_session_rpc_open() local
95 int method; in ksmbd_session_rpc_open() local
97 method = __rpc_method(rpc_name); in ksmbd_session_rpc_open()
98 if (!method) in ksmbd_session_rpc_open()
99 return -EINVAL; in ksmbd_session_rpc_open()
101 entry = kzalloc(sizeof(struct ksmbd_session_rpc), GFP_KERNEL); in ksmbd_session_rpc_open()
102 if (!entry) in ksmbd_session_rpc_open()
103 return -ENOMEM; in ksmbd_session_rpc_open()
105 entry->method = method; in ksmbd_session_rpc_open()
106 entry->id = ksmbd_ipc_id_alloc(); in ksmbd_session_rpc_open()
107 if (entry->id < 0) in ksmbd_session_rpc_open()
109 xa_store(&sess->rpc_handle_list, entry->id, entry, GFP_KERNEL); in ksmbd_session_rpc_open()
111 resp = ksmbd_rpc_open(sess, entry->id); in ksmbd_session_rpc_open()
116 return entry->id; in ksmbd_session_rpc_open()
118 xa_erase(&sess->rpc_handle_list, entry->id); in ksmbd_session_rpc_open()
119 ksmbd_rpc_id_free(entry->id); in ksmbd_session_rpc_open()
121 kfree(entry); in ksmbd_session_rpc_open()
122 return -EINVAL; in ksmbd_session_rpc_open()
127 struct ksmbd_session_rpc *entry; in ksmbd_session_rpc_close() local
129 entry = xa_erase(&sess->rpc_handle_list, id); in ksmbd_session_rpc_close()
130 if (entry) in ksmbd_session_rpc_close()
131 __session_rpc_close(sess, entry); in ksmbd_session_rpc_close()
136 struct ksmbd_session_rpc *entry; in ksmbd_session_rpc_method() local
138 entry = xa_load(&sess->rpc_handle_list, id); in ksmbd_session_rpc_method()
139 return entry ? entry->method : 0; in ksmbd_session_rpc_method()
147 if (sess->user) in ksmbd_session_destroy()
148 ksmbd_free_user(sess->user); in ksmbd_session_destroy()
151 ksmbd_destroy_file_table(&sess->file_table); in ksmbd_session_destroy()
154 kfree(sess->Preauth_HashValue); in ksmbd_session_destroy()
155 ksmbd_release_id(&session_ida, sess->id); in ksmbd_session_destroy()
164 if (id == sess->id) { in __session_lookup()
165 sess->last_active = jiffies; in __session_lookup()
177 down_write(&conn->session_lock); in ksmbd_expire_session()
178 xa_for_each(&conn->sessions, id, sess) { in ksmbd_expire_session()
179 if (sess->state != SMB2_SESSION_VALID || in ksmbd_expire_session()
181 sess->last_active + SMB2_SESSION_TIMEOUT)) { in ksmbd_expire_session()
182 xa_erase(&conn->sessions, sess->id); in ksmbd_expire_session()
183 hash_del(&sess->hlist); in ksmbd_expire_session()
188 up_write(&conn->session_lock); in ksmbd_expire_session()
194 sess->dialect = conn->dialect; in ksmbd_session_register()
195 memcpy(sess->ClientGUID, conn->ClientGUID, SMB2_CLIENT_GUID_SIZE); in ksmbd_session_register()
197 return xa_err(xa_store(&conn->sessions, sess->id, sess, GFP_KERNEL)); in ksmbd_session_register()
204 chann = xa_erase(&sess->ksmbd_chann_list, (long)conn); in ksmbd_chann_del()
206 return -ENOENT; in ksmbd_chann_del()
218 if (conn->binding) { in ksmbd_sessions_deregister()
224 xa_empty(&sess->ksmbd_chann_list)) { in ksmbd_sessions_deregister()
225 hash_del(&sess->hlist); in ksmbd_sessions_deregister()
232 down_write(&conn->session_lock); in ksmbd_sessions_deregister()
233 xa_for_each(&conn->sessions, id, sess) { in ksmbd_sessions_deregister()
237 xa_for_each(&sess->ksmbd_chann_list, chann_id, chann) { in ksmbd_sessions_deregister()
238 if (chann->conn != conn) in ksmbd_sessions_deregister()
239 ksmbd_conn_set_exiting(chann->conn); in ksmbd_sessions_deregister()
243 if (xa_empty(&sess->ksmbd_chann_list)) { in ksmbd_sessions_deregister()
244 xa_erase(&conn->sessions, sess->id); in ksmbd_sessions_deregister()
245 hash_del(&sess->hlist); in ksmbd_sessions_deregister()
249 up_write(&conn->session_lock); in ksmbd_sessions_deregister()
257 down_read(&conn->session_lock); in ksmbd_session_lookup()
258 sess = xa_load(&conn->sessions, id); in ksmbd_session_lookup()
260 sess->last_active = jiffies; in ksmbd_session_lookup()
261 up_read(&conn->session_lock); in ksmbd_session_lookup()
272 sess->last_active = jiffies; in ksmbd_session_lookup_slowpath()
284 if (!sess && conn->binding) in ksmbd_session_lookup_all()
286 if (sess && sess->state != SMB2_SESSION_VALID) in ksmbd_session_lookup_all()
300 sess->id = sess_id; in ksmbd_preauth_session_alloc()
301 memcpy(sess->Preauth_HashValue, conn->preauth_info->Preauth_HashValue, in ksmbd_preauth_session_alloc()
303 list_add(&sess->preauth_entry, &conn->preauth_sess_table); in ksmbd_preauth_session_alloc()
311 return sess->id == id; in ksmbd_preauth_session_id_match()
319 list_for_each_entry(sess, &conn->preauth_sess_table, preauth_entry) { in ksmbd_preauth_session_lookup()
331 return -EINVAL; in __init_smb2_session()
332 sess->id = id; in __init_smb2_session()
348 if (ksmbd_init_file_table(&sess->file_table)) in __session_create()
351 sess->last_active = jiffies; in __session_create()
352 sess->state = SMB2_SESSION_IN_PROGRESS; in __session_create()
354 xa_init(&sess->tree_conns); in __session_create()
355 xa_init(&sess->ksmbd_chann_list); in __session_create()
356 xa_init(&sess->rpc_handle_list); in __session_create()
357 sess->sequence_number = 1; in __session_create()
358 rwlock_init(&sess->tree_conns_lock); in __session_create()
364 ida_init(&sess->tree_conn_ida); in __session_create()
367 hash_add(sessions_table, &sess->hlist, sess->id); in __session_create()
384 int id = -EINVAL; in ksmbd_acquire_tree_conn_id()
387 id = ksmbd_acquire_smb2_tid(&sess->tree_conn_ida); in ksmbd_acquire_tree_conn_id()
395 ksmbd_release_id(&sess->tree_conn_ida, id); in ksmbd_release_tree_conn_id()