cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ksmbd_work.h (3319B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 *   Copyright (C) 2019 Samsung Electronics Co., Ltd.
      4 */
      5
      6#ifndef __KSMBD_WORK_H__
      7#define __KSMBD_WORK_H__
      8
      9#include <linux/ctype.h>
     10#include <linux/workqueue.h>
     11
     12struct ksmbd_conn;
     13struct ksmbd_session;
     14struct ksmbd_tree_connect;
     15
     16enum {
     17	KSMBD_WORK_ACTIVE = 0,
     18	KSMBD_WORK_CANCELLED,
     19	KSMBD_WORK_CLOSED,
     20};
     21
     22/* one of these for every pending CIFS request at the connection */
     23struct ksmbd_work {
     24	/* Server corresponding to this mid */
     25	struct ksmbd_conn               *conn;
     26	struct ksmbd_session            *sess;
     27	struct ksmbd_tree_connect       *tcon;
     28
     29	/* Pointer to received SMB header */
     30	void                            *request_buf;
     31	/* Response buffer */
     32	void                            *response_buf;
     33
     34	/* Read data buffer */
     35	void                            *aux_payload_buf;
     36
     37	/* Next cmd hdr in compound req buf*/
     38	int                             next_smb2_rcv_hdr_off;
     39	/* Next cmd hdr in compound rsp buf*/
     40	int                             next_smb2_rsp_hdr_off;
     41
     42	/*
     43	 * Current Local FID assigned compound response if SMB2 CREATE
     44	 * command is present in compound request
     45	 */
     46	u64				compound_fid;
     47	u64				compound_pfid;
     48	u64				compound_sid;
     49
     50	const struct cred		*saved_cred;
     51
     52	/* Number of granted credits */
     53	unsigned int			credits_granted;
     54
     55	/* response smb header size */
     56	unsigned int                    resp_hdr_sz;
     57	unsigned int                    response_sz;
     58	/* Read data count */
     59	unsigned int                    aux_payload_sz;
     60
     61	void				*tr_buf;
     62
     63	unsigned char			state;
     64	/* Multiple responses for one request e.g. SMB ECHO */
     65	bool                            multiRsp:1;
     66	/* No response for cancelled request */
     67	bool                            send_no_response:1;
     68	/* Request is encrypted */
     69	bool                            encrypted:1;
     70	/* Is this SYNC or ASYNC ksmbd_work */
     71	bool                            syncronous:1;
     72	bool                            need_invalidate_rkey:1;
     73
     74	unsigned int                    remote_key;
     75	/* cancel works */
     76	int                             async_id;
     77	void                            **cancel_argv;
     78	void                            (*cancel_fn)(void **argv);
     79
     80	struct work_struct              work;
     81	/* List head at conn->requests */
     82	struct list_head                request_entry;
     83	/* List head at conn->async_requests */
     84	struct list_head                async_request_entry;
     85	struct list_head                fp_entry;
     86	struct list_head                interim_entry;
     87};
     88
     89/**
     90 * ksmbd_resp_buf_next - Get next buffer on compound response.
     91 * @work: smb work containing response buffer
     92 */
     93static inline void *ksmbd_resp_buf_next(struct ksmbd_work *work)
     94{
     95	return work->response_buf + work->next_smb2_rsp_hdr_off + 4;
     96}
     97
     98/**
     99 * ksmbd_req_buf_next - Get next buffer on compound request.
    100 * @work: smb work containing response buffer
    101 */
    102static inline void *ksmbd_req_buf_next(struct ksmbd_work *work)
    103{
    104	return work->request_buf + work->next_smb2_rcv_hdr_off + 4;
    105}
    106
    107struct ksmbd_work *ksmbd_alloc_work_struct(void);
    108void ksmbd_free_work_struct(struct ksmbd_work *work);
    109
    110void ksmbd_work_pool_destroy(void);
    111int ksmbd_work_pool_init(void);
    112
    113int ksmbd_workqueue_init(void);
    114void ksmbd_workqueue_destroy(void);
    115bool ksmbd_queue_work(struct ksmbd_work *work);
    116
    117#endif /* __KSMBD_WORK_H__ */