xref: /kernel/linux/linux-6.6/fs/smb/client/cifsglob.h (revision 62306a36)
1/* SPDX-License-Identifier: LGPL-2.1 */
2/*
3 *
4 *   Copyright (C) International Business Machines  Corp., 2002,2008
5 *   Author(s): Steve French (sfrench@us.ibm.com)
6 *              Jeremy Allison (jra@samba.org)
7 *
8 */
9#ifndef _CIFS_GLOB_H
10#define _CIFS_GLOB_H
11
12#include <linux/in.h>
13#include <linux/in6.h>
14#include <linux/inet.h>
15#include <linux/slab.h>
16#include <linux/scatterlist.h>
17#include <linux/mm.h>
18#include <linux/mempool.h>
19#include <linux/workqueue.h>
20#include <linux/utsname.h>
21#include <linux/sched/mm.h>
22#include <linux/netfs.h>
23#include "cifs_fs_sb.h"
24#include "cifsacl.h"
25#include <crypto/internal/hash.h>
26#include <uapi/linux/cifs/cifs_mount.h>
27#include "../common/smb2pdu.h"
28#include "smb2pdu.h"
29#include <linux/filelock.h>
30
31#define SMB_PATH_MAX 260
32#define CIFS_PORT 445
33#define RFC1001_PORT 139
34
35/*
36 * The sizes of various internal tables and strings
37 */
38#define MAX_UID_INFO 16
39#define MAX_SES_INFO 2
40#define MAX_TCON_INFO 4
41
42#define MAX_TREE_SIZE (2 + CIFS_NI_MAXHOST + 1 + CIFS_MAX_SHARE_LEN + 1)
43
44#define CIFS_MIN_RCV_POOL 4
45
46#define MAX_REOPEN_ATT	5 /* these many maximum attempts to reopen a file */
47/*
48 * default attribute cache timeout (jiffies)
49 */
50#define CIFS_DEF_ACTIMEO (1 * HZ)
51
52/*
53 * max attribute cache timeout (jiffies) - 2^30
54 */
55#define CIFS_MAX_ACTIMEO (1 << 30)
56
57/*
58 * Max persistent and resilient handle timeout (milliseconds).
59 * Windows durable max was 960000 (16 minutes)
60 */
61#define SMB3_MAX_HANDLE_TIMEOUT 960000
62
63/*
64 * MAX_REQ is the maximum number of requests that WE will send
65 * on one socket concurrently.
66 */
67#define CIFS_MAX_REQ 32767
68
69#define RFC1001_NAME_LEN 15
70#define RFC1001_NAME_LEN_WITH_NULL (RFC1001_NAME_LEN + 1)
71
72/* maximum length of ip addr as a string (including ipv6 and sctp) */
73#define SERVER_NAME_LENGTH 80
74#define SERVER_NAME_LEN_WITH_NULL     (SERVER_NAME_LENGTH + 1)
75
76/* echo interval in seconds */
77#define SMB_ECHO_INTERVAL_MIN 1
78#define SMB_ECHO_INTERVAL_MAX 600
79#define SMB_ECHO_INTERVAL_DEFAULT 60
80
81/* smb multichannel query server interfaces interval in seconds */
82#define SMB_INTERFACE_POLL_INTERVAL	600
83
84/* maximum number of PDUs in one compound */
85#define MAX_COMPOUND 7
86
87/*
88 * Default number of credits to keep available for SMB3.
89 * This value is chosen somewhat arbitrarily. The Windows client
90 * defaults to 128 credits, the Windows server allows clients up to
91 * 512 credits (or 8K for later versions), and the NetApp server
92 * does not limit clients at all.  Choose a high enough default value
93 * such that the client shouldn't limit performance, but allow mount
94 * to override (until you approach 64K, where we limit credits to 65000
95 * to reduce possibility of seeing more server credit overflow bugs.
96 */
97#define SMB2_MAX_CREDITS_AVAILABLE 32000
98
99#include "cifspdu.h"
100
101#ifndef XATTR_DOS_ATTRIB
102#define XATTR_DOS_ATTRIB "user.DOSATTRIB"
103#endif
104
105#define CIFS_MAX_WORKSTATION_LEN  (__NEW_UTS_LEN + 1)  /* reasonable max for client */
106
107#define CIFS_DFS_ROOT_SES(ses) ((ses)->dfs_root_ses ?: (ses))
108
109/*
110 * CIFS vfs client Status information (based on what we know.)
111 */
112
113/* associated with each connection */
114enum statusEnum {
115	CifsNew = 0,
116	CifsGood,
117	CifsExiting,
118	CifsNeedReconnect,
119	CifsNeedNegotiate,
120	CifsInNegotiate,
121};
122
123/* associated with each smb session */
124enum ses_status_enum {
125	SES_NEW = 0,
126	SES_GOOD,
127	SES_EXITING,
128	SES_NEED_RECON,
129	SES_IN_SETUP
130};
131
132/* associated with each tree connection to the server */
133enum tid_status_enum {
134	TID_NEW = 0,
135	TID_GOOD,
136	TID_EXITING,
137	TID_NEED_RECON,
138	TID_NEED_TCON,
139	TID_IN_TCON,
140	TID_NEED_FILES_INVALIDATE, /* currently unused */
141	TID_IN_FILES_INVALIDATE
142};
143
144enum securityEnum {
145	Unspecified = 0,	/* not specified */
146	NTLMv2,			/* Legacy NTLM auth with NTLMv2 hash */
147	RawNTLMSSP,		/* NTLMSSP without SPNEGO, NTLMv2 hash */
148	Kerberos,		/* Kerberos via SPNEGO */
149};
150
151struct session_key {
152	unsigned int len;
153	char *response;
154};
155
156/* crypto hashing related structure/fields, not specific to a sec mech */
157struct cifs_secmech {
158	struct shash_desc *hmacmd5; /* hmacmd5 hash function, for NTLMv2/CR1 hashes */
159	struct shash_desc *md5; /* md5 hash function, for CIFS/SMB1 signatures */
160	struct shash_desc *hmacsha256; /* hmac-sha256 hash function, for SMB2 signatures */
161	struct shash_desc *sha512; /* sha512 hash function, for SMB3.1.1 preauth hash */
162	struct shash_desc *aes_cmac; /* block-cipher based MAC function, for SMB3 signatures */
163
164	struct crypto_aead *enc; /* smb3 encryption AEAD TFM (AES-CCM and AES-GCM) */
165	struct crypto_aead *dec; /* smb3 decryption AEAD TFM (AES-CCM and AES-GCM) */
166};
167
168/* per smb session structure/fields */
169struct ntlmssp_auth {
170	bool sesskey_per_smbsess; /* whether session key is per smb session */
171	__u32 client_flags; /* sent by client in type 1 ntlmsssp exchange */
172	__u32 server_flags; /* sent by server in type 2 ntlmssp exchange */
173	unsigned char ciphertext[CIFS_CPHTXT_SIZE]; /* sent to server */
174	char cryptkey[CIFS_CRYPTO_KEY_SIZE]; /* used by ntlmssp */
175};
176
177struct cifs_cred {
178	int uid;
179	int gid;
180	int mode;
181	int cecount;
182	struct cifs_sid osid;
183	struct cifs_sid gsid;
184	struct cifs_ntace *ntaces;
185	struct cifs_ace *aces;
186};
187
188struct cifs_open_info_data {
189	bool adjust_tz;
190	union {
191		bool reparse_point;
192		bool symlink;
193	};
194	struct {
195		__u32 tag;
196		union {
197			struct reparse_data_buffer *buf;
198			struct reparse_posix_data *posix;
199		};
200	} reparse;
201	char *symlink_target;
202	union {
203		struct smb2_file_all_info fi;
204		struct smb311_posix_qinfo posix_fi;
205	};
206};
207
208static inline bool cifs_open_data_reparse(struct cifs_open_info_data *data)
209{
210	struct smb2_file_all_info *fi = &data->fi;
211	u32 attrs = le32_to_cpu(fi->Attributes);
212	bool ret;
213
214	ret = data->reparse_point || (attrs & ATTR_REPARSE);
215	if (ret)
216		attrs |= ATTR_REPARSE;
217	fi->Attributes = cpu_to_le32(attrs);
218	return ret;
219}
220
221static inline void cifs_free_open_info(struct cifs_open_info_data *data)
222{
223	kfree(data->symlink_target);
224}
225
226/*
227 *****************************************************************
228 * Except the CIFS PDUs themselves all the
229 * globally interesting structs should go here
230 *****************************************************************
231 */
232
233/*
234 * A smb_rqst represents a complete request to be issued to a server. It's
235 * formed by a kvec array, followed by an array of pages. Page data is assumed
236 * to start at the beginning of the first page.
237 */
238struct smb_rqst {
239	struct kvec	*rq_iov;	/* array of kvecs */
240	unsigned int	rq_nvec;	/* number of kvecs in array */
241	size_t		rq_iter_size;	/* Amount of data in ->rq_iter */
242	struct iov_iter	rq_iter;	/* Data iterator */
243	struct xarray	rq_buffer;	/* Page buffer for encryption */
244};
245
246struct mid_q_entry;
247struct TCP_Server_Info;
248struct cifsFileInfo;
249struct cifs_ses;
250struct cifs_tcon;
251struct dfs_info3_param;
252struct cifs_fattr;
253struct smb3_fs_context;
254struct cifs_fid;
255struct cifs_readdata;
256struct cifs_writedata;
257struct cifs_io_parms;
258struct cifs_search_info;
259struct cifsInodeInfo;
260struct cifs_open_parms;
261struct cifs_credits;
262
263struct smb_version_operations {
264	int (*send_cancel)(struct TCP_Server_Info *, struct smb_rqst *,
265			   struct mid_q_entry *);
266	bool (*compare_fids)(struct cifsFileInfo *, struct cifsFileInfo *);
267	/* setup request: allocate mid, sign message */
268	struct mid_q_entry *(*setup_request)(struct cifs_ses *,
269					     struct TCP_Server_Info *,
270					     struct smb_rqst *);
271	/* setup async request: allocate mid, sign message */
272	struct mid_q_entry *(*setup_async_request)(struct TCP_Server_Info *,
273						struct smb_rqst *);
274	/* check response: verify signature, map error */
275	int (*check_receive)(struct mid_q_entry *, struct TCP_Server_Info *,
276			     bool);
277	void (*add_credits)(struct TCP_Server_Info *server,
278			    const struct cifs_credits *credits,
279			    const int optype);
280	void (*set_credits)(struct TCP_Server_Info *, const int);
281	int * (*get_credits_field)(struct TCP_Server_Info *, const int);
282	unsigned int (*get_credits)(struct mid_q_entry *);
283	__u64 (*get_next_mid)(struct TCP_Server_Info *);
284	void (*revert_current_mid)(struct TCP_Server_Info *server,
285				   const unsigned int val);
286	/* data offset from read response message */
287	unsigned int (*read_data_offset)(char *);
288	/*
289	 * Data length from read response message
290	 * When in_remaining is true, the returned data length is in
291	 * message field DataRemaining for out-of-band data read (e.g through
292	 * Memory Registration RDMA write in SMBD).
293	 * Otherwise, the returned data length is in message field DataLength.
294	 */
295	unsigned int (*read_data_length)(char *, bool in_remaining);
296	/* map smb to linux error */
297	int (*map_error)(char *, bool);
298	/* find mid corresponding to the response message */
299	struct mid_q_entry * (*find_mid)(struct TCP_Server_Info *, char *);
300	void (*dump_detail)(void *buf, struct TCP_Server_Info *ptcp_info);
301	void (*clear_stats)(struct cifs_tcon *);
302	void (*print_stats)(struct seq_file *m, struct cifs_tcon *);
303	void (*dump_share_caps)(struct seq_file *, struct cifs_tcon *);
304	/* verify the message */
305	int (*check_message)(char *, unsigned int, struct TCP_Server_Info *);
306	bool (*is_oplock_break)(char *, struct TCP_Server_Info *);
307	int (*handle_cancelled_mid)(struct mid_q_entry *, struct TCP_Server_Info *);
308	void (*downgrade_oplock)(struct TCP_Server_Info *server,
309				 struct cifsInodeInfo *cinode, __u32 oplock,
310				 unsigned int epoch, bool *purge_cache);
311	/* process transaction2 response */
312	bool (*check_trans2)(struct mid_q_entry *, struct TCP_Server_Info *,
313			     char *, int);
314	/* check if we need to negotiate */
315	bool (*need_neg)(struct TCP_Server_Info *);
316	/* negotiate to the server */
317	int (*negotiate)(const unsigned int xid,
318			 struct cifs_ses *ses,
319			 struct TCP_Server_Info *server);
320	/* set negotiated write size */
321	unsigned int (*negotiate_wsize)(struct cifs_tcon *tcon, struct smb3_fs_context *ctx);
322	/* set negotiated read size */
323	unsigned int (*negotiate_rsize)(struct cifs_tcon *tcon, struct smb3_fs_context *ctx);
324	/* setup smb sessionn */
325	int (*sess_setup)(const unsigned int, struct cifs_ses *,
326			  struct TCP_Server_Info *server,
327			  const struct nls_table *);
328	/* close smb session */
329	int (*logoff)(const unsigned int, struct cifs_ses *);
330	/* connect to a server share */
331	int (*tree_connect)(const unsigned int, struct cifs_ses *, const char *,
332			    struct cifs_tcon *, const struct nls_table *);
333	/* close tree connecion */
334	int (*tree_disconnect)(const unsigned int, struct cifs_tcon *);
335	/* get DFS referrals */
336	int (*get_dfs_refer)(const unsigned int, struct cifs_ses *,
337			     const char *, struct dfs_info3_param **,
338			     unsigned int *, const struct nls_table *, int);
339	/* informational QFS call */
340	void (*qfs_tcon)(const unsigned int, struct cifs_tcon *,
341			 struct cifs_sb_info *);
342	/* check if a path is accessible or not */
343	int (*is_path_accessible)(const unsigned int, struct cifs_tcon *,
344				  struct cifs_sb_info *, const char *);
345	/* query path data from the server */
346	int (*query_path_info)(const unsigned int xid,
347			       struct cifs_tcon *tcon,
348			       struct cifs_sb_info *cifs_sb,
349			       const char *full_path,
350			       struct cifs_open_info_data *data);
351	/* query file data from the server */
352	int (*query_file_info)(const unsigned int xid, struct cifs_tcon *tcon,
353			       struct cifsFileInfo *cfile, struct cifs_open_info_data *data);
354	/* query reparse point to determine which type of special file */
355	int (*query_reparse_point)(const unsigned int xid,
356				   struct cifs_tcon *tcon,
357				   struct cifs_sb_info *cifs_sb,
358				   const char *full_path,
359				   u32 *tag, struct kvec *rsp,
360				   int *rsp_buftype);
361	/* get server index number */
362	int (*get_srv_inum)(const unsigned int xid, struct cifs_tcon *tcon,
363			    struct cifs_sb_info *cifs_sb, const char *full_path, u64 *uniqueid,
364			    struct cifs_open_info_data *data);
365	/* set size by path */
366	int (*set_path_size)(const unsigned int, struct cifs_tcon *,
367			     const char *, __u64, struct cifs_sb_info *, bool);
368	/* set size by file handle */
369	int (*set_file_size)(const unsigned int, struct cifs_tcon *,
370			     struct cifsFileInfo *, __u64, bool);
371	/* set attributes */
372	int (*set_file_info)(struct inode *, const char *, FILE_BASIC_INFO *,
373			     const unsigned int);
374	int (*set_compression)(const unsigned int, struct cifs_tcon *,
375			       struct cifsFileInfo *);
376	/* check if we can send an echo or nor */
377	bool (*can_echo)(struct TCP_Server_Info *);
378	/* send echo request */
379	int (*echo)(struct TCP_Server_Info *);
380	/* create directory */
381	int (*posix_mkdir)(const unsigned int xid, struct inode *inode,
382			umode_t mode, struct cifs_tcon *tcon,
383			const char *full_path,
384			struct cifs_sb_info *cifs_sb);
385	int (*mkdir)(const unsigned int xid, struct inode *inode, umode_t mode,
386		     struct cifs_tcon *tcon, const char *name,
387		     struct cifs_sb_info *sb);
388	/* set info on created directory */
389	void (*mkdir_setinfo)(struct inode *, const char *,
390			      struct cifs_sb_info *, struct cifs_tcon *,
391			      const unsigned int);
392	/* remove directory */
393	int (*rmdir)(const unsigned int, struct cifs_tcon *, const char *,
394		     struct cifs_sb_info *);
395	/* unlink file */
396	int (*unlink)(const unsigned int, struct cifs_tcon *, const char *,
397		      struct cifs_sb_info *);
398	/* open, rename and delete file */
399	int (*rename_pending_delete)(const char *, struct dentry *,
400				     const unsigned int);
401	/* send rename request */
402	int (*rename)(const unsigned int xid,
403		      struct cifs_tcon *tcon,
404		      struct dentry *source_dentry,
405		      const char *from_name, const char *to_name,
406		      struct cifs_sb_info *cifs_sb);
407	/* send create hardlink request */
408	int (*create_hardlink)(const unsigned int xid,
409			       struct cifs_tcon *tcon,
410			       struct dentry *source_dentry,
411			       const char *from_name, const char *to_name,
412			       struct cifs_sb_info *cifs_sb);
413	/* query symlink target */
414	int (*query_symlink)(const unsigned int xid,
415			     struct cifs_tcon *tcon,
416			     struct cifs_sb_info *cifs_sb,
417			     const char *full_path,
418			     char **target_path);
419	/* open a file for non-posix mounts */
420	int (*open)(const unsigned int xid, struct cifs_open_parms *oparms, __u32 *oplock,
421		    void *buf);
422	/* set fid protocol-specific info */
423	void (*set_fid)(struct cifsFileInfo *, struct cifs_fid *, __u32);
424	/* close a file */
425	void (*close)(const unsigned int, struct cifs_tcon *,
426		      struct cifs_fid *);
427	/* close a file, returning file attributes and timestamps */
428	void (*close_getattr)(const unsigned int xid, struct cifs_tcon *tcon,
429		      struct cifsFileInfo *pfile_info);
430	/* send a flush request to the server */
431	int (*flush)(const unsigned int, struct cifs_tcon *, struct cifs_fid *);
432	/* async read from the server */
433	int (*async_readv)(struct cifs_readdata *);
434	/* async write to the server */
435	int (*async_writev)(struct cifs_writedata *,
436			    void (*release)(struct kref *));
437	/* sync read from the server */
438	int (*sync_read)(const unsigned int, struct cifs_fid *,
439			 struct cifs_io_parms *, unsigned int *, char **,
440			 int *);
441	/* sync write to the server */
442	int (*sync_write)(const unsigned int, struct cifs_fid *,
443			  struct cifs_io_parms *, unsigned int *, struct kvec *,
444			  unsigned long);
445	/* open dir, start readdir */
446	int (*query_dir_first)(const unsigned int, struct cifs_tcon *,
447			       const char *, struct cifs_sb_info *,
448			       struct cifs_fid *, __u16,
449			       struct cifs_search_info *);
450	/* continue readdir */
451	int (*query_dir_next)(const unsigned int, struct cifs_tcon *,
452			      struct cifs_fid *,
453			      __u16, struct cifs_search_info *srch_inf);
454	/* close dir */
455	int (*close_dir)(const unsigned int, struct cifs_tcon *,
456			 struct cifs_fid *);
457	/* calculate a size of SMB message */
458	unsigned int (*calc_smb_size)(void *buf);
459	/* check for STATUS_PENDING and process the response if yes */
460	bool (*is_status_pending)(char *buf, struct TCP_Server_Info *server);
461	/* check for STATUS_NETWORK_SESSION_EXPIRED */
462	bool (*is_session_expired)(char *);
463	/* send oplock break response */
464	int (*oplock_response)(struct cifs_tcon *tcon, __u64 persistent_fid, __u64 volatile_fid,
465			__u16 net_fid, struct cifsInodeInfo *cifs_inode);
466	/* query remote filesystem */
467	int (*queryfs)(const unsigned int, struct cifs_tcon *,
468		       struct cifs_sb_info *, struct kstatfs *);
469	/* send mandatory brlock to the server */
470	int (*mand_lock)(const unsigned int, struct cifsFileInfo *, __u64,
471			 __u64, __u32, int, int, bool);
472	/* unlock range of mandatory locks */
473	int (*mand_unlock_range)(struct cifsFileInfo *, struct file_lock *,
474				 const unsigned int);
475	/* push brlocks from the cache to the server */
476	int (*push_mand_locks)(struct cifsFileInfo *);
477	/* get lease key of the inode */
478	void (*get_lease_key)(struct inode *, struct cifs_fid *);
479	/* set lease key of the inode */
480	void (*set_lease_key)(struct inode *, struct cifs_fid *);
481	/* generate new lease key */
482	void (*new_lease_key)(struct cifs_fid *);
483	int (*generate_signingkey)(struct cifs_ses *ses,
484				   struct TCP_Server_Info *server);
485	int (*calc_signature)(struct smb_rqst *, struct TCP_Server_Info *,
486				bool allocate_crypto);
487	int (*set_integrity)(const unsigned int, struct cifs_tcon *tcon,
488			     struct cifsFileInfo *src_file);
489	int (*enum_snapshots)(const unsigned int xid, struct cifs_tcon *tcon,
490			     struct cifsFileInfo *src_file, void __user *);
491	int (*notify)(const unsigned int xid, struct file *pfile,
492			     void __user *pbuf, bool return_changes);
493	int (*query_mf_symlink)(unsigned int, struct cifs_tcon *,
494				struct cifs_sb_info *, const unsigned char *,
495				char *, unsigned int *);
496	int (*create_mf_symlink)(unsigned int, struct cifs_tcon *,
497				 struct cifs_sb_info *, const unsigned char *,
498				 char *, unsigned int *);
499	/* if we can do cache read operations */
500	bool (*is_read_op)(__u32);
501	/* set oplock level for the inode */
502	void (*set_oplock_level)(struct cifsInodeInfo *, __u32, unsigned int,
503				 bool *);
504	/* create lease context buffer for CREATE request */
505	char * (*create_lease_buf)(u8 *lease_key, u8 oplock);
506	/* parse lease context buffer and return oplock/epoch info */
507	__u8 (*parse_lease_buf)(void *buf, unsigned int *epoch, char *lkey);
508	ssize_t (*copychunk_range)(const unsigned int,
509			struct cifsFileInfo *src_file,
510			struct cifsFileInfo *target_file,
511			u64 src_off, u64 len, u64 dest_off);
512	int (*duplicate_extents)(const unsigned int, struct cifsFileInfo *src,
513			struct cifsFileInfo *target_file, u64 src_off, u64 len,
514			u64 dest_off);
515	int (*validate_negotiate)(const unsigned int, struct cifs_tcon *);
516	ssize_t (*query_all_EAs)(const unsigned int, struct cifs_tcon *,
517			const unsigned char *, const unsigned char *, char *,
518			size_t, struct cifs_sb_info *);
519	int (*set_EA)(const unsigned int, struct cifs_tcon *, const char *,
520			const char *, const void *, const __u16,
521			const struct nls_table *, struct cifs_sb_info *);
522	struct cifs_ntsd * (*get_acl)(struct cifs_sb_info *, struct inode *,
523			const char *, u32 *, u32);
524	struct cifs_ntsd * (*get_acl_by_fid)(struct cifs_sb_info *,
525			const struct cifs_fid *, u32 *, u32);
526	int (*set_acl)(struct cifs_ntsd *, __u32, struct inode *, const char *,
527			int);
528	/* writepages retry size */
529	unsigned int (*wp_retry_size)(struct inode *);
530	/* get mtu credits */
531	int (*wait_mtu_credits)(struct TCP_Server_Info *, unsigned int,
532				unsigned int *, struct cifs_credits *);
533	/* adjust previously taken mtu credits to request size */
534	int (*adjust_credits)(struct TCP_Server_Info *server,
535			      struct cifs_credits *credits,
536			      const unsigned int payload_size);
537	/* check if we need to issue closedir */
538	bool (*dir_needs_close)(struct cifsFileInfo *);
539	long (*fallocate)(struct file *, struct cifs_tcon *, int, loff_t,
540			  loff_t);
541	/* init transform request - used for encryption for now */
542	int (*init_transform_rq)(struct TCP_Server_Info *, int num_rqst,
543				 struct smb_rqst *, struct smb_rqst *);
544	int (*is_transform_hdr)(void *buf);
545	int (*receive_transform)(struct TCP_Server_Info *,
546				 struct mid_q_entry **, char **, int *);
547	enum securityEnum (*select_sectype)(struct TCP_Server_Info *,
548			    enum securityEnum);
549	int (*next_header)(struct TCP_Server_Info *server, char *buf,
550			   unsigned int *noff);
551	/* ioctl passthrough for query_info */
552	int (*ioctl_query_info)(const unsigned int xid,
553				struct cifs_tcon *tcon,
554				struct cifs_sb_info *cifs_sb,
555				__le16 *path, int is_dir,
556				unsigned long p);
557	/* make unix special files (block, char, fifo, socket) */
558	int (*make_node)(unsigned int xid,
559			 struct inode *inode,
560			 struct dentry *dentry,
561			 struct cifs_tcon *tcon,
562			 const char *full_path,
563			 umode_t mode,
564			 dev_t device_number);
565	/* version specific fiemap implementation */
566	int (*fiemap)(struct cifs_tcon *tcon, struct cifsFileInfo *,
567		      struct fiemap_extent_info *, u64, u64);
568	/* version specific llseek implementation */
569	loff_t (*llseek)(struct file *, struct cifs_tcon *, loff_t, int);
570	/* Check for STATUS_IO_TIMEOUT */
571	bool (*is_status_io_timeout)(char *buf);
572	/* Check for STATUS_NETWORK_NAME_DELETED */
573	bool (*is_network_name_deleted)(char *buf, struct TCP_Server_Info *srv);
574	int (*parse_reparse_point)(struct cifs_sb_info *cifs_sb,
575				   struct kvec *rsp_iov,
576				   struct cifs_open_info_data *data);
577};
578
579struct smb_version_values {
580	char		*version_string;
581	__u16		protocol_id;
582	__u32		req_capabilities;
583	__u32		large_lock_type;
584	__u32		exclusive_lock_type;
585	__u32		shared_lock_type;
586	__u32		unlock_lock_type;
587	size_t		header_preamble_size;
588	size_t		header_size;
589	size_t		max_header_size;
590	size_t		read_rsp_size;
591	__le16		lock_cmd;
592	unsigned int	cap_unix;
593	unsigned int	cap_nt_find;
594	unsigned int	cap_large_files;
595	__u16		signing_enabled;
596	__u16		signing_required;
597	size_t		create_lease_size;
598};
599
600#define HEADER_SIZE(server) (server->vals->header_size)
601#define MAX_HEADER_SIZE(server) (server->vals->max_header_size)
602#define HEADER_PREAMBLE_SIZE(server) (server->vals->header_preamble_size)
603#define MID_HEADER_SIZE(server) (HEADER_SIZE(server) - 1 - HEADER_PREAMBLE_SIZE(server))
604
605/**
606 * CIFS superblock mount flags (mnt_cifs_flags) to consider when
607 * trying to reuse existing superblock for a new mount
608 */
609#define CIFS_MOUNT_MASK (CIFS_MOUNT_NO_PERM | CIFS_MOUNT_SET_UID | \
610			 CIFS_MOUNT_SERVER_INUM | CIFS_MOUNT_DIRECT_IO | \
611			 CIFS_MOUNT_NO_XATTR | CIFS_MOUNT_MAP_SPECIAL_CHR | \
612			 CIFS_MOUNT_MAP_SFM_CHR | \
613			 CIFS_MOUNT_UNX_EMUL | CIFS_MOUNT_NO_BRL | \
614			 CIFS_MOUNT_CIFS_ACL | CIFS_MOUNT_OVERR_UID | \
615			 CIFS_MOUNT_OVERR_GID | CIFS_MOUNT_DYNPERM | \
616			 CIFS_MOUNT_NOPOSIXBRL | CIFS_MOUNT_NOSSYNC | \
617			 CIFS_MOUNT_FSCACHE | CIFS_MOUNT_MF_SYMLINKS | \
618			 CIFS_MOUNT_MULTIUSER | CIFS_MOUNT_STRICT_IO | \
619			 CIFS_MOUNT_CIFS_BACKUPUID | CIFS_MOUNT_CIFS_BACKUPGID | \
620			 CIFS_MOUNT_UID_FROM_ACL | CIFS_MOUNT_NO_HANDLE_CACHE | \
621			 CIFS_MOUNT_NO_DFS | CIFS_MOUNT_MODE_FROM_SID | \
622			 CIFS_MOUNT_RO_CACHE | CIFS_MOUNT_RW_CACHE)
623
624/**
625 * Generic VFS superblock mount flags (s_flags) to consider when
626 * trying to reuse existing superblock for a new mount
627 */
628#define CIFS_MS_MASK (SB_RDONLY | SB_MANDLOCK | SB_NOEXEC | SB_NOSUID | \
629		      SB_NODEV | SB_SYNCHRONOUS)
630
631struct cifs_mnt_data {
632	struct cifs_sb_info *cifs_sb;
633	struct smb3_fs_context *ctx;
634	int flags;
635};
636
637static inline unsigned int
638get_rfc1002_length(void *buf)
639{
640	return be32_to_cpu(*((__be32 *)buf)) & 0xffffff;
641}
642
643static inline void
644inc_rfc1001_len(void *buf, int count)
645{
646	be32_add_cpu((__be32 *)buf, count);
647}
648
649struct TCP_Server_Info {
650	struct list_head tcp_ses_list;
651	struct list_head smb_ses_list;
652	spinlock_t srv_lock;  /* protect anything here that is not protected */
653	__u64 conn_id; /* connection identifier (useful for debugging) */
654	int srv_count; /* reference counter */
655	/* 15 character server name + 0x20 16th byte indicating type = srv */
656	char server_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
657	struct smb_version_operations	*ops;
658	struct smb_version_values	*vals;
659	/* updates to tcpStatus protected by cifs_tcp_ses_lock */
660	enum statusEnum tcpStatus; /* what we think the status is */
661	char *hostname; /* hostname portion of UNC string */
662	struct socket *ssocket;
663	struct sockaddr_storage dstaddr;
664	struct sockaddr_storage srcaddr; /* locally bind to this IP */
665#ifdef CONFIG_NET_NS
666	struct net *net;
667#endif
668	wait_queue_head_t response_q;
669	wait_queue_head_t request_q; /* if more than maxmpx to srvr must block*/
670	spinlock_t mid_lock;  /* protect mid queue and it's entries */
671	struct list_head pending_mid_q;
672	bool noblocksnd;		/* use blocking sendmsg */
673	bool noautotune;		/* do not autotune send buf sizes */
674	bool nosharesock;
675	bool tcp_nodelay;
676	bool terminate;
677	unsigned int credits;  /* send no more requests at once */
678	unsigned int max_credits; /* can override large 32000 default at mnt */
679	unsigned int in_flight;  /* number of requests on the wire to server */
680	unsigned int max_in_flight; /* max number of requests that were on wire */
681	spinlock_t req_lock;  /* protect the two values above */
682	struct mutex _srv_mutex;
683	unsigned int nofs_flag;
684	struct task_struct *tsk;
685	char server_GUID[16];
686	__u16 sec_mode;
687	bool sign; /* is signing enabled on this connection? */
688	bool ignore_signature:1; /* skip validation of signatures in SMB2/3 rsp */
689	bool session_estab; /* mark when very first sess is established */
690	int echo_credits;  /* echo reserved slots */
691	int oplock_credits;  /* oplock break reserved slots */
692	bool echoes:1; /* enable echoes */
693	__u8 client_guid[SMB2_CLIENT_GUID_SIZE]; /* Client GUID */
694	u16 dialect; /* dialect index that server chose */
695	bool oplocks:1; /* enable oplocks */
696	unsigned int maxReq;	/* Clients should submit no more */
697	/* than maxReq distinct unanswered SMBs to the server when using  */
698	/* multiplexed reads or writes (for SMB1/CIFS only, not SMB2/SMB3) */
699	unsigned int maxBuf;	/* maxBuf specifies the maximum */
700	/* message size the server can send or receive for non-raw SMBs */
701	/* maxBuf is returned by SMB NegotiateProtocol so maxBuf is only 0 */
702	/* when socket is setup (and during reconnect) before NegProt sent */
703	unsigned int max_rw;	/* maxRw specifies the maximum */
704	/* message size the server can send or receive for */
705	/* SMB_COM_WRITE_RAW or SMB_COM_READ_RAW. */
706	unsigned int capabilities; /* selective disabling of caps by smb sess */
707	int timeAdj;  /* Adjust for difference in server time zone in sec */
708	__u64 CurrentMid;         /* multiplex id - rotating counter, protected by GlobalMid_Lock */
709	char cryptkey[CIFS_CRYPTO_KEY_SIZE]; /* used by ntlm, ntlmv2 etc */
710	/* 16th byte of RFC1001 workstation name is always null */
711	char workstation_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
712	__u32 sequence_number; /* for signing, protected by srv_mutex */
713	__u32 reconnect_instance; /* incremented on each reconnect */
714	struct session_key session_key;
715	unsigned long lstrp; /* when we got last response from this server */
716	struct cifs_secmech secmech; /* crypto sec mech functs, descriptors */
717#define	CIFS_NEGFLAVOR_UNENCAP	1	/* wct == 17, but no ext_sec */
718#define	CIFS_NEGFLAVOR_EXTENDED	2	/* wct == 17, ext_sec bit set */
719	char	negflavor;	/* NEGOTIATE response flavor */
720	/* extended security flavors that server supports */
721	bool	sec_ntlmssp;		/* supports NTLMSSP */
722	bool	sec_kerberosu2u;	/* supports U2U Kerberos */
723	bool	sec_kerberos;		/* supports plain Kerberos */
724	bool	sec_mskerberos;		/* supports legacy MS Kerberos */
725	bool	large_buf;		/* is current buffer large? */
726	/* use SMBD connection instead of socket */
727	bool	rdma;
728	/* point to the SMBD connection if RDMA is used instead of socket */
729	struct smbd_connection *smbd_conn;
730	struct delayed_work	echo; /* echo ping workqueue job */
731	char	*smallbuf;	/* pointer to current "small" buffer */
732	char	*bigbuf;	/* pointer to current "big" buffer */
733	/* Total size of this PDU. Only valid from cifs_demultiplex_thread */
734	unsigned int pdu_size;
735	unsigned int total_read; /* total amount of data read in this pass */
736	atomic_t in_send; /* requests trying to send */
737	atomic_t num_waiters;   /* blocked waiting to get in sendrecv */
738#ifdef CONFIG_CIFS_STATS2
739	atomic_t num_cmds[NUMBER_OF_SMB2_COMMANDS]; /* total requests by cmd */
740	atomic_t smb2slowcmd[NUMBER_OF_SMB2_COMMANDS]; /* count resps > 1 sec */
741	__u64 time_per_cmd[NUMBER_OF_SMB2_COMMANDS]; /* total time per cmd */
742	__u32 slowest_cmd[NUMBER_OF_SMB2_COMMANDS];
743	__u32 fastest_cmd[NUMBER_OF_SMB2_COMMANDS];
744#endif /* STATS2 */
745	unsigned int	max_read;
746	unsigned int	max_write;
747	unsigned int	min_offload;
748	__le16	compress_algorithm;
749	__u16	signing_algorithm;
750	__le16	cipher_type;
751	 /* save initital negprot hash */
752	__u8	preauth_sha_hash[SMB2_PREAUTH_HASH_SIZE];
753	bool	signing_negotiated; /* true if valid signing context rcvd from server */
754	bool	posix_ext_supported;
755	struct delayed_work reconnect; /* reconnect workqueue job */
756	struct mutex reconnect_mutex; /* prevent simultaneous reconnects */
757	unsigned long echo_interval;
758
759	/*
760	 * Number of targets available for reconnect. The more targets
761	 * the more tasks have to wait to let the demultiplex thread
762	 * reconnect.
763	 */
764	int nr_targets;
765	bool noblockcnt; /* use non-blocking connect() */
766
767	/*
768	 * If this is a session channel,
769	 * primary_server holds the ref-counted
770	 * pointer to primary channel connection for the session.
771	 */
772#define SERVER_IS_CHAN(server)	(!!(server)->primary_server)
773	struct TCP_Server_Info *primary_server;
774	__u16 channel_sequence_num;  /* incremented on primary channel on each chan reconnect */
775
776#ifdef CONFIG_CIFS_SWN_UPCALL
777	bool use_swn_dstaddr;
778	struct sockaddr_storage swn_dstaddr;
779#endif
780	struct mutex refpath_lock; /* protects leaf_fullpath */
781	/*
782	 * leaf_fullpath: Canonical DFS referral path related to this
783	 *                connection.
784	 *                It is used in DFS cache refresher, reconnect and may
785	 *                change due to nested DFS links.
786	 *
787	 * Protected by @refpath_lock and @srv_lock.  The @refpath_lock is
788	 * mostly used for not requiring a copy of @leaf_fullpath when getting
789	 * cached or new DFS referrals (which might also sleep during I/O).
790	 * While @srv_lock is held for making string and NULL comparions against
791	 * both fields as in mount(2) and cache refresh.
792	 *
793	 * format: \\HOST\SHARE[\OPTIONAL PATH]
794	 */
795	char *leaf_fullpath;
796};
797
798static inline bool is_smb1(struct TCP_Server_Info *server)
799{
800	return HEADER_PREAMBLE_SIZE(server) != 0;
801}
802
803static inline void cifs_server_lock(struct TCP_Server_Info *server)
804{
805	unsigned int nofs_flag = memalloc_nofs_save();
806
807	mutex_lock(&server->_srv_mutex);
808	server->nofs_flag = nofs_flag;
809}
810
811static inline void cifs_server_unlock(struct TCP_Server_Info *server)
812{
813	unsigned int nofs_flag = server->nofs_flag;
814
815	mutex_unlock(&server->_srv_mutex);
816	memalloc_nofs_restore(nofs_flag);
817}
818
819struct cifs_credits {
820	unsigned int value;
821	unsigned int instance;
822};
823
824static inline unsigned int
825in_flight(struct TCP_Server_Info *server)
826{
827	unsigned int num;
828
829	spin_lock(&server->req_lock);
830	num = server->in_flight;
831	spin_unlock(&server->req_lock);
832	return num;
833}
834
835static inline bool
836has_credits(struct TCP_Server_Info *server, int *credits, int num_credits)
837{
838	int num;
839
840	spin_lock(&server->req_lock);
841	num = *credits;
842	spin_unlock(&server->req_lock);
843	return num >= num_credits;
844}
845
846static inline void
847add_credits(struct TCP_Server_Info *server, const struct cifs_credits *credits,
848	    const int optype)
849{
850	server->ops->add_credits(server, credits, optype);
851}
852
853static inline void
854add_credits_and_wake_if(struct TCP_Server_Info *server,
855			const struct cifs_credits *credits, const int optype)
856{
857	if (credits->value) {
858		server->ops->add_credits(server, credits, optype);
859		wake_up(&server->request_q);
860	}
861}
862
863static inline void
864set_credits(struct TCP_Server_Info *server, const int val)
865{
866	server->ops->set_credits(server, val);
867}
868
869static inline int
870adjust_credits(struct TCP_Server_Info *server, struct cifs_credits *credits,
871	       const unsigned int payload_size)
872{
873	return server->ops->adjust_credits ?
874		server->ops->adjust_credits(server, credits, payload_size) : 0;
875}
876
877static inline __le64
878get_next_mid64(struct TCP_Server_Info *server)
879{
880	return cpu_to_le64(server->ops->get_next_mid(server));
881}
882
883static inline __le16
884get_next_mid(struct TCP_Server_Info *server)
885{
886	__u16 mid = server->ops->get_next_mid(server);
887	/*
888	 * The value in the SMB header should be little endian for easy
889	 * on-the-wire decoding.
890	 */
891	return cpu_to_le16(mid);
892}
893
894static inline void
895revert_current_mid(struct TCP_Server_Info *server, const unsigned int val)
896{
897	if (server->ops->revert_current_mid)
898		server->ops->revert_current_mid(server, val);
899}
900
901static inline void
902revert_current_mid_from_hdr(struct TCP_Server_Info *server,
903			    const struct smb2_hdr *shdr)
904{
905	unsigned int num = le16_to_cpu(shdr->CreditCharge);
906
907	return revert_current_mid(server, num > 0 ? num : 1);
908}
909
910static inline __u16
911get_mid(const struct smb_hdr *smb)
912{
913	return le16_to_cpu(smb->Mid);
914}
915
916static inline bool
917compare_mid(__u16 mid, const struct smb_hdr *smb)
918{
919	return mid == le16_to_cpu(smb->Mid);
920}
921
922/*
923 * When the server supports very large reads and writes via POSIX extensions,
924 * we can allow up to 2^24-1, minus the size of a READ/WRITE_AND_X header, not
925 * including the RFC1001 length.
926 *
927 * Note that this might make for "interesting" allocation problems during
928 * writeback however as we have to allocate an array of pointers for the
929 * pages. A 16M write means ~32kb page array with PAGE_SIZE == 4096.
930 *
931 * For reads, there is a similar problem as we need to allocate an array
932 * of kvecs to handle the receive, though that should only need to be done
933 * once.
934 */
935#define CIFS_MAX_WSIZE ((1<<24) - 1 - sizeof(WRITE_REQ) + 4)
936#define CIFS_MAX_RSIZE ((1<<24) - sizeof(READ_RSP) + 4)
937
938/*
939 * When the server doesn't allow large posix writes, only allow a rsize/wsize
940 * of 2^17-1 minus the size of the call header. That allows for a read or
941 * write up to the maximum size described by RFC1002.
942 */
943#define CIFS_MAX_RFC1002_WSIZE ((1<<17) - 1 - sizeof(WRITE_REQ) + 4)
944#define CIFS_MAX_RFC1002_RSIZE ((1<<17) - 1 - sizeof(READ_RSP) + 4)
945
946#define CIFS_DEFAULT_IOSIZE (1024 * 1024)
947
948/*
949 * Windows only supports a max of 60kb reads and 65535 byte writes. Default to
950 * those values when posix extensions aren't in force. In actuality here, we
951 * use 65536 to allow for a write that is a multiple of 4k. Most servers seem
952 * to be ok with the extra byte even though Windows doesn't send writes that
953 * are that large.
954 *
955 * Citation:
956 *
957 * https://blogs.msdn.com/b/openspecification/archive/2009/04/10/smb-maximum-transmit-buffer-size-and-performance-tuning.aspx
958 */
959#define CIFS_DEFAULT_NON_POSIX_RSIZE (60 * 1024)
960#define CIFS_DEFAULT_NON_POSIX_WSIZE (65536)
961
962/*
963 * Macros to allow the TCP_Server_Info->net field and related code to drop out
964 * when CONFIG_NET_NS isn't set.
965 */
966
967#ifdef CONFIG_NET_NS
968
969static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
970{
971	return srv->net;
972}
973
974static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
975{
976	srv->net = net;
977}
978
979#else
980
981static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
982{
983	return &init_net;
984}
985
986static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
987{
988}
989
990#endif
991
992struct cifs_server_iface {
993	struct list_head iface_head;
994	struct kref refcount;
995	size_t speed;
996	size_t weight_fulfilled;
997	unsigned int num_channels;
998	unsigned int rdma_capable : 1;
999	unsigned int rss_capable : 1;
1000	unsigned int is_active : 1; /* unset if non existent */
1001	struct sockaddr_storage sockaddr;
1002};
1003
1004/* release iface when last ref is dropped */
1005static inline void
1006release_iface(struct kref *ref)
1007{
1008	struct cifs_server_iface *iface = container_of(ref,
1009						       struct cifs_server_iface,
1010						       refcount);
1011	kfree(iface);
1012}
1013
1014struct cifs_chan {
1015	unsigned int in_reconnect : 1; /* if session setup in progress for this channel */
1016	struct TCP_Server_Info *server;
1017	struct cifs_server_iface *iface; /* interface in use */
1018	__u8 signkey[SMB3_SIGN_KEY_SIZE];
1019};
1020
1021#define CIFS_SES_FLAG_SCALE_CHANNELS (0x1)
1022
1023/*
1024 * Session structure.  One of these for each uid session with a particular host
1025 */
1026struct cifs_ses {
1027	struct list_head smb_ses_list;
1028	struct list_head rlist; /* reconnect list */
1029	struct list_head tcon_list;
1030	struct cifs_tcon *tcon_ipc;
1031	spinlock_t ses_lock;  /* protect anything here that is not protected */
1032	struct mutex session_mutex;
1033	struct TCP_Server_Info *server;	/* pointer to server info */
1034	int ses_count;		/* reference counter */
1035	enum ses_status_enum ses_status;  /* updates protected by cifs_tcp_ses_lock */
1036	unsigned int overrideSecFlg; /* if non-zero override global sec flags */
1037	char *serverOS;		/* name of operating system underlying server */
1038	char *serverNOS;	/* name of network operating system of server */
1039	char *serverDomain;	/* security realm of server */
1040	__u64 Suid;		/* remote smb uid  */
1041	kuid_t linux_uid;	/* overriding owner of files on the mount */
1042	kuid_t cred_uid;	/* owner of credentials */
1043	unsigned int capabilities;
1044	char ip_addr[INET6_ADDRSTRLEN + 1]; /* Max ipv6 (or v4) addr string len */
1045	char *user_name;	/* must not be null except during init of sess
1046				   and after mount option parsing we fill it */
1047	char *domainName;
1048	char *password;
1049	char workstation_name[CIFS_MAX_WORKSTATION_LEN];
1050	struct session_key auth_key;
1051	struct ntlmssp_auth *ntlmssp; /* ciphertext, flags, server challenge */
1052	enum securityEnum sectype; /* what security flavor was specified? */
1053	bool sign;		/* is signing required? */
1054	bool domainAuto:1;
1055	bool expired_pwd;  /* track if access denied or expired pwd so can know if need to update */
1056	unsigned int flags;
1057	__u16 session_flags;
1058	__u8 smb3signingkey[SMB3_SIGN_KEY_SIZE];
1059	__u8 smb3encryptionkey[SMB3_ENC_DEC_KEY_SIZE];
1060	__u8 smb3decryptionkey[SMB3_ENC_DEC_KEY_SIZE];
1061	__u8 preauth_sha_hash[SMB2_PREAUTH_HASH_SIZE];
1062
1063	/*
1064	 * Network interfaces available on the server this session is
1065	 * connected to.
1066	 *
1067	 * Other channels can be opened by connecting and binding this
1068	 * session to interfaces from this list.
1069	 *
1070	 * iface_lock should be taken when accessing any of these fields
1071	 */
1072	spinlock_t iface_lock;
1073	/* ========= begin: protected by iface_lock ======== */
1074	struct list_head iface_list;
1075	size_t iface_count;
1076	unsigned long iface_last_update; /* jiffies */
1077	/* ========= end: protected by iface_lock ======== */
1078
1079	spinlock_t chan_lock;
1080	/* ========= begin: protected by chan_lock ======== */
1081#define CIFS_MAX_CHANNELS 16
1082#define CIFS_INVAL_CHAN_INDEX (-1)
1083#define CIFS_ALL_CHANNELS_SET(ses)	\
1084	((1UL << (ses)->chan_count) - 1)
1085#define CIFS_ALL_CHANS_GOOD(ses)		\
1086	(!(ses)->chans_need_reconnect)
1087#define CIFS_ALL_CHANS_NEED_RECONNECT(ses)	\
1088	((ses)->chans_need_reconnect == CIFS_ALL_CHANNELS_SET(ses))
1089#define CIFS_SET_ALL_CHANS_NEED_RECONNECT(ses)	\
1090	((ses)->chans_need_reconnect = CIFS_ALL_CHANNELS_SET(ses))
1091#define CIFS_CHAN_NEEDS_RECONNECT(ses, index)	\
1092	test_bit((index), &(ses)->chans_need_reconnect)
1093#define CIFS_CHAN_IN_RECONNECT(ses, index)	\
1094	((ses)->chans[(index)].in_reconnect)
1095
1096	struct cifs_chan chans[CIFS_MAX_CHANNELS];
1097	size_t chan_count;
1098	size_t chan_max;
1099	atomic_t chan_seq; /* round robin state */
1100
1101	/*
1102	 * chans_need_reconnect is a bitmap indicating which of the channels
1103	 * under this smb session needs to be reconnected.
1104	 * If not multichannel session, only one bit will be used.
1105	 *
1106	 * We will ask for sess and tcon reconnection only if all the
1107	 * channels are marked for needing reconnection. This will
1108	 * enable the sessions on top to continue to live till any
1109	 * of the channels below are active.
1110	 */
1111	unsigned long chans_need_reconnect;
1112	/* ========= end: protected by chan_lock ======== */
1113	struct cifs_ses *dfs_root_ses;
1114	struct nls_table *local_nls;
1115};
1116
1117static inline bool
1118cap_unix(struct cifs_ses *ses)
1119{
1120	return ses->server->vals->cap_unix & ses->capabilities;
1121}
1122
1123/*
1124 * common struct for holding inode info when searching for or updating an
1125 * inode with new info
1126 */
1127
1128#define CIFS_FATTR_JUNCTION		0x1
1129#define CIFS_FATTR_DELETE_PENDING	0x2
1130#define CIFS_FATTR_NEED_REVAL		0x4
1131#define CIFS_FATTR_INO_COLLISION	0x8
1132#define CIFS_FATTR_UNKNOWN_NLINK	0x10
1133#define CIFS_FATTR_FAKE_ROOT_INO	0x20
1134
1135struct cifs_fattr {
1136	u32		cf_flags;
1137	u32		cf_cifsattrs;
1138	u64		cf_uniqueid;
1139	u64		cf_eof;
1140	u64		cf_bytes;
1141	u64		cf_createtime;
1142	kuid_t		cf_uid;
1143	kgid_t		cf_gid;
1144	umode_t		cf_mode;
1145	dev_t		cf_rdev;
1146	unsigned int	cf_nlink;
1147	unsigned int	cf_dtype;
1148	struct timespec64 cf_atime;
1149	struct timespec64 cf_mtime;
1150	struct timespec64 cf_ctime;
1151	u32             cf_cifstag;
1152	char            *cf_symlink_target;
1153};
1154
1155/*
1156 * there is one of these for each connection to a resource on a particular
1157 * session
1158 */
1159struct cifs_tcon {
1160	struct list_head tcon_list;
1161	int tc_count;
1162	struct list_head rlist; /* reconnect list */
1163	spinlock_t tc_lock;  /* protect anything here that is not protected */
1164	atomic_t num_local_opens;  /* num of all opens including disconnected */
1165	atomic_t num_remote_opens; /* num of all network opens on server */
1166	struct list_head openFileList;
1167	spinlock_t open_file_lock; /* protects list above */
1168	struct cifs_ses *ses;	/* pointer to session associated with */
1169	char tree_name[MAX_TREE_SIZE + 1]; /* UNC name of resource in ASCII */
1170	char *nativeFileSystem;
1171	char *password;		/* for share-level security */
1172	__u32 tid;		/* The 4 byte tree id */
1173	__u16 Flags;		/* optional support bits */
1174	enum tid_status_enum status;
1175	atomic_t num_smbs_sent;
1176	union {
1177		struct {
1178			atomic_t num_writes;
1179			atomic_t num_reads;
1180			atomic_t num_flushes;
1181			atomic_t num_oplock_brks;
1182			atomic_t num_opens;
1183			atomic_t num_closes;
1184			atomic_t num_deletes;
1185			atomic_t num_mkdirs;
1186			atomic_t num_posixopens;
1187			atomic_t num_posixmkdirs;
1188			atomic_t num_rmdirs;
1189			atomic_t num_renames;
1190			atomic_t num_t2renames;
1191			atomic_t num_ffirst;
1192			atomic_t num_fnext;
1193			atomic_t num_fclose;
1194			atomic_t num_hardlinks;
1195			atomic_t num_symlinks;
1196			atomic_t num_locks;
1197			atomic_t num_acl_get;
1198			atomic_t num_acl_set;
1199		} cifs_stats;
1200		struct {
1201			atomic_t smb2_com_sent[NUMBER_OF_SMB2_COMMANDS];
1202			atomic_t smb2_com_failed[NUMBER_OF_SMB2_COMMANDS];
1203		} smb2_stats;
1204	} stats;
1205	__u64    bytes_read;
1206	__u64    bytes_written;
1207	spinlock_t stat_lock;  /* protects the two fields above */
1208	FILE_SYSTEM_DEVICE_INFO fsDevInfo;
1209	FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo; /* ok if fs name truncated */
1210	FILE_SYSTEM_UNIX_INFO fsUnixInfo;
1211	bool ipc:1;   /* set if connection to IPC$ share (always also pipe) */
1212	bool pipe:1;  /* set if connection to pipe share */
1213	bool print:1; /* set if connection to printer share */
1214	bool retry:1;
1215	bool nocase:1;
1216	bool nohandlecache:1; /* if strange server resource prob can turn off */
1217	bool nodelete:1;
1218	bool seal:1;      /* transport encryption for this mounted share */
1219	bool unix_ext:1;  /* if false disable Linux extensions to CIFS protocol
1220				for this mount even if server would support */
1221	bool posix_extensions; /* if true SMB3.11 posix extensions enabled */
1222	bool local_lease:1; /* check leases (only) on local system not remote */
1223	bool broken_posix_open; /* e.g. Samba server versions < 3.3.2, 3.2.9 */
1224	bool broken_sparse_sup; /* if server or share does not support sparse */
1225	bool need_reconnect:1; /* connection reset, tid now invalid */
1226	bool need_reopen_files:1; /* need to reopen tcon file handles */
1227	bool use_resilient:1; /* use resilient instead of durable handles */
1228	bool use_persistent:1; /* use persistent instead of durable handles */
1229	bool no_lease:1;    /* Do not request leases on files or directories */
1230	bool use_witness:1; /* use witness protocol */
1231	__le32 capabilities;
1232	__u32 share_flags;
1233	__u32 maximal_access;
1234	__u32 vol_serial_number;
1235	__le64 vol_create_time;
1236	__u64 snapshot_time; /* for timewarp tokens - timestamp of snapshot */
1237	__u32 handle_timeout; /* persistent and durable handle timeout in ms */
1238	__u32 ss_flags;		/* sector size flags */
1239	__u32 perf_sector_size; /* best sector size for perf */
1240	__u32 max_chunks;
1241	__u32 max_bytes_chunk;
1242	__u32 max_bytes_copy;
1243	__u32 max_cached_dirs;
1244#ifdef CONFIG_CIFS_FSCACHE
1245	u64 resource_id;		/* server resource id */
1246	struct fscache_volume *fscache;	/* cookie for share */
1247#endif
1248	struct list_head pending_opens;	/* list of incomplete opens */
1249	struct cached_fids *cfids;
1250	/* BB add field for back pointer to sb struct(s)? */
1251#ifdef CONFIG_CIFS_DFS_UPCALL
1252	struct list_head dfs_ses_list;
1253	struct delayed_work dfs_cache_work;
1254#endif
1255	struct delayed_work	query_interfaces; /* query interfaces workqueue job */
1256	char *origin_fullpath; /* canonical copy of smb3_fs_context::source */
1257};
1258
1259/*
1260 * This is a refcounted and timestamped container for a tcon pointer. The
1261 * container holds a tcon reference. It is considered safe to free one of
1262 * these when the tl_count goes to 0. The tl_time is the time of the last
1263 * "get" on the container.
1264 */
1265struct tcon_link {
1266	struct rb_node		tl_rbnode;
1267	kuid_t			tl_uid;
1268	unsigned long		tl_flags;
1269#define TCON_LINK_MASTER	0
1270#define TCON_LINK_PENDING	1
1271#define TCON_LINK_IN_TREE	2
1272	unsigned long		tl_time;
1273	atomic_t		tl_count;
1274	struct cifs_tcon	*tl_tcon;
1275};
1276
1277extern struct tcon_link *cifs_sb_tlink(struct cifs_sb_info *cifs_sb);
1278extern void smb3_free_compound_rqst(int num_rqst, struct smb_rqst *rqst);
1279
1280static inline struct cifs_tcon *
1281tlink_tcon(struct tcon_link *tlink)
1282{
1283	return tlink->tl_tcon;
1284}
1285
1286static inline struct tcon_link *
1287cifs_sb_master_tlink(struct cifs_sb_info *cifs_sb)
1288{
1289	return cifs_sb->master_tlink;
1290}
1291
1292extern void cifs_put_tlink(struct tcon_link *tlink);
1293
1294static inline struct tcon_link *
1295cifs_get_tlink(struct tcon_link *tlink)
1296{
1297	if (tlink && !IS_ERR(tlink))
1298		atomic_inc(&tlink->tl_count);
1299	return tlink;
1300}
1301
1302/* This function is always expected to succeed */
1303extern struct cifs_tcon *cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb);
1304
1305#define CIFS_OPLOCK_NO_CHANGE 0xfe
1306
1307struct cifs_pending_open {
1308	struct list_head olist;
1309	struct tcon_link *tlink;
1310	__u8 lease_key[16];
1311	__u32 oplock;
1312};
1313
1314struct cifs_deferred_close {
1315	struct list_head dlist;
1316	struct tcon_link *tlink;
1317	__u16  netfid;
1318	__u64  persistent_fid;
1319	__u64  volatile_fid;
1320};
1321
1322/*
1323 * This info hangs off the cifsFileInfo structure, pointed to by llist.
1324 * This is used to track byte stream locks on the file
1325 */
1326struct cifsLockInfo {
1327	struct list_head llist;	/* pointer to next cifsLockInfo */
1328	struct list_head blist; /* pointer to locks blocked on this */
1329	wait_queue_head_t block_q;
1330	__u64 offset;
1331	__u64 length;
1332	__u32 pid;
1333	__u16 type;
1334	__u16 flags;
1335};
1336
1337/*
1338 * One of these for each open instance of a file
1339 */
1340struct cifs_search_info {
1341	loff_t index_of_last_entry;
1342	__u16 entries_in_buffer;
1343	__u16 info_level;
1344	__u32 resume_key;
1345	char *ntwrk_buf_start;
1346	char *srch_entries_start;
1347	char *last_entry;
1348	const char *presume_name;
1349	unsigned int resume_name_len;
1350	bool endOfSearch:1;
1351	bool emptyDir:1;
1352	bool unicode:1;
1353	bool smallBuf:1; /* so we know which buf_release function to call */
1354};
1355
1356#define ACL_NO_MODE	((umode_t)(-1))
1357struct cifs_open_parms {
1358	struct cifs_tcon *tcon;
1359	struct cifs_sb_info *cifs_sb;
1360	int disposition;
1361	int desired_access;
1362	int create_options;
1363	const char *path;
1364	struct cifs_fid *fid;
1365	umode_t mode;
1366	bool reconnect:1;
1367};
1368
1369struct cifs_fid {
1370	__u16 netfid;
1371	__u64 persistent_fid;	/* persist file id for smb2 */
1372	__u64 volatile_fid;	/* volatile file id for smb2 */
1373	__u8 lease_key[SMB2_LEASE_KEY_SIZE];	/* lease key for smb2 */
1374	__u8 create_guid[16];
1375	__u32 access;
1376	struct cifs_pending_open *pending_open;
1377	unsigned int epoch;
1378#ifdef CONFIG_CIFS_DEBUG2
1379	__u64 mid;
1380#endif /* CIFS_DEBUG2 */
1381	bool purge_cache;
1382};
1383
1384struct cifs_fid_locks {
1385	struct list_head llist;
1386	struct cifsFileInfo *cfile;	/* fid that owns locks */
1387	struct list_head locks;		/* locks held by fid above */
1388};
1389
1390struct cifsFileInfo {
1391	/* following two lists are protected by tcon->open_file_lock */
1392	struct list_head tlist;	/* pointer to next fid owned by tcon */
1393	struct list_head flist;	/* next fid (file instance) for this inode */
1394	/* lock list below protected by cifsi->lock_sem */
1395	struct cifs_fid_locks *llist;	/* brlocks held by this fid */
1396	kuid_t uid;		/* allows finding which FileInfo structure */
1397	__u32 pid;		/* process id who opened file */
1398	struct cifs_fid fid;	/* file id from remote */
1399	struct list_head rlist; /* reconnect list */
1400	/* BB add lock scope info here if needed */
1401	/* lock scope id (0 if none) */
1402	struct dentry *dentry;
1403	struct tcon_link *tlink;
1404	unsigned int f_flags;
1405	bool invalidHandle:1;	/* file closed via session abend */
1406	bool swapfile:1;
1407	bool oplock_break_cancelled:1;
1408	unsigned int oplock_epoch; /* epoch from the lease break */
1409	__u32 oplock_level; /* oplock/lease level from the lease break */
1410	int count;
1411	spinlock_t file_info_lock; /* protects four flag/count fields above */
1412	struct mutex fh_mutex; /* prevents reopen race after dead ses*/
1413	struct cifs_search_info srch_inf;
1414	struct work_struct oplock_break; /* work for oplock breaks */
1415	struct work_struct put; /* work for the final part of _put */
1416	struct delayed_work deferred;
1417	bool deferred_close_scheduled; /* Flag to indicate close is scheduled */
1418	char *symlink_target;
1419};
1420
1421struct cifs_io_parms {
1422	__u16 netfid;
1423	__u64 persistent_fid;	/* persist file id for smb2 */
1424	__u64 volatile_fid;	/* volatile file id for smb2 */
1425	__u32 pid;
1426	__u64 offset;
1427	unsigned int length;
1428	struct cifs_tcon *tcon;
1429	struct TCP_Server_Info *server;
1430};
1431
1432struct cifs_aio_ctx {
1433	struct kref		refcount;
1434	struct list_head	list;
1435	struct mutex		aio_mutex;
1436	struct completion	done;
1437	struct iov_iter		iter;
1438	struct kiocb		*iocb;
1439	struct cifsFileInfo	*cfile;
1440	struct bio_vec		*bv;
1441	loff_t			pos;
1442	unsigned int		nr_pinned_pages;
1443	ssize_t			rc;
1444	unsigned int		len;
1445	unsigned int		total_len;
1446	unsigned int		bv_need_unpin;	/* If ->bv[] needs unpinning */
1447	bool			should_dirty;
1448	/*
1449	 * Indicates if this aio_ctx is for direct_io,
1450	 * If yes, iter is a copy of the user passed iov_iter
1451	 */
1452	bool			direct_io;
1453};
1454
1455/* asynchronous read support */
1456struct cifs_readdata {
1457	struct kref			refcount;
1458	struct list_head		list;
1459	struct completion		done;
1460	struct cifsFileInfo		*cfile;
1461	struct address_space		*mapping;
1462	struct cifs_aio_ctx		*ctx;
1463	__u64				offset;
1464	ssize_t				got_bytes;
1465	unsigned int			bytes;
1466	pid_t				pid;
1467	int				result;
1468	struct work_struct		work;
1469	struct iov_iter			iter;
1470	struct kvec			iov[2];
1471	struct TCP_Server_Info		*server;
1472#ifdef CONFIG_CIFS_SMB_DIRECT
1473	struct smbd_mr			*mr;
1474#endif
1475	struct cifs_credits		credits;
1476};
1477
1478/* asynchronous write support */
1479struct cifs_writedata {
1480	struct kref			refcount;
1481	struct list_head		list;
1482	struct completion		done;
1483	enum writeback_sync_modes	sync_mode;
1484	struct work_struct		work;
1485	struct cifsFileInfo		*cfile;
1486	struct cifs_aio_ctx		*ctx;
1487	struct iov_iter			iter;
1488	struct bio_vec			*bv;
1489	__u64				offset;
1490	pid_t				pid;
1491	unsigned int			bytes;
1492	int				result;
1493	struct TCP_Server_Info		*server;
1494#ifdef CONFIG_CIFS_SMB_DIRECT
1495	struct smbd_mr			*mr;
1496#endif
1497	struct cifs_credits		credits;
1498};
1499
1500/*
1501 * Take a reference on the file private data. Must be called with
1502 * cfile->file_info_lock held.
1503 */
1504static inline void
1505cifsFileInfo_get_locked(struct cifsFileInfo *cifs_file)
1506{
1507	++cifs_file->count;
1508}
1509
1510struct cifsFileInfo *cifsFileInfo_get(struct cifsFileInfo *cifs_file);
1511void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_hdlr,
1512		       bool offload);
1513void cifsFileInfo_put(struct cifsFileInfo *cifs_file);
1514
1515#define CIFS_CACHE_READ_FLG	1
1516#define CIFS_CACHE_HANDLE_FLG	2
1517#define CIFS_CACHE_RH_FLG	(CIFS_CACHE_READ_FLG | CIFS_CACHE_HANDLE_FLG)
1518#define CIFS_CACHE_WRITE_FLG	4
1519#define CIFS_CACHE_RW_FLG	(CIFS_CACHE_READ_FLG | CIFS_CACHE_WRITE_FLG)
1520#define CIFS_CACHE_RHW_FLG	(CIFS_CACHE_RW_FLG | CIFS_CACHE_HANDLE_FLG)
1521
1522#define CIFS_CACHE_READ(cinode) ((cinode->oplock & CIFS_CACHE_READ_FLG) || (CIFS_SB(cinode->netfs.inode.i_sb)->mnt_cifs_flags & CIFS_MOUNT_RO_CACHE))
1523#define CIFS_CACHE_HANDLE(cinode) (cinode->oplock & CIFS_CACHE_HANDLE_FLG)
1524#define CIFS_CACHE_WRITE(cinode) ((cinode->oplock & CIFS_CACHE_WRITE_FLG) || (CIFS_SB(cinode->netfs.inode.i_sb)->mnt_cifs_flags & CIFS_MOUNT_RW_CACHE))
1525
1526/*
1527 * One of these for each file inode
1528 */
1529
1530struct cifsInodeInfo {
1531	struct netfs_inode netfs; /* Netfslib context and vfs inode */
1532	bool can_cache_brlcks;
1533	struct list_head llist;	/* locks helb by this inode */
1534	/*
1535	 * NOTE: Some code paths call down_read(lock_sem) twice, so
1536	 * we must always use cifs_down_write() instead of down_write()
1537	 * for this semaphore to avoid deadlocks.
1538	 */
1539	struct rw_semaphore lock_sem;	/* protect the fields above */
1540	/* BB add in lists for dirty pages i.e. write caching info for oplock */
1541	struct list_head openFileList;
1542	spinlock_t	open_file_lock;	/* protects openFileList */
1543	__u32 cifsAttrs; /* e.g. DOS archive bit, sparse, compressed, system */
1544	unsigned int oplock;		/* oplock/lease level we have */
1545	unsigned int epoch;		/* used to track lease state changes */
1546#define CIFS_INODE_PENDING_OPLOCK_BREAK   (0) /* oplock break in progress */
1547#define CIFS_INODE_PENDING_WRITERS	  (1) /* Writes in progress */
1548#define CIFS_INODE_FLAG_UNUSED		  (2) /* Unused flag */
1549#define CIFS_INO_DELETE_PENDING		  (3) /* delete pending on server */
1550#define CIFS_INO_INVALID_MAPPING	  (4) /* pagecache is invalid */
1551#define CIFS_INO_LOCK			  (5) /* lock bit for synchronization */
1552#define CIFS_INO_MODIFIED_ATTR            (6) /* Indicate change in mtime/ctime */
1553#define CIFS_INO_CLOSE_ON_LOCK            (7) /* Not to defer the close when lock is set */
1554	unsigned long flags;
1555	spinlock_t writers_lock;
1556	unsigned int writers;		/* Number of writers on this inode */
1557	unsigned long time;		/* jiffies of last update of inode */
1558	u64  server_eof;		/* current file size on server -- protected by i_lock */
1559	u64  uniqueid;			/* server inode number */
1560	u64  createtime;		/* creation time on server */
1561	__u8 lease_key[SMB2_LEASE_KEY_SIZE];	/* lease key for this inode */
1562	struct list_head deferred_closes; /* list of deferred closes */
1563	spinlock_t deferred_lock; /* protection on deferred list */
1564	bool lease_granted; /* Flag to indicate whether lease or oplock is granted. */
1565	char *symlink_target;
1566	__u32 reparse_tag;
1567};
1568
1569static inline struct cifsInodeInfo *
1570CIFS_I(struct inode *inode)
1571{
1572	return container_of(inode, struct cifsInodeInfo, netfs.inode);
1573}
1574
1575static inline struct cifs_sb_info *
1576CIFS_SB(struct super_block *sb)
1577{
1578	return sb->s_fs_info;
1579}
1580
1581static inline struct cifs_sb_info *
1582CIFS_FILE_SB(struct file *file)
1583{
1584	return CIFS_SB(file_inode(file)->i_sb);
1585}
1586
1587static inline char CIFS_DIR_SEP(const struct cifs_sb_info *cifs_sb)
1588{
1589	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
1590		return '/';
1591	else
1592		return '\\';
1593}
1594
1595static inline void
1596convert_delimiter(char *path, char delim)
1597{
1598	char old_delim, *pos;
1599
1600	if (delim == '/')
1601		old_delim = '\\';
1602	else
1603		old_delim = '/';
1604
1605	pos = path;
1606	while ((pos = strchr(pos, old_delim)))
1607		*pos = delim;
1608}
1609
1610#define cifs_stats_inc atomic_inc
1611
1612static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
1613					    unsigned int bytes)
1614{
1615	if (bytes) {
1616		spin_lock(&tcon->stat_lock);
1617		tcon->bytes_written += bytes;
1618		spin_unlock(&tcon->stat_lock);
1619	}
1620}
1621
1622static inline void cifs_stats_bytes_read(struct cifs_tcon *tcon,
1623					 unsigned int bytes)
1624{
1625	spin_lock(&tcon->stat_lock);
1626	tcon->bytes_read += bytes;
1627	spin_unlock(&tcon->stat_lock);
1628}
1629
1630
1631/*
1632 * This is the prototype for the mid receive function. This function is for
1633 * receiving the rest of the SMB frame, starting with the WordCount (which is
1634 * just after the MID in struct smb_hdr). Note:
1635 *
1636 * - This will be called by cifsd, with no locks held.
1637 * - The mid will still be on the pending_mid_q.
1638 * - mid->resp_buf will point to the current buffer.
1639 *
1640 * Returns zero on a successful receive, or an error. The receive state in
1641 * the TCP_Server_Info will also be updated.
1642 */
1643typedef int (mid_receive_t)(struct TCP_Server_Info *server,
1644			    struct mid_q_entry *mid);
1645
1646/*
1647 * This is the prototype for the mid callback function. This is called once the
1648 * mid has been received off of the socket. When creating one, take special
1649 * care to avoid deadlocks. Things to bear in mind:
1650 *
1651 * - it will be called by cifsd, with no locks held
1652 * - the mid will be removed from any lists
1653 */
1654typedef void (mid_callback_t)(struct mid_q_entry *mid);
1655
1656/*
1657 * This is the protopyte for mid handle function. This is called once the mid
1658 * has been recognized after decryption of the message.
1659 */
1660typedef int (mid_handle_t)(struct TCP_Server_Info *server,
1661			    struct mid_q_entry *mid);
1662
1663/* one of these for every pending CIFS request to the server */
1664struct mid_q_entry {
1665	struct list_head qhead;	/* mids waiting on reply from this server */
1666	struct kref refcount;
1667	struct TCP_Server_Info *server;	/* server corresponding to this mid */
1668	__u64 mid;		/* multiplex id */
1669	__u16 credits;		/* number of credits consumed by this mid */
1670	__u16 credits_received;	/* number of credits from the response */
1671	__u32 pid;		/* process id */
1672	__u32 sequence_number;  /* for CIFS signing */
1673	unsigned long when_alloc;  /* when mid was created */
1674#ifdef CONFIG_CIFS_STATS2
1675	unsigned long when_sent; /* time when smb send finished */
1676	unsigned long when_received; /* when demux complete (taken off wire) */
1677#endif
1678	mid_receive_t *receive; /* call receive callback */
1679	mid_callback_t *callback; /* call completion callback */
1680	mid_handle_t *handle; /* call handle mid callback */
1681	void *callback_data;	  /* general purpose pointer for callback */
1682	struct task_struct *creator;
1683	void *resp_buf;		/* pointer to received SMB header */
1684	unsigned int resp_buf_size;
1685	int mid_state;	/* wish this were enum but can not pass to wait_event */
1686	unsigned int mid_flags;
1687	__le16 command;		/* smb command code */
1688	unsigned int optype;	/* operation type */
1689	bool large_buf:1;	/* if valid response, is pointer to large buf */
1690	bool multiRsp:1;	/* multiple trans2 responses for one request  */
1691	bool multiEnd:1;	/* both received */
1692	bool decrypted:1;	/* decrypted entry */
1693};
1694
1695struct close_cancelled_open {
1696	struct cifs_fid         fid;
1697	struct cifs_tcon        *tcon;
1698	struct work_struct      work;
1699	__u64 mid;
1700	__u16 cmd;
1701};
1702
1703/*	Make code in transport.c a little cleaner by moving
1704	update of optional stats into function below */
1705static inline void cifs_in_send_inc(struct TCP_Server_Info *server)
1706{
1707	atomic_inc(&server->in_send);
1708}
1709
1710static inline void cifs_in_send_dec(struct TCP_Server_Info *server)
1711{
1712	atomic_dec(&server->in_send);
1713}
1714
1715static inline void cifs_num_waiters_inc(struct TCP_Server_Info *server)
1716{
1717	atomic_inc(&server->num_waiters);
1718}
1719
1720static inline void cifs_num_waiters_dec(struct TCP_Server_Info *server)
1721{
1722	atomic_dec(&server->num_waiters);
1723}
1724
1725#ifdef CONFIG_CIFS_STATS2
1726static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1727{
1728	mid->when_sent = jiffies;
1729}
1730#else
1731static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1732{
1733}
1734#endif
1735
1736/* for pending dnotify requests */
1737struct dir_notify_req {
1738	struct list_head lhead;
1739	__le16 Pid;
1740	__le16 PidHigh;
1741	__u16 Mid;
1742	__u16 Tid;
1743	__u16 Uid;
1744	__u16 netfid;
1745	__u32 filter; /* CompletionFilter (for multishot) */
1746	int multishot;
1747	struct file *pfile;
1748};
1749
1750struct dfs_info3_param {
1751	int flags; /* DFSREF_REFERRAL_SERVER, DFSREF_STORAGE_SERVER*/
1752	int path_consumed;
1753	int server_type;
1754	int ref_flag;
1755	char *path_name;
1756	char *node_name;
1757	int ttl;
1758};
1759
1760struct file_list {
1761	struct list_head list;
1762	struct cifsFileInfo *cfile;
1763};
1764
1765struct cifs_mount_ctx {
1766	struct cifs_sb_info *cifs_sb;
1767	struct smb3_fs_context *fs_ctx;
1768	unsigned int xid;
1769	struct TCP_Server_Info *server;
1770	struct cifs_ses *ses;
1771	struct cifs_tcon *tcon;
1772	struct list_head dfs_ses_list;
1773};
1774
1775static inline void __free_dfs_info_param(struct dfs_info3_param *param)
1776{
1777	kfree(param->path_name);
1778	kfree(param->node_name);
1779}
1780
1781static inline void free_dfs_info_param(struct dfs_info3_param *param)
1782{
1783	if (param)
1784		__free_dfs_info_param(param);
1785}
1786
1787static inline void zfree_dfs_info_param(struct dfs_info3_param *param)
1788{
1789	if (param) {
1790		__free_dfs_info_param(param);
1791		memset(param, 0, sizeof(*param));
1792	}
1793}
1794
1795static inline void free_dfs_info_array(struct dfs_info3_param *param,
1796				       int number_of_items)
1797{
1798	int i;
1799
1800	if ((number_of_items == 0) || (param == NULL))
1801		return;
1802	for (i = 0; i < number_of_items; i++) {
1803		kfree(param[i].path_name);
1804		kfree(param[i].node_name);
1805	}
1806	kfree(param);
1807}
1808
1809static inline bool is_interrupt_error(int error)
1810{
1811	switch (error) {
1812	case -EINTR:
1813	case -ERESTARTSYS:
1814	case -ERESTARTNOHAND:
1815	case -ERESTARTNOINTR:
1816		return true;
1817	}
1818	return false;
1819}
1820
1821static inline bool is_retryable_error(int error)
1822{
1823	if (is_interrupt_error(error) || error == -EAGAIN)
1824		return true;
1825	return false;
1826}
1827
1828static inline bool is_replayable_error(int error)
1829{
1830	if (error == -EAGAIN || error == -ECONNABORTED)
1831		return true;
1832	return false;
1833}
1834
1835
1836/* cifs_get_writable_file() flags */
1837#define FIND_WR_ANY         0
1838#define FIND_WR_FSUID_ONLY  1
1839#define FIND_WR_WITH_DELETE 2
1840
1841#define   MID_FREE 0
1842#define   MID_REQUEST_ALLOCATED 1
1843#define   MID_REQUEST_SUBMITTED 2
1844#define   MID_RESPONSE_RECEIVED 4
1845#define   MID_RETRY_NEEDED      8 /* session closed while this request out */
1846#define   MID_RESPONSE_MALFORMED 0x10
1847#define   MID_SHUTDOWN		 0x20
1848#define   MID_RESPONSE_READY 0x40 /* ready for other process handle the rsp */
1849
1850/* Flags */
1851#define   MID_WAIT_CANCELLED	 1 /* Cancelled while waiting for response */
1852#define   MID_DELETED            2 /* Mid has been dequeued/deleted */
1853
1854/* Types of response buffer returned from SendReceive2 */
1855#define   CIFS_NO_BUFFER        0    /* Response buffer not returned */
1856#define   CIFS_SMALL_BUFFER     1
1857#define   CIFS_LARGE_BUFFER     2
1858#define   CIFS_IOVEC            4    /* array of response buffers */
1859
1860/* Type of Request to SendReceive2 */
1861#define   CIFS_BLOCKING_OP      1    /* operation can block */
1862#define   CIFS_NON_BLOCKING     2    /* do not block waiting for credits */
1863#define   CIFS_TIMEOUT_MASK 0x003    /* only one of above set in req */
1864#define   CIFS_LOG_ERROR    0x010    /* log NT STATUS if non-zero */
1865#define   CIFS_LARGE_BUF_OP 0x020    /* large request buffer */
1866#define   CIFS_NO_RSP_BUF   0x040    /* no response buffer required */
1867
1868/* Type of request operation */
1869#define   CIFS_ECHO_OP            0x080  /* echo request */
1870#define   CIFS_OBREAK_OP          0x0100 /* oplock break request */
1871#define   CIFS_NEG_OP             0x0200 /* negotiate request */
1872#define   CIFS_CP_CREATE_CLOSE_OP 0x0400 /* compound create+close request */
1873/* Lower bitmask values are reserved by others below. */
1874#define   CIFS_SESS_OP            0x2000 /* session setup request */
1875#define   CIFS_OP_MASK            0x2780 /* mask request type */
1876
1877#define   CIFS_HAS_CREDITS        0x0400 /* already has credits */
1878#define   CIFS_TRANSFORM_REQ      0x0800 /* transform request before sending */
1879#define   CIFS_NO_SRV_RSP         0x1000 /* there is no server response */
1880
1881/* Security Flags: indicate type of session setup needed */
1882#define   CIFSSEC_MAY_SIGN	0x00001
1883#define   CIFSSEC_MAY_NTLMV2	0x00004
1884#define   CIFSSEC_MAY_KRB5	0x00008
1885#define   CIFSSEC_MAY_SEAL	0x00040 /* not supported yet */
1886#define   CIFSSEC_MAY_NTLMSSP	0x00080 /* raw ntlmssp with ntlmv2 */
1887
1888#define   CIFSSEC_MUST_SIGN	0x01001
1889/* note that only one of the following can be set so the
1890result of setting MUST flags more than once will be to
1891require use of the stronger protocol */
1892#define   CIFSSEC_MUST_NTLMV2	0x04004
1893#define   CIFSSEC_MUST_KRB5	0x08008
1894#ifdef CONFIG_CIFS_UPCALL
1895#define   CIFSSEC_MASK          0x8F08F /* flags supported if no weak allowed */
1896#else
1897#define	  CIFSSEC_MASK          0x87087 /* flags supported if no weak allowed */
1898#endif /* UPCALL */
1899#define   CIFSSEC_MUST_SEAL	0x40040 /* not supported yet */
1900#define   CIFSSEC_MUST_NTLMSSP	0x80080 /* raw ntlmssp with ntlmv2 */
1901
1902#define   CIFSSEC_DEF (CIFSSEC_MAY_SIGN | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_NTLMSSP)
1903#define   CIFSSEC_MAX (CIFSSEC_MUST_NTLMV2)
1904#define   CIFSSEC_AUTH_MASK (CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_KRB5 | CIFSSEC_MAY_NTLMSSP)
1905/*
1906 *****************************************************************
1907 * All constants go here
1908 *****************************************************************
1909 */
1910
1911#define UID_HASH (16)
1912
1913/*
1914 * Note that ONE module should define _DECLARE_GLOBALS_HERE to cause the
1915 * following to be declared.
1916 */
1917
1918/****************************************************************************
1919 * Here are all the locks (spinlock, mutex, semaphore) in cifs.ko, arranged according
1920 * to the locking order. i.e. if two locks are to be held together, the lock that
1921 * appears higher in this list needs to be taken before the other.
1922 *
1923 * If you hold a lock that is lower in this list, and you need to take a higher lock
1924 * (or if you think that one of the functions that you're calling may need to), first
1925 * drop the lock you hold, pick up the higher lock, then the lower one. This will
1926 * ensure that locks are picked up only in one direction in the below table
1927 * (top to bottom).
1928 *
1929 * Also, if you expect a function to be called with a lock held, explicitly document
1930 * this in the comments on top of your function definition.
1931 *
1932 * And also, try to keep the critical sections (lock hold time) to be as minimal as
1933 * possible. Blocking / calling other functions with a lock held always increase
1934 * the risk of a possible deadlock.
1935 *
1936 * Following this rule will avoid unnecessary deadlocks, which can get really hard to
1937 * debug. Also, any new lock that you introduce, please add to this list in the correct
1938 * order.
1939 *
1940 * Please populate this list whenever you introduce new locks in your changes. Or in
1941 * case I've missed some existing locks. Please ensure that it's added in the list
1942 * based on the locking order expected.
1943 *
1944 * =====================================================================================
1945 * Lock				Protects			Initialization fn
1946 * =====================================================================================
1947 * vol_list_lock
1948 * vol_info->ctx_lock		vol_info->ctx
1949 * cifs_sb_info->tlink_tree_lock	cifs_sb_info->tlink_tree	cifs_setup_cifs_sb
1950 * TCP_Server_Info->		TCP_Server_Info			cifs_get_tcp_session
1951 * reconnect_mutex
1952 * TCP_Server_Info->srv_mutex	TCP_Server_Info			cifs_get_tcp_session
1953 * cifs_ses->session_mutex		cifs_ses		sesInfoAlloc
1954 *				cifs_tcon
1955 * cifs_tcon->open_file_lock	cifs_tcon->openFileList		tconInfoAlloc
1956 *				cifs_tcon->pending_opens
1957 * cifs_tcon->stat_lock		cifs_tcon->bytes_read		tconInfoAlloc
1958 *				cifs_tcon->bytes_written
1959 * cifs_tcp_ses_lock		cifs_tcp_ses_list		sesInfoAlloc
1960 * GlobalMid_Lock		GlobalMaxActiveXid		init_cifs
1961 *				GlobalCurrentXid
1962 *				GlobalTotalActiveXid
1963 * TCP_Server_Info->srv_lock	(anything in struct not protected by another lock and can change)
1964 * TCP_Server_Info->mid_lock	TCP_Server_Info->pending_mid_q	cifs_get_tcp_session
1965 *				->CurrentMid
1966 *				(any changes in mid_q_entry fields)
1967 * TCP_Server_Info->req_lock	TCP_Server_Info->in_flight	cifs_get_tcp_session
1968 *				->credits
1969 *				->echo_credits
1970 *				->oplock_credits
1971 *				->reconnect_instance
1972 * cifs_ses->ses_lock		(anything that is not protected by another lock and can change)
1973 * cifs_ses->iface_lock		cifs_ses->iface_list		sesInfoAlloc
1974 *				->iface_count
1975 *				->iface_last_update
1976 * cifs_ses->chan_lock		cifs_ses->chans
1977 *				->chans_need_reconnect
1978 *				->chans_in_reconnect
1979 * cifs_tcon->tc_lock		(anything that is not protected by another lock and can change)
1980 * cifsInodeInfo->open_file_lock	cifsInodeInfo->openFileList	cifs_alloc_inode
1981 * cifsInodeInfo->writers_lock	cifsInodeInfo->writers		cifsInodeInfo_alloc
1982 * cifsInodeInfo->lock_sem	cifsInodeInfo->llist		cifs_init_once
1983 *				->can_cache_brlcks
1984 * cifsInodeInfo->deferred_lock	cifsInodeInfo->deferred_closes	cifsInodeInfo_alloc
1985 * cached_fid->fid_mutex		cifs_tcon->crfid		tcon_info_alloc
1986 * cifsFileInfo->fh_mutex		cifsFileInfo			cifs_new_fileinfo
1987 * cifsFileInfo->file_info_lock	cifsFileInfo->count		cifs_new_fileinfo
1988 *				->invalidHandle			initiate_cifs_search
1989 *				->oplock_break_cancelled
1990 * cifs_aio_ctx->aio_mutex		cifs_aio_ctx			cifs_aio_ctx_alloc
1991 ****************************************************************************/
1992
1993#ifdef DECLARE_GLOBALS_HERE
1994#define GLOBAL_EXTERN
1995#else
1996#define GLOBAL_EXTERN extern
1997#endif
1998
1999/*
2000 * the list of TCP_Server_Info structures, ie each of the sockets
2001 * connecting our client to a distinct server (ip address), is
2002 * chained together by cifs_tcp_ses_list. The list of all our SMB
2003 * sessions (and from that the tree connections) can be found
2004 * by iterating over cifs_tcp_ses_list
2005 */
2006extern struct list_head		cifs_tcp_ses_list;
2007
2008/*
2009 * This lock protects the cifs_tcp_ses_list, the list of smb sessions per
2010 * tcp session, and the list of tcon's per smb session. It also protects
2011 * the reference counters for the server, smb session, and tcon.
2012 * generally the locks should be taken in order tcp_ses_lock before
2013 * tcon->open_file_lock and that before file->file_info_lock since the
2014 * structure order is cifs_socket-->cifs_ses-->cifs_tcon-->cifs_file
2015 */
2016extern spinlock_t		cifs_tcp_ses_lock;
2017
2018/*
2019 * Global transaction id (XID) information
2020 */
2021extern unsigned int GlobalCurrentXid;	/* protected by GlobalMid_Sem */
2022extern unsigned int GlobalTotalActiveXid; /* prot by GlobalMid_Sem */
2023extern unsigned int GlobalMaxActiveXid;	/* prot by GlobalMid_Sem */
2024extern spinlock_t GlobalMid_Lock; /* protects above & list operations on midQ entries */
2025
2026/*
2027 *  Global counters, updated atomically
2028 */
2029extern atomic_t sesInfoAllocCount;
2030extern atomic_t tconInfoAllocCount;
2031extern atomic_t tcpSesNextId;
2032extern atomic_t tcpSesAllocCount;
2033extern atomic_t tcpSesReconnectCount;
2034extern atomic_t tconInfoReconnectCount;
2035
2036/* Various Debug counters */
2037extern atomic_t buf_alloc_count;	/* current number allocated  */
2038extern atomic_t small_buf_alloc_count;
2039#ifdef CONFIG_CIFS_STATS2
2040extern atomic_t total_buf_alloc_count; /* total allocated over all time */
2041extern atomic_t total_small_buf_alloc_count;
2042extern unsigned int slow_rsp_threshold; /* number of secs before logging */
2043#endif
2044
2045/* Misc globals */
2046extern bool enable_oplocks; /* enable or disable oplocks */
2047extern bool lookupCacheEnabled;
2048extern unsigned int global_secflags;	/* if on, session setup sent
2049				with more secure ntlmssp2 challenge/resp */
2050extern unsigned int sign_CIFS_PDUs;  /* enable smb packet signing */
2051extern bool enable_gcm_256; /* allow optional negotiate of strongest signing (aes-gcm-256) */
2052extern bool require_gcm_256; /* require use of strongest signing (aes-gcm-256) */
2053extern bool enable_negotiate_signing; /* request use of faster (GMAC) signing if available */
2054extern bool linuxExtEnabled;/*enable Linux/Unix CIFS extensions*/
2055extern unsigned int CIFSMaxBufSize;  /* max size not including hdr */
2056extern unsigned int cifs_min_rcv;    /* min size of big ntwrk buf pool */
2057extern unsigned int cifs_min_small;  /* min size of small buf pool */
2058extern unsigned int cifs_max_pending; /* MAX requests at once to server*/
2059extern unsigned int dir_cache_timeout; /* max time for directory lease caching of dir */
2060extern bool disable_legacy_dialects;  /* forbid vers=1.0 and vers=2.0 mounts */
2061extern atomic_t mid_count;
2062
2063void cifs_oplock_break(struct work_struct *work);
2064void cifs_queue_oplock_break(struct cifsFileInfo *cfile);
2065void smb2_deferred_work_close(struct work_struct *work);
2066
2067extern const struct slow_work_ops cifs_oplock_break_ops;
2068extern struct workqueue_struct *cifsiod_wq;
2069extern struct workqueue_struct *decrypt_wq;
2070extern struct workqueue_struct *fileinfo_put_wq;
2071extern struct workqueue_struct *cifsoplockd_wq;
2072extern struct workqueue_struct *deferredclose_wq;
2073extern __u32 cifs_lock_secret;
2074
2075extern mempool_t *cifs_mid_poolp;
2076
2077/* Operations for different SMB versions */
2078#define SMB1_VERSION_STRING	"1.0"
2079#define SMB20_VERSION_STRING    "2.0"
2080#ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
2081extern struct smb_version_operations smb1_operations;
2082extern struct smb_version_values smb1_values;
2083extern struct smb_version_operations smb20_operations;
2084extern struct smb_version_values smb20_values;
2085#endif /* CIFS_ALLOW_INSECURE_LEGACY */
2086#define SMB21_VERSION_STRING	"2.1"
2087extern struct smb_version_operations smb21_operations;
2088extern struct smb_version_values smb21_values;
2089#define SMBDEFAULT_VERSION_STRING "default"
2090extern struct smb_version_values smbdefault_values;
2091#define SMB3ANY_VERSION_STRING "3"
2092extern struct smb_version_values smb3any_values;
2093#define SMB30_VERSION_STRING	"3.0"
2094extern struct smb_version_operations smb30_operations;
2095extern struct smb_version_values smb30_values;
2096#define SMB302_VERSION_STRING	"3.02"
2097#define ALT_SMB302_VERSION_STRING "3.0.2"
2098/*extern struct smb_version_operations smb302_operations;*/ /* not needed yet */
2099extern struct smb_version_values smb302_values;
2100#define SMB311_VERSION_STRING	"3.1.1"
2101#define ALT_SMB311_VERSION_STRING "3.11"
2102extern struct smb_version_operations smb311_operations;
2103extern struct smb_version_values smb311_values;
2104
2105static inline char *get_security_type_str(enum securityEnum sectype)
2106{
2107	switch (sectype) {
2108	case RawNTLMSSP:
2109		return "RawNTLMSSP";
2110	case Kerberos:
2111		return "Kerberos";
2112	case NTLMv2:
2113		return "NTLMv2";
2114	default:
2115		return "Unknown";
2116	}
2117}
2118
2119static inline bool is_smb1_server(struct TCP_Server_Info *server)
2120{
2121	return strcmp(server->vals->version_string, SMB1_VERSION_STRING) == 0;
2122}
2123
2124static inline bool is_tcon_dfs(struct cifs_tcon *tcon)
2125{
2126	/*
2127	 * For SMB1, see MS-CIFS 2.4.55 SMB_COM_TREE_CONNECT_ANDX (0x75) and MS-CIFS 3.3.4.4 DFS
2128	 * Subsystem Notifies That a Share Is a DFS Share.
2129	 *
2130	 * For SMB2+, see MS-SMB2 2.2.10 SMB2 TREE_CONNECT Response and MS-SMB2 3.3.4.14 Server
2131	 * Application Updates a Share.
2132	 */
2133	if (!tcon || !tcon->ses || !tcon->ses->server)
2134		return false;
2135	return is_smb1_server(tcon->ses->server) ? tcon->Flags & SMB_SHARE_IS_IN_DFS :
2136		tcon->share_flags & (SHI1005_FLAGS_DFS | SHI1005_FLAGS_DFS_ROOT);
2137}
2138
2139static inline bool cifs_is_referral_server(struct cifs_tcon *tcon,
2140					   const struct dfs_info3_param *ref)
2141{
2142	/*
2143	 * Check if all targets are capable of handling DFS referrals as per
2144	 * MS-DFSC 2.2.4 RESP_GET_DFS_REFERRAL.
2145	 */
2146	return is_tcon_dfs(tcon) || (ref && (ref->flags & DFSREF_REFERRAL_SERVER));
2147}
2148
2149static inline u64 cifs_flock_len(const struct file_lock *fl)
2150{
2151	return (u64)fl->fl_end - fl->fl_start + 1;
2152}
2153
2154static inline size_t ntlmssp_workstation_name_size(const struct cifs_ses *ses)
2155{
2156	if (WARN_ON_ONCE(!ses || !ses->server))
2157		return 0;
2158	/*
2159	 * Make workstation name no more than 15 chars when using insecure dialects as some legacy
2160	 * servers do require it during NTLMSSP.
2161	 */
2162	if (ses->server->dialect <= SMB20_PROT_ID)
2163		return min_t(size_t, sizeof(ses->workstation_name), RFC1001_NAME_LEN_WITH_NULL);
2164	return sizeof(ses->workstation_name);
2165}
2166
2167static inline void move_cifs_info_to_smb2(struct smb2_file_all_info *dst, const FILE_ALL_INFO *src)
2168{
2169	memcpy(dst, src, (size_t)((u8 *)&src->AccessFlags - (u8 *)src));
2170	dst->AccessFlags = src->AccessFlags;
2171	dst->CurrentByteOffset = src->CurrentByteOffset;
2172	dst->Mode = src->Mode;
2173	dst->AlignmentRequirement = src->AlignmentRequirement;
2174	dst->FileNameLength = src->FileNameLength;
2175}
2176
2177static inline int cifs_get_num_sgs(const struct smb_rqst *rqst,
2178				   int num_rqst,
2179				   const u8 *sig)
2180{
2181	unsigned int len, skip;
2182	unsigned int nents = 0;
2183	unsigned long addr;
2184	size_t data_size;
2185	int i, j;
2186
2187	/*
2188	 * The first rqst has a transform header where the first 20 bytes are
2189	 * not part of the encrypted blob.
2190	 */
2191	skip = 20;
2192
2193	/* Assumes the first rqst has a transform header as the first iov.
2194	 * I.e.
2195	 * rqst[0].rq_iov[0]  is transform header
2196	 * rqst[0].rq_iov[1+] data to be encrypted/decrypted
2197	 * rqst[1+].rq_iov[0+] data to be encrypted/decrypted
2198	 */
2199	for (i = 0; i < num_rqst; i++) {
2200		data_size = iov_iter_count(&rqst[i].rq_iter);
2201
2202		/* We really don't want a mixture of pinned and unpinned pages
2203		 * in the sglist.  It's hard to keep track of which is what.
2204		 * Instead, we convert to a BVEC-type iterator higher up.
2205		 */
2206		if (data_size &&
2207		    WARN_ON_ONCE(user_backed_iter(&rqst[i].rq_iter)))
2208			return -EIO;
2209
2210		/* We also don't want to have any extra refs or pins to clean
2211		 * up in the sglist.
2212		 */
2213		if (data_size &&
2214		    WARN_ON_ONCE(iov_iter_extract_will_pin(&rqst[i].rq_iter)))
2215			return -EIO;
2216
2217		for (j = 0; j < rqst[i].rq_nvec; j++) {
2218			struct kvec *iov = &rqst[i].rq_iov[j];
2219
2220			addr = (unsigned long)iov->iov_base + skip;
2221			if (unlikely(is_vmalloc_addr((void *)addr))) {
2222				len = iov->iov_len - skip;
2223				nents += DIV_ROUND_UP(offset_in_page(addr) + len,
2224						      PAGE_SIZE);
2225			} else {
2226				nents++;
2227			}
2228			skip = 0;
2229		}
2230		if (data_size)
2231			nents += iov_iter_npages(&rqst[i].rq_iter, INT_MAX);
2232	}
2233	nents += DIV_ROUND_UP(offset_in_page(sig) + SMB2_SIGNATURE_SIZE, PAGE_SIZE);
2234	return nents;
2235}
2236
2237/* We can not use the normal sg_set_buf() as we will sometimes pass a
2238 * stack object as buf.
2239 */
2240static inline void cifs_sg_set_buf(struct sg_table *sgtable,
2241				   const void *buf,
2242				   unsigned int buflen)
2243{
2244	unsigned long addr = (unsigned long)buf;
2245	unsigned int off = offset_in_page(addr);
2246
2247	addr &= PAGE_MASK;
2248	if (unlikely(is_vmalloc_addr((void *)addr))) {
2249		do {
2250			unsigned int len = min_t(unsigned int, buflen, PAGE_SIZE - off);
2251
2252			sg_set_page(&sgtable->sgl[sgtable->nents++],
2253				    vmalloc_to_page((void *)addr), len, off);
2254
2255			off = 0;
2256			addr += PAGE_SIZE;
2257			buflen -= len;
2258		} while (buflen);
2259	} else {
2260		sg_set_page(&sgtable->sgl[sgtable->nents++],
2261			    virt_to_page((void *)addr), buflen, off);
2262	}
2263}
2264
2265struct smb2_compound_vars {
2266	struct cifs_open_parms oparms;
2267	struct kvec rsp_iov[3];
2268	struct smb_rqst rqst[3];
2269	struct kvec open_iov[SMB2_CREATE_IOV_SIZE];
2270	struct kvec qi_iov;
2271	struct kvec io_iov[SMB2_IOCTL_IOV_SIZE];
2272	struct kvec si_iov[SMB2_SET_INFO_IOV_SIZE];
2273	struct kvec close_iov;
2274	struct smb2_file_rename_info rename_info;
2275	struct smb2_file_link_info link_info;
2276};
2277
2278#endif	/* _CIFS_GLOB_H */
2279