Lines Matching refs:conn
33 void ksmbd_conn_free(struct ksmbd_conn *conn) in ksmbd_conn_free() argument
36 list_del(&conn->conns_list); in ksmbd_conn_free()
39 kvfree(conn->request_buf); in ksmbd_conn_free()
40 kfree(conn->preauth_info); in ksmbd_conn_free()
41 kfree(conn); in ksmbd_conn_free()
51 struct ksmbd_conn *conn; in ksmbd_conn_alloc() local
53 conn = kzalloc(sizeof(struct ksmbd_conn), GFP_KERNEL); in ksmbd_conn_alloc()
54 if (!conn) in ksmbd_conn_alloc()
57 conn->need_neg = true; in ksmbd_conn_alloc()
58 conn->status = KSMBD_SESS_NEW; in ksmbd_conn_alloc()
59 conn->local_nls = load_nls("utf8"); in ksmbd_conn_alloc()
60 if (!conn->local_nls) in ksmbd_conn_alloc()
61 conn->local_nls = load_nls_default(); in ksmbd_conn_alloc()
62 atomic_set(&conn->req_running, 0); in ksmbd_conn_alloc()
63 atomic_set(&conn->r_count, 0); in ksmbd_conn_alloc()
64 conn->total_credits = 1; in ksmbd_conn_alloc()
66 init_waitqueue_head(&conn->req_running_q); in ksmbd_conn_alloc()
67 INIT_LIST_HEAD(&conn->conns_list); in ksmbd_conn_alloc()
68 INIT_LIST_HEAD(&conn->sessions); in ksmbd_conn_alloc()
69 INIT_LIST_HEAD(&conn->requests); in ksmbd_conn_alloc()
70 INIT_LIST_HEAD(&conn->async_requests); in ksmbd_conn_alloc()
71 spin_lock_init(&conn->request_lock); in ksmbd_conn_alloc()
72 spin_lock_init(&conn->credits_lock); in ksmbd_conn_alloc()
73 ida_init(&conn->async_ida); in ksmbd_conn_alloc()
75 spin_lock_init(&conn->llist_lock); in ksmbd_conn_alloc()
76 INIT_LIST_HEAD(&conn->lock_list); in ksmbd_conn_alloc()
79 list_add(&conn->conns_list, &conn_list); in ksmbd_conn_alloc()
81 return conn; in ksmbd_conn_alloc()
103 struct ksmbd_conn *conn = work->conn; in ksmbd_conn_enqueue_request() local
106 if (conn->ops->get_cmd_val(work) != SMB2_CANCEL_HE) { in ksmbd_conn_enqueue_request()
107 requests_queue = &conn->requests; in ksmbd_conn_enqueue_request()
112 atomic_inc(&conn->req_running); in ksmbd_conn_enqueue_request()
113 spin_lock(&conn->request_lock); in ksmbd_conn_enqueue_request()
115 spin_unlock(&conn->request_lock); in ksmbd_conn_enqueue_request()
121 struct ksmbd_conn *conn = work->conn; in ksmbd_conn_try_dequeue_request() local
129 atomic_dec(&conn->req_running); in ksmbd_conn_try_dequeue_request()
130 spin_lock(&conn->request_lock); in ksmbd_conn_try_dequeue_request()
137 spin_unlock(&conn->request_lock); in ksmbd_conn_try_dequeue_request()
139 wake_up_all(&conn->req_running_q); in ksmbd_conn_try_dequeue_request()
143 static void ksmbd_conn_lock(struct ksmbd_conn *conn) in ksmbd_conn_lock() argument
145 mutex_lock(&conn->srv_mutex); in ksmbd_conn_lock()
148 static void ksmbd_conn_unlock(struct ksmbd_conn *conn) in ksmbd_conn_unlock() argument
150 mutex_unlock(&conn->srv_mutex); in ksmbd_conn_unlock()
153 void ksmbd_conn_wait_idle(struct ksmbd_conn *conn) in ksmbd_conn_wait_idle() argument
155 wait_event(conn->req_running_q, atomic_read(&conn->req_running) < 2); in ksmbd_conn_wait_idle()
160 struct ksmbd_conn *conn = work->conn; in ksmbd_conn_write() local
192 ksmbd_conn_lock(conn); in ksmbd_conn_write()
193 sent = conn->transport->ops->writev(conn->transport, &iov[0], in ksmbd_conn_write()
197 ksmbd_conn_unlock(conn); in ksmbd_conn_write()
207 int ksmbd_conn_rdma_read(struct ksmbd_conn *conn, void *buf, in ksmbd_conn_rdma_read() argument
213 if (conn->transport->ops->rdma_read) in ksmbd_conn_rdma_read()
214 ret = conn->transport->ops->rdma_read(conn->transport, in ksmbd_conn_rdma_read()
221 int ksmbd_conn_rdma_write(struct ksmbd_conn *conn, void *buf, in ksmbd_conn_rdma_write() argument
227 if (conn->transport->ops->rdma_write) in ksmbd_conn_rdma_write()
228 ret = conn->transport->ops->rdma_write(conn->transport, in ksmbd_conn_rdma_write()
235 bool ksmbd_conn_alive(struct ksmbd_conn *conn) in ksmbd_conn_alive() argument
240 if (conn->status == KSMBD_SESS_EXITING) in ksmbd_conn_alive()
246 if (atomic_read(&conn->stats.open_files_count) > 0) in ksmbd_conn_alive()
255 time_after(jiffies, conn->last_active + server_conf.deadtime)) { in ksmbd_conn_alive()
273 struct ksmbd_conn *conn = (struct ksmbd_conn *)p; in ksmbd_conn_handler_loop() local
274 struct ksmbd_transport *t = conn->transport; in ksmbd_conn_handler_loop()
279 mutex_init(&conn->srv_mutex); in ksmbd_conn_handler_loop()
285 conn->last_active = jiffies; in ksmbd_conn_handler_loop()
286 while (ksmbd_conn_alive(conn)) { in ksmbd_conn_handler_loop()
290 kvfree(conn->request_buf); in ksmbd_conn_handler_loop()
291 conn->request_buf = NULL; in ksmbd_conn_handler_loop()
311 conn->request_buf = kvmalloc(size, GFP_KERNEL); in ksmbd_conn_handler_loop()
312 if (!conn->request_buf) in ksmbd_conn_handler_loop()
315 memcpy(conn->request_buf, hdr_buf, sizeof(hdr_buf)); in ksmbd_conn_handler_loop()
316 if (!ksmbd_smb_request(conn)) in ksmbd_conn_handler_loop()
323 size = t->ops->read(t, conn->request_buf + 4, pdu_size); in ksmbd_conn_handler_loop()
340 if (default_conn_ops.process_fn(conn)) { in ksmbd_conn_handler_loop()
348 while (atomic_read(&conn->r_count) > 0) in ksmbd_conn_handler_loop()
351 unload_nls(conn->local_nls); in ksmbd_conn_handler_loop()
353 default_conn_ops.terminate_fn(conn); in ksmbd_conn_handler_loop()
388 struct ksmbd_conn *conn; in stop_sessions() local
392 list_for_each_entry(conn, &conn_list, conns_list) { in stop_sessions()
395 task = conn->transport->handler; in stop_sessions()
399 conn->status = KSMBD_SESS_EXITING; in stop_sessions()