Lines Matching defs:work

88  * @work:     smb work containing server thread information
92 static inline int check_conn_state(struct ksmbd_work *work)
96 if (ksmbd_conn_exiting(work->conn) ||
97 ksmbd_conn_need_reconnect(work->conn)) {
98 rsp_hdr = work->response_buf;
108 static int __process_request(struct ksmbd_work *work, struct ksmbd_conn *conn,
115 if (check_conn_state(work))
118 if (ksmbd_verify_smb_message(work)) {
119 conn->ops->set_rsp_status(work, STATUS_INVALID_PARAMETER);
123 command = conn->ops->get_cmd_val(work);
128 conn->ops->set_rsp_status(work, STATUS_INVALID_PARAMETER);
135 conn->ops->set_rsp_status(work, STATUS_NOT_IMPLEMENTED);
139 if (work->sess && conn->ops->is_sign_req(work, command)) {
140 ret = conn->ops->check_sign_req(work);
142 conn->ops->set_rsp_status(work, STATUS_ACCESS_DENIED);
147 ret = cmds->proc(work);
158 if (work->send_no_response)
163 static void __handle_ksmbd_work(struct ksmbd_work *work,
171 conn->ops->is_transform_hdr(work->request_buf)) {
172 rc = conn->ops->decrypt_req(work);
175 work->encrypted = true;
178 if (conn->ops->allocate_rsp_buf(work))
181 rc = conn->ops->init_rsp_hdr(work);
184 conn->ops->set_rsp_status(work, STATUS_INVALID_HANDLE);
190 rc = conn->ops->check_user_session(work);
193 conn->ops->set_rsp_status(work,
196 conn->ops->set_rsp_status(work,
200 rc = conn->ops->get_ksmbd_tcon(work);
203 conn->ops->set_rsp_status(work,
206 conn->ops->set_rsp_status(work,
213 rc = __process_request(work, conn, &command);
223 rc = conn->ops->set_rsp_credits(work);
226 conn->ops->set_rsp_status(work,
232 is_chained = is_chained_smb2_message(work);
234 if (work->sess &&
235 (work->sess->sign || smb3_11_final_sess_setup_resp(work) ||
236 conn->ops->is_sign_req(work, command)))
237 conn->ops->set_sign_rsp(work);
241 if (work->tcon)
242 ksmbd_tree_connect_put(work->tcon);
243 smb3_preauth_hash_rsp(work);
244 if (work->sess && work->sess->enc && work->encrypted &&
246 rc = conn->ops->encrypt_resp(work);
248 conn->ops->set_rsp_status(work, STATUS_DATA_ERROR);
250 if (work->sess)
251 ksmbd_user_session_put(work->sess);
253 ksmbd_conn_write(work);
257 * handle_ksmbd_work() - process pending smb work requests
258 * @wk: smb work containing request command buffer
260 * called by kworker threads to processing remaining smb work requests
264 struct ksmbd_work *work = container_of(wk, struct ksmbd_work, work);
265 struct ksmbd_conn *conn = work->conn;
269 __handle_ksmbd_work(work, conn);
271 ksmbd_conn_try_dequeue_request(work);
272 ksmbd_free_work_struct(work);
281 * read remaining data from socket create and submit work.
285 struct ksmbd_work *work;
292 work = ksmbd_alloc_work_struct();
293 if (!work) {
294 pr_err("allocation for work failed\n");
298 work->conn = conn;
299 work->request_buf = conn->request_buf;
302 ksmbd_conn_enqueue_request(work);
306 INIT_WORK(&work->work, handle_ksmbd_work);
307 ksmbd_queue_work(work);
382 static void server_ctrl_handle_work(struct work_struct *work)
386 ctrl = container_of(work, struct server_ctrl_struct, ctrl_work);
397 pr_err("Unknown server work type: %d\n", ctrl->type);