#include <linux/list.h>
#include <linux/slab.h>
#include <linux/rwsem.h>
#include <linux/xarray.h>
#include "ksmbd_ida.h"
#include "user_session.h"
#include "user_config.h"
#include "tree_connect.h"
#include "../transport_ipc.h"
#include "../connection.h"
#include "../vfs_cache.h"
static DEFINE_IDA(session_ida);
#define SESSION_HASH_BITS …
static DEFINE_HASHTABLE(sessions_table, SESSION_HASH_BITS);
static DECLARE_RWSEM(sessions_table_lock);
struct ksmbd_session_rpc { … };
static void free_channel_list(struct ksmbd_session *sess)
{ … }
static void __session_rpc_close(struct ksmbd_session *sess,
struct ksmbd_session_rpc *entry)
{ … }
static void ksmbd_session_rpc_clear_list(struct ksmbd_session *sess)
{ … }
static int __rpc_method(char *rpc_name)
{ … }
int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name)
{ … }
void ksmbd_session_rpc_close(struct ksmbd_session *sess, int id)
{ … }
int ksmbd_session_rpc_method(struct ksmbd_session *sess, int id)
{ … }
void ksmbd_session_destroy(struct ksmbd_session *sess)
{ … }
struct ksmbd_session *__session_lookup(unsigned long long id)
{ … }
static void ksmbd_expire_session(struct ksmbd_conn *conn)
{ … }
int ksmbd_session_register(struct ksmbd_conn *conn,
struct ksmbd_session *sess)
{ … }
static int ksmbd_chann_del(struct ksmbd_conn *conn, struct ksmbd_session *sess)
{ … }
void ksmbd_sessions_deregister(struct ksmbd_conn *conn)
{ … }
struct ksmbd_session *ksmbd_session_lookup(struct ksmbd_conn *conn,
unsigned long long id)
{ … }
struct ksmbd_session *ksmbd_session_lookup_slowpath(unsigned long long id)
{ … }
struct ksmbd_session *ksmbd_session_lookup_all(struct ksmbd_conn *conn,
unsigned long long id)
{ … }
struct preauth_session *ksmbd_preauth_session_alloc(struct ksmbd_conn *conn,
u64 sess_id)
{ … }
void destroy_previous_session(struct ksmbd_conn *conn,
struct ksmbd_user *user, u64 id)
{ … }
static bool ksmbd_preauth_session_id_match(struct preauth_session *sess,
unsigned long long id)
{ … }
struct preauth_session *ksmbd_preauth_session_lookup(struct ksmbd_conn *conn,
unsigned long long id)
{ … }
static int __init_smb2_session(struct ksmbd_session *sess)
{ … }
static struct ksmbd_session *__session_create(int protocol)
{ … }
struct ksmbd_session *ksmbd_smb2_session_create(void)
{ … }
int ksmbd_acquire_tree_conn_id(struct ksmbd_session *sess)
{ … }
void ksmbd_release_tree_conn_id(struct ksmbd_session *sess, int id)
{ … }