Blame view

fs/cifs/cifsglob.h 24.1 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
  /*
   *   fs/cifs/cifsglob.h
   *
366781c19   Steve French   [CIFS] DFS build ...
4
   *   Copyright (C) International Business Machines  Corp., 2002,2008
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
   *   Author(s): Steve French (sfrench@us.ibm.com)
7ee1af765   Jeremy Allison   [CIFS]
6
   *              Jeremy Allison (jra@samba.org)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
9
10
11
12
13
14
15
16
   *
   *   This library is free software; you can redistribute it and/or modify
   *   it under the terms of the GNU Lesser General Public License as published
   *   by the Free Software Foundation; either version 2.1 of the License, or
   *   (at your option) any later version.
   *
   *   This library is distributed in the hope that it will be useful,
   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
   *   the GNU Lesser General Public License for more details.
d38d8c74c   Steve French   [CIFS] whitespace...
17
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
18
   */
abd2e44dc   Suresh Jayaraman   cifs: guard cifsg...
19
20
  #ifndef _CIFS_GLOB_H
  #define _CIFS_GLOB_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
  #include <linux/in.h>
  #include <linux/in6.h>
5a0e3ad6a   Tejun Heo   include cleanup: ...
23
  #include <linux/slab.h>
9b6469724   Tejun Heo   cifs: use workque...
24
  #include <linux/workqueue.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
25
  #include "cifs_fs_sb.h"
442aa310f   Steve French   [CIFS] Support fo...
26
  #include "cifsacl.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
27
28
29
30
31
32
  /*
   * The sizes of various internal tables and strings
   */
  #define MAX_UID_INFO 16
  #define MAX_SES_INFO 2
  #define MAX_TCON_INFO 4
ef571cadd   Shirish Pargaonkar   [CIFS] Fix warnin...
33
  #define MAX_TREE_SIZE (2 + MAX_SERVER_SIZE + 1 + MAX_SHARE_SIZE + 1)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34
  #define MAX_SERVER_SIZE 15
d38d8c74c   Steve French   [CIFS] whitespace...
35
  #define MAX_SHARE_SIZE  64	/* used to be 20, this should still be enough */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
36
37
  #define MAX_USERNAME_SIZE 32	/* 32 is to allow for 15 char names + null
  				   termination then *2 for unicode versions */
4ff67b720   Jeff Layton   cifs: clean up ci...
38
  #define MAX_PASSWORD_SIZE 512  /* max for windows seems to be 256 wide chars */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
39
40
41
42
43
  
  #define CIFS_MIN_RCV_POOL 4
  
  /*
   * MAX_REQ is the maximum number of requests that WE will send
af901ca18   AndrĂ© Goddard Rosa   tree-wide: fix as...
44
   * on one socket concurrently. It also matches the most common
d38d8c74c   Steve French   [CIFS] whitespace...
45
   * value of max multiplex returned by servers.  We may
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
46
47
48
49
50
   * eventually want to use the negotiated value (in case
   * future servers can handle more) when we are more confident that
   * we will not have problems oveloading the socket with pending
   * write data.
   */
d38d8c74c   Steve French   [CIFS] whitespace...
51
  #define CIFS_MAX_REQ 50
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
52

8ecaf67a8   Jeff Layton   cifs: account for...
53
54
55
56
57
  #define RFC1001_NAME_LEN 15
  #define RFC1001_NAME_LEN_WITH_NULL (RFC1001_NAME_LEN + 1)
  
  /* currently length of NIP6_FMT */
  #define SERVER_NAME_LENGTH 40
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
59
60
61
62
63
64
65
  #define SERVER_NAME_LEN_WITH_NULL     (SERVER_NAME_LENGTH + 1)
  
  /* used to define string lengths for reversing unicode strings */
  /*         (256+1)*2 = 514                                     */
  /*           (max path length + 1 for null) * 2 for unicode    */
  #define MAX_NAME 514
  
  #include "cifspdu.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
66
67
68
69
70
  #ifndef XATTR_DOS_ATTRIB
  #define XATTR_DOS_ATTRIB "user.DOSATTRIB"
  #endif
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
71
72
73
74
75
76
77
78
79
80
81
82
   * CIFS vfs client Status information (based on what we know.)
   */
  
   /* associated with each tcp and smb session */
  enum statusEnum {
  	CifsNew = 0,
  	CifsGood,
  	CifsExiting,
  	CifsNeedReconnect
  };
  
  enum securityEnum {
daf5b0b6f   Jeff Layton   cifs: match secTy...
83
  	LANMAN = 0,			/* Legacy LANMAN auth */
3979877e5   Steve French   [CIFS] Support fo...
84
  	NTLM,			/* Legacy NTLM012 auth with NTLM hash */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
85
  	NTLMv2,			/* Legacy NTLM auth with NTLMv2 hash */
ac6839246   Steve French   [CIFS] Allow raw ...
86
  	RawNTLMSSP,		/* NTLMSSP without SPNEGO, NTLMv2 hash */
f46c7234e   Steve French   [CIFS] cleanup as...
87
  /*	NTLMSSP, */ /* can use rawNTLMSSP instead of NTLMSSP via SPNEGO */
c16fefa56   Steve French   [CIFS] distinguis...
88
  	Kerberos,		/* Kerberos via SPNEGO */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
89
90
91
  };
  
  enum protocolEnum {
3ec332ef7   Steve French   [CIFS] clean up s...
92
  	TCP = 0,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
93
94
95
  	SCTP
  	/* Netbios frames protocol not supported at this time */
  };
b609f06ac   Steve French   [CIFS] Fix packet...
96
97
98
99
  struct mac_key {
  	unsigned int len;
  	union {
  		char ntlm[CIFS_SESS_KEY_SIZE + 16];
2442421b1   Steve French   [CIFS] Have CIFS_...
100
  		char krb5[CIFS_SESS_KEY_SIZE + 16]; /* BB: length correct? */
b609f06ac   Steve French   [CIFS] Fix packet...
101
102
103
104
105
106
  		struct {
  			char key[16];
  			struct ntlmv2_resp resp;
  		} ntlmv2;
  	} data;
  };
442aa310f   Steve French   [CIFS] Support fo...
107
108
109
110
111
112
113
114
115
116
  struct cifs_cred {
  	int uid;
  	int gid;
  	int mode;
  	int cecount;
  	struct cifs_sid osid;
  	struct cifs_sid gsid;
  	struct cifs_ntace *ntaces;
  	struct cifs_ace *aces;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
117
118
119
120
121
122
123
124
  /*
   *****************************************************************
   * Except the CIFS PDUs themselves all the
   * globally interesting structs should go here
   *****************************************************************
   */
  
  struct TCP_Server_Info {
3b7952109   Steve French   [CIFS] Fix cifs r...
125
126
  	struct list_head tcp_ses_list;
  	struct list_head smb_ses_list;
e7ddee903   Jeff Layton   cifs: disable sha...
127
  	int srv_count; /* reference counter */
a10faeb2a   Steve French   [CIFS] Support fo...
128
  	/* 15 character server name + 0x20 16th byte indicating type = srv */
8ecaf67a8   Jeff Layton   cifs: account for...
129
  	char server_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
c359cf3c6   Jeff Layton   [CIFS] add hostna...
130
  	char *hostname; /* hostname portion of UNC string */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
132
133
134
135
  	struct socket *ssocket;
  	union {
  		struct sockaddr_in sockAddr;
  		struct sockaddr_in6 sockAddr6;
  	} addr;
d38d8c74c   Steve French   [CIFS] whitespace...
136
  	wait_queue_head_t response_q;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
137
138
139
140
  	wait_queue_head_t request_q; /* if more than maxmpx to srvr must block*/
  	struct list_head pending_mid_q;
  	void *Server_NlsInfo;	/* BB - placeholder for future NLS info  */
  	unsigned short server_codepage;	/* codepage for the server    */
d38d8c74c   Steve French   [CIFS] whitespace...
141
  	enum protocolEnum protocolType;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
143
  	char versionMajor;
  	char versionMinor;
4b18f2a9c   Steve French   [CIFS] convert us...
144
  	bool svlocal:1;			/* local server or remote */
edf1ae403   Steve French   [CIFS] Reduce num...
145
146
  	bool noblocksnd;		/* use blocking sendmsg */
  	bool noautotune;		/* do not autotune send buf sizes */
6a5fa2362   Steve French   [CIFS] Add suppor...
147
  	bool tcp_nodelay;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
148
  	atomic_t inFlight;  /* number of requests on the wire to server */
131afd0b7   Steve French   [CIFS] /proc/fs/c...
149
150
151
152
  #ifdef CONFIG_CIFS_STATS2
  	atomic_t inSend; /* requests trying to send */
  	atomic_t num_waiters;   /* blocked waiting to get in sendrecv */
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
153
  	enum statusEnum tcpStatus; /* what we think the status is */
72ca545b2   Jeff Layton   cifs: convert tcp...
154
  	struct mutex srv_mutex;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
155
156
157
158
159
160
161
162
163
  	struct task_struct *tsk;
  	char server_GUID[16];
  	char secMode;
  	enum securityEnum secType;
  	unsigned int maxReq;	/* Clients should submit no more */
  	/* than maxReq distinct unanswered SMBs to the server when using  */
  	/* multiplexed reads or writes */
  	unsigned int maxBuf;	/* maxBuf specifies the maximum */
  	/* message size the server can send or receive for non-raw SMBs */
eca6acf91   Steve French   [CIFS] Fix multiu...
164
  	unsigned int max_rw;	/* maxRw specifies the maximum */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
165
166
  	/* message size the server can send or receive for */
  	/* SMB_COM_WRITE_RAW or SMB_COM_READ_RAW. */
eca6acf91   Steve French   [CIFS] Fix multiu...
167
168
169
  	unsigned int max_vcs;	/* maximum number of smb sessions, at least
  				   those that can be specified uniquely with
  				   vcnumbers */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
170
171
172
  	char sessid[4];		/* unique token id for this session */
  	/* (returned on Negotiate */
  	int capabilities; /* allow selective disabling of caps by smb sess */
de7ed55db   Steve French   [CIFS] Make use o...
173
  	int timeAdj;  /* Adjust for difference in server time zone in sec */
1982c344f   Steve French   [CIFS] Ensure tha...
174
  	__u16 CurrentMid;         /* multiplex id - rotating counter */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
175
  	char cryptKey[CIFS_CRYPTO_KEY_SIZE];
a10faeb2a   Steve French   [CIFS] Support fo...
176
  	/* 16th byte of RFC1001 workstation name is always null */
8ecaf67a8   Jeff Layton   cifs: account for...
177
  	char workstation_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
ad009ac96   Steve French   [PATCH] cifs: Fix...
178
  	__u32 sequence_number; /* needed for CIFS PDU signature */
b609f06ac   Steve French   [CIFS] Fix packet...
179
180
  	struct mac_key mac_signing_key;
  	char ntlmv2_hash[16];
3a5ff61c1   Steve French   [CIFS] Do not tim...
181
  	unsigned long lstrp; /* when we got last response from this server */
9bf67e516   Jeff Layton   cifs: save the di...
182
  	u16 dialect; /* dialect index that server chose */
26efa0bac   Jeff Layton   cifs: have decode...
183
184
185
186
187
  	/* extended security flavors that server supports */
  	bool	sec_kerberos;		/* supports plain Kerberos */
  	bool	sec_mskerberos;		/* supports legacy MS Kerberos */
  	bool	sec_kerberosu2u;	/* supports U2U Kerberos */
  	bool	sec_ntlmssp;		/* supports NTLMSSP */
488f1d2d6   Suresh Jayaraman   cifs: define serv...
188
189
190
  #ifdef CONFIG_CIFS_FSCACHE
  	struct fscache_cookie   *fscache; /* client index cache cookie */
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
191
192
193
  };
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
194
195
196
   * Session structure.  One of these for each uid session with a particular host
   */
  struct cifsSesInfo {
14fbf50d6   Jeff Layton   cifs: reinstate s...
197
  	struct list_head smb_ses_list;
3b7952109   Steve French   [CIFS] Fix cifs r...
198
  	struct list_head tcon_list;
d7b619cf5   Steve French   [CIFS] pSesInfo->...
199
  	struct mutex session_mutex;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
200
  	struct TCP_Server_Info *server;	/* pointer to server info */
14fbf50d6   Jeff Layton   cifs: reinstate s...
201
  	int ses_count;		/* reference counter */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
202
  	enum statusEnum status;
750d1151a   Steve French   [CIFS] Fix alloca...
203
  	unsigned overrideSecFlg;  /* if non-zero override global sec flags */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
204
205
  	__u16 ipc_tid;		/* special tid for connection to IPC share */
  	__u16 flags;
eca6acf91   Steve French   [CIFS] Fix multiu...
206
  	__u16 vcnum;
ad009ac96   Steve French   [PATCH] cifs: Fix...
207
208
  	char *serverOS;		/* name of operating system underlying server */
  	char *serverNOS;	/* name of network operating system of server */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
209
210
  	char *serverDomain;	/* security realm of server */
  	int Suid;		/* remote smb uid  */
3e4b3e1f6   Jeff Layton   cifs: add separat...
211
212
  	uid_t linux_uid;        /* overriding owner of files on the mount */
  	uid_t cred_uid;		/* owner of credentials */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
213
  	int capabilities;
d38d8c74c   Steve French   [CIFS] whitespace...
214
  	char serverName[SERVER_NAME_LEN_WITH_NULL * 2];	/* BB make bigger for
ad009ac96   Steve French   [PATCH] cifs: Fix...
215
  				TCP names - will ipv6 and sctp addresses fit? */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
216
  	char userName[MAX_USERNAME_SIZE + 1];
d38d8c74c   Steve French   [CIFS] whitespace...
217
218
  	char *domainName;
  	char *password;
3b7952109   Steve French   [CIFS] Fix cifs r...
219
  	bool need_reconnect:1; /* connection reset, uid now invalid */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
220
  };
9ac00b7d9   Steve French   [CIFS] Do not sen...
221
  /* no more than one of the following three session flags may be set */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
222
  #define CIFS_SES_NT4 1
9ac00b7d9   Steve French   [CIFS] Do not sen...
223
224
225
226
227
228
  #define CIFS_SES_OS2 2
  #define CIFS_SES_W9X 4
  /* following flag is set for old servers such as OS2 (and Win95?)
     which do not negotiate NTLM or POSIX dialects, but instead
     negotiate one of the older LANMAN dialects */
  #define CIFS_SES_LANMAN 8
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
229
230
  /*
   * there is one of these for each connection to a resource on a particular
d38d8c74c   Steve French   [CIFS] whitespace...
231
   * session
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
232
233
   */
  struct cifsTconInfo {
f1987b44f   Jeff Layton   cifs: reinstate s...
234
235
  	struct list_head tcon_list;
  	int tc_count;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
236
  	struct list_head openFileList;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
237
  	struct cifsSesInfo *ses;	/* pointer to session associated with */
254e55ed0   Steve French   CIFS] Support for...
238
  	char treeName[MAX_TREE_SIZE + 1]; /* UNC name of resource in ASCII */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
239
  	char *nativeFileSystem;
00e485b01   Jeff Layton   cifs: store passw...
240
  	char *password;		/* for share-level security */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
241
242
243
  	__u16 tid;		/* The 2 byte tree id */
  	__u16 Flags;		/* optional support bits */
  	enum statusEnum tidStatus;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
244
245
246
247
  #ifdef CONFIG_CIFS_STATS
  	atomic_t num_smbs_sent;
  	atomic_t num_writes;
  	atomic_t num_reads;
b298f2235   Steve French   [CIFS] Send SMB f...
248
  	atomic_t num_flushes;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
249
250
  	atomic_t num_oplock_brks;
  	atomic_t num_opens;
a5a2b489b   Steve French   [CIFS] Make CIFS ...
251
  	atomic_t num_closes;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
252
253
  	atomic_t num_deletes;
  	atomic_t num_mkdirs;
65bc98b00   Steve French   [CIFS] Distinguis...
254
255
  	atomic_t num_posixopens;
  	atomic_t num_posixmkdirs;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
256
257
258
  	atomic_t num_rmdirs;
  	atomic_t num_renames;
  	atomic_t num_t2renames;
dfb7533b5   Steve French   [CIFS] Add stats ...
259
260
261
  	atomic_t num_ffirst;
  	atomic_t num_fnext;
  	atomic_t num_fclose;
a5a2b489b   Steve French   [CIFS] Make CIFS ...
262
263
264
  	atomic_t num_hardlinks;
  	atomic_t num_symlinks;
  	atomic_t num_locks;
0a4b92c05   Steve French   [CIFS] Add worker...
265
266
  	atomic_t num_acl_get;
  	atomic_t num_acl_set;
a5a2b489b   Steve French   [CIFS] Make CIFS ...
267
268
269
270
271
272
273
274
275
276
277
278
279
280
  #ifdef CONFIG_CIFS_STATS2
  	unsigned long long time_writes;
  	unsigned long long time_reads;
  	unsigned long long time_opens;
  	unsigned long long time_deletes;
  	unsigned long long time_closes;
  	unsigned long long time_mkdirs;
  	unsigned long long time_rmdirs;
  	unsigned long long time_renames;
  	unsigned long long time_t2renames;
  	unsigned long long time_ffirst;
  	unsigned long long time_fnext;
  	unsigned long long time_fclose;
  #endif /* CONFIG_CIFS_STATS2 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
281
282
283
  	__u64    bytes_read;
  	__u64    bytes_written;
  	spinlock_t stat_lock;
a5a2b489b   Steve French   [CIFS] Make CIFS ...
284
  #endif /* CONFIG_CIFS_STATS */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
285
  	FILE_SYSTEM_DEVICE_INFO fsDevInfo;
254e55ed0   Steve French   CIFS] Support for...
286
  	FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo; /* ok if fs name truncated */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
287
  	FILE_SYSTEM_UNIX_INFO fsUnixInfo;
4b18f2a9c   Steve French   [CIFS] convert us...
288
289
290
  	bool ipc:1;		/* set if connection to IPC$ eg for RPC/PIPES */
  	bool retry:1;
  	bool nocase:1;
95b1cb90b   Steve French   [CIFS] enable par...
291
  	bool seal:1;      /* transport encryption for this mounted share */
4b18f2a9c   Steve French   [CIFS] convert us...
292
  	bool unix_ext:1;  /* if false disable Linux extensions to CIFS protocol
c18c842b1   Steve French   [CIFS] Allow disa...
293
  				for this mount even if server would support */
84210e912   Steve French   [CIFS] improve se...
294
  	bool local_lease:1; /* check leases (only) on local system not remote */
64cc2c636   Steve French   [CIFS] work aroun...
295
  	bool broken_posix_open; /* e.g. Samba server versions < 3.3.2, 3.2.9 */
3b7952109   Steve French   [CIFS] Fix cifs r...
296
  	bool need_reconnect:1; /* connection reset, tid now invalid */
d03382ce9   Suresh Jayaraman   cifs: define supe...
297
298
299
300
  #ifdef CONFIG_CIFS_FSCACHE
  	u64 resource_id;		/* server resource id */
  	struct fscache_cookie *fscache;	/* cookie for share */
  #endif
c18c842b1   Steve French   [CIFS] Allow disa...
301
  	/* BB add field for back pointer to sb struct(s)? */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
302
303
304
  };
  
  /*
7ee1af765   Jeremy Allison   [CIFS]
305
306
   * This info hangs off the cifsFileInfo structure, pointed to by llist.
   * This is used to track byte stream locks on the file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
307
308
   */
  struct cifsLockInfo {
7ee1af765   Jeremy Allison   [CIFS]
309
310
311
312
  	struct list_head llist;	/* pointer to next cifsLockInfo */
  	__u64 offset;
  	__u64 length;
  	__u8 type;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
313
314
315
316
317
318
319
320
321
322
  };
  
  /*
   * One of these for each open instance of a file
   */
  struct cifs_search_info {
  	loff_t index_of_last_entry;
  	__u16 entries_in_buffer;
  	__u16 info_level;
  	__u32 resume_key;
d38d8c74c   Steve French   [CIFS] whitespace...
323
324
  	char *ntwrk_buf_start;
  	char *srch_entries_start;
0752f1522   Steve French   [CIFS] make sure ...
325
  	char *last_entry;
d38d8c74c   Steve French   [CIFS] whitespace...
326
  	char *presume_name;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
327
  	unsigned int resume_name_len;
4b18f2a9c   Steve French   [CIFS] convert us...
328
329
330
331
  	bool endOfSearch:1;
  	bool emptyDir:1;
  	bool unicode:1;
  	bool smallBuf:1; /* so we know which buf_release function to call */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
332
333
334
335
336
337
338
339
340
341
  };
  
  struct cifsFileInfo {
  	struct list_head tlist;	/* pointer to next fid owned by tcon */
  	struct list_head flist;	/* next fid (file instance) for this inode */
  	unsigned int uid;	/* allows finding which FileInfo structure */
  	__u32 pid;		/* process id who opened file */
  	__u16 netfid;		/* file id from remote */
  	/* BB add lock scope info here if needed */ ;
  	/* lock scope id (0 if none) */
d38d8c74c   Steve French   [CIFS] whitespace...
342
343
  	struct file *pfile; /* needed for writepage */
  	struct inode *pInode; /* needed for oplock break */
3bc303c25   Jeff Layton   cifs: convert opl...
344
  	struct vfsmount *mnt;
796e5661f   Roland Dreier   [CIFS] Change sem...
345
  	struct mutex lock_mutex;
7ee1af765   Jeremy Allison   [CIFS]
346
  	struct list_head llist; /* list of byte range locks we have. */
4b18f2a9c   Steve French   [CIFS] convert us...
347
348
  	bool closePend:1;	/* file is marked to close */
  	bool invalidHandle:1;	/* file closed via session abend */
3bc303c25   Jeff Layton   cifs: convert opl...
349
  	bool oplock_break_cancelled:1;
6ab409b53   Dave Kleikamp   cifs: Replace wrt...
350
  	atomic_t count;		/* reference count */
a6ce4932f   Steve French   [CIFS] Add suppor...
351
  	struct mutex fh_mutex; /* prevents reopen race after dead ses*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
352
  	struct cifs_search_info srch_inf;
9b6469724   Tejun Heo   cifs: use workque...
353
  	struct work_struct oplock_break; /* work for oplock breaks */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
354
  };
6ab409b53   Dave Kleikamp   cifs: Replace wrt...
355
356
357
358
359
360
361
362
363
  /* Take a reference on the file private data */
  static inline void cifsFileInfo_get(struct cifsFileInfo *cifs_file)
  {
  	atomic_inc(&cifs_file->count);
  }
  
  /* Release a reference on the file private data */
  static inline void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
  {
48541bd3d   Jeff Layton   cifs: have cifsFi...
364
365
  	if (atomic_dec_and_test(&cifs_file->count)) {
  		iput(cifs_file->pInode);
6ab409b53   Dave Kleikamp   cifs: Replace wrt...
366
  		kfree(cifs_file);
48541bd3d   Jeff Layton   cifs: have cifsFi...
367
  	}
6ab409b53   Dave Kleikamp   cifs: Replace wrt...
368
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
369
370
371
372
373
374
  /*
   * One of these for each file inode
   */
  
  struct cifsInodeInfo {
  	struct list_head lockList;
d38d8c74c   Steve French   [CIFS] whitespace...
375
  	/* BB add in lists for dirty pages i.e. write caching info for oplock */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
376
377
378
  	struct list_head openFileList;
  	int write_behind_rc;
  	__u32 cifsAttrs; /* e.g. DOS archive bit, sparse, compressed, system */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
379
  	unsigned long time;	/* jiffies of last update/check of inode */
4b18f2a9c   Steve French   [CIFS] convert us...
380
381
  	bool clientCanCacheRead:1;	/* read oplock */
  	bool clientCanCacheAll:1;	/* read and writebehind oplock */
9a8165fce   Jeff Layton   cifs: track Delet...
382
  	bool delete_pending:1;		/* DELETE_ON_CLOSE is set */
df2cf170c   Jeff Layton   cifs: overhaul ci...
383
  	bool invalid_mapping:1;		/* pagecache is invalid */
fbec9ab95   Jeff Layton   cifs: vary timeou...
384
  	u64  server_eof;		/* current file size on server */
cc0bad755   Jeff Layton   cifs: add new cif...
385
  	u64  uniqueid;			/* server inode number */
9451a9a52   Suresh Jayaraman   cifs: define inod...
386
387
388
  #ifdef CONFIG_CIFS_FSCACHE
  	struct fscache_cookie *fscache;
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
389
390
391
392
393
394
395
396
397
398
399
400
401
402
  	struct inode vfs_inode;
  };
  
  static inline struct cifsInodeInfo *
  CIFS_I(struct inode *inode)
  {
  	return container_of(inode, struct cifsInodeInfo, vfs_inode);
  }
  
  static inline struct cifs_sb_info *
  CIFS_SB(struct super_block *sb)
  {
  	return sb->s_fs_info;
  }
ab2f218f4   Steve French   [CIFS] Fix compil...
403
  static inline char CIFS_DIR_SEP(const struct cifs_sb_info *cifs_sb)
ac67055ef   Jeremy Allison   [CIFS] POSIX exte...
404
405
406
407
408
409
  {
  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
  		return '/';
  	else
  		return '\\';
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
410

a45443475   Steve French   CIFS: Reduce CONF...
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
  #ifdef CONFIG_CIFS_STATS
  #define cifs_stats_inc atomic_inc
  
  static inline void cifs_stats_bytes_written(struct cifsTconInfo *tcon,
  					    unsigned int bytes)
  {
  	if (bytes) {
  		spin_lock(&tcon->stat_lock);
  		tcon->bytes_written += bytes;
  		spin_unlock(&tcon->stat_lock);
  	}
  }
  
  static inline void cifs_stats_bytes_read(struct cifsTconInfo *tcon,
  					 unsigned int bytes)
  {
  	spin_lock(&tcon->stat_lock);
  	tcon->bytes_read += bytes;
  	spin_unlock(&tcon->stat_lock);
  }
  #else
d38d8c74c   Steve French   [CIFS] whitespace...
432
433
434
  #define  cifs_stats_inc(field) do {} while (0)
  #define  cifs_stats_bytes_written(tcon, bytes) do {} while (0)
  #define  cifs_stats_bytes_read(tcon, bytes) do {} while (0)
a45443475   Steve French   CIFS: Reduce CONF...
435
436
  
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
437
438
439
440
441
442
  /* one of these for every pending CIFS request to the server */
  struct mid_q_entry {
  	struct list_head qhead;	/* mids waiting on reply from this server */
  	__u16 mid;		/* multiplex id */
  	__u16 pid;		/* process id */
  	__u32 sequence_number;  /* for CIFS signing */
1047abc15   Steve French   [CIFS] CIFS Stats...
443
444
445
446
447
  	unsigned long when_alloc;  /* when mid was created */
  #ifdef CONFIG_CIFS_STATS2
  	unsigned long when_sent; /* time when smb send finished */
  	unsigned long when_received; /* when demux complete (taken off wire) */
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
448
449
450
  	struct task_struct *tsk;	/* task waiting for response */
  	struct smb_hdr *resp_buf;	/* response buffer */
  	int midState;	/* wish this were enum but can not pass to wait_event */
c81156dd2   Steve French   [PATCH] cifs: cle...
451
  	__u8 command;	/* smb command code */
4b18f2a9c   Steve French   [CIFS] convert us...
452
453
454
  	bool largeBuf:1;	/* if valid response, is pointer to large buf */
  	bool multiRsp:1;	/* multiple trans2 responses for one request  */
  	bool multiEnd:1;	/* both received */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
455
456
457
458
  };
  
  struct oplock_q_entry {
  	struct list_head qhead;
d38d8c74c   Steve French   [CIFS] whitespace...
459
460
  	struct inode *pinode;
  	struct cifsTconInfo *tcon;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
461
462
  	__u16 netfid;
  };
ff5dbd9ea   Steve French   [CIFS] Change not...
463
464
465
466
467
468
469
470
471
472
473
  /* for pending dnotify requests */
  struct dir_notify_req {
         struct list_head lhead;
         __le16 Pid;
         __le16 PidHigh;
         __u16 Mid;
         __u16 Tid;
         __u16 Uid;
         __u16 netfid;
         __u32 filter; /* CompletionFilter (for multishot) */
         int multishot;
d38d8c74c   Steve French   [CIFS] whitespace...
474
         struct file *pfile;
ff5dbd9ea   Steve French   [CIFS] Change not...
475
  };
366781c19   Steve French   [CIFS] DFS build ...
476
477
  struct dfs_info3_param {
  	int flags; /* DFSREF_REFERRAL_SERVER, DFSREF_STORAGE_SERVER*/
8aad018b6   Igor Mammedov   [CIFS] Fix mixed ...
478
  	int path_consumed;
366781c19   Steve French   [CIFS] DFS build ...
479
480
481
482
483
  	int server_type;
  	int ref_flag;
  	char *path_name;
  	char *node_name;
  };
cc0bad755   Jeff Layton   cifs: add new cif...
484
485
486
487
488
489
  /*
   * common struct for holding inode info when searching for or updating an
   * inode with new info
   */
  
  #define CIFS_FATTR_DFS_REFERRAL		0x1
0b8f18e35   Jeff Layton   cifs: convert cif...
490
491
  #define CIFS_FATTR_DELETE_PENDING	0x2
  #define CIFS_FATTR_NEED_REVAL		0x4
3d6943803   Jeff Layton   cifs: guard again...
492
  #define CIFS_FATTR_INO_COLLISION	0x8
cc0bad755   Jeff Layton   cifs: add new cif...
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
  
  struct cifs_fattr {
  	u32		cf_flags;
  	u32		cf_cifsattrs;
  	u64		cf_uniqueid;
  	u64		cf_eof;
  	u64		cf_bytes;
  	uid_t		cf_uid;
  	gid_t		cf_gid;
  	umode_t		cf_mode;
  	dev_t		cf_rdev;
  	unsigned int	cf_nlink;
  	unsigned int	cf_dtype;
  	struct timespec	cf_atime;
  	struct timespec	cf_mtime;
  	struct timespec	cf_ctime;
  };
366781c19   Steve French   [CIFS] DFS build ...
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
  static inline void free_dfs_info_param(struct dfs_info3_param *param)
  {
  	if (param) {
  		kfree(param->path_name);
  		kfree(param->node_name);
  		kfree(param);
  	}
  }
  
  static inline void free_dfs_info_array(struct dfs_info3_param *param,
  				       int number_of_items)
  {
  	int i;
  	if ((number_of_items == 0) || (param == NULL))
  		return;
  	for (i = 0; i < number_of_items; i++) {
  		kfree(param[i].path_name);
  		kfree(param[i].node_name);
  	}
  	kfree(param);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
531
532
533
534
535
536
  #define   MID_FREE 0
  #define   MID_REQUEST_ALLOCATED 1
  #define   MID_REQUEST_SUBMITTED 2
  #define   MID_RESPONSE_RECEIVED 4
  #define   MID_RETRY_NEEDED      8 /* session closed while this request out */
  #define   MID_NO_RESP_NEEDED 0x10
ec637e3ff   Steve French   [CIFS] Avoid extr...
537
538
539
540
541
542
  
  /* Types of response buffer returned from SendReceive2 */
  #define   CIFS_NO_BUFFER        0    /* Response buffer not returned */
  #define   CIFS_SMALL_BUFFER     1
  #define   CIFS_LARGE_BUFFER     2
  #define   CIFS_IOVEC            4    /* array of response buffers */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
543

133672efb   Steve French   [CIFS] Fix buffer...
544
545
546
547
548
549
550
551
552
553
  /* Type of Request to SendReceive2 */
  #define   CIFS_STD_OP	        0    /* normal request timeout */
  #define   CIFS_LONG_OP          1    /* long op (up to 45 sec, oplock time) */
  #define   CIFS_VLONG_OP         2    /* sloow op - can take up to 180 seconds */
  #define   CIFS_BLOCKING_OP      4    /* operation can block */
  #define   CIFS_ASYNC_OP         8    /* do not wait for response */
  #define   CIFS_TIMEOUT_MASK 0x00F    /* only one of 5 above set in req */
  #define   CIFS_LOG_ERROR    0x010    /* log NT STATUS if non-zero */
  #define   CIFS_LARGE_BUF_OP 0x020    /* large request buffer */
  #define   CIFS_NO_RESP      0x040    /* no response buffer required */
3979877e5   Steve French   [CIFS] Support fo...
554
555
556
557
558
559
560
561
  /* Security Flags: indicate type of session setup needed */
  #define   CIFSSEC_MAY_SIGN	0x00001
  #define   CIFSSEC_MAY_NTLM	0x00002
  #define   CIFSSEC_MAY_NTLMV2	0x00004
  #define   CIFSSEC_MAY_KRB5	0x00008
  #ifdef CONFIG_CIFS_WEAK_PW_HASH
  #define   CIFSSEC_MAY_LANMAN	0x00010
  #define   CIFSSEC_MAY_PLNTXT	0x00020
516897a20   Steve French   [CIFS] fix build ...
562
563
564
  #else
  #define   CIFSSEC_MAY_LANMAN    0
  #define   CIFSSEC_MAY_PLNTXT    0
3979877e5   Steve French   [CIFS] Support fo...
565
566
  #endif /* weak passwords */
  #define   CIFSSEC_MAY_SEAL	0x00040 /* not supported yet */
ac6839246   Steve French   [CIFS] Allow raw ...
567
  #define   CIFSSEC_MAY_NTLMSSP	0x00080 /* raw ntlmssp with ntlmv2 */
3979877e5   Steve French   [CIFS] Support fo...
568
569
570
571
572
573
574
575
576
577
578
  
  #define   CIFSSEC_MUST_SIGN	0x01001
  /* note that only one of the following can be set so the
  result of setting MUST flags more than once will be to
  require use of the stronger protocol */
  #define   CIFSSEC_MUST_NTLM	0x02002
  #define   CIFSSEC_MUST_NTLMV2	0x04004
  #define   CIFSSEC_MUST_KRB5	0x08008
  #ifdef CONFIG_CIFS_WEAK_PW_HASH
  #define   CIFSSEC_MUST_LANMAN	0x10010
  #define   CIFSSEC_MUST_PLNTXT	0x20020
0d3a01fad   Jeff Layton   [CIFS] Break up u...
579
  #ifdef CONFIG_CIFS_UPCALL
20d1752f3   Chuck Ebbert   [CIFS] Re-enable ...
580
  #define   CIFSSEC_MASK          0xBF0BF /* allows weak security but also krb5 */
0d3a01fad   Jeff Layton   [CIFS] Break up u...
581
  #else
20d1752f3   Chuck Ebbert   [CIFS] Re-enable ...
582
  #define   CIFSSEC_MASK          0xB70B7 /* current flags supported if weak */
016ec75f1   Steve French   [CIFS] missing #e...
583
  #endif /* UPCALL */
0d3a01fad   Jeff Layton   [CIFS] Break up u...
584
585
  #else /* do not allow weak pw hash */
  #ifdef CONFIG_CIFS_UPCALL
ac6839246   Steve French   [CIFS] Allow raw ...
586
  #define   CIFSSEC_MASK          0x8F08F /* flags supported if no weak allowed */
d38d8c74c   Steve French   [CIFS] whitespace...
587
  #else
ac6839246   Steve French   [CIFS] Allow raw ...
588
  #define	  CIFSSEC_MASK          0x87087 /* flags supported if no weak allowed */
016ec75f1   Steve French   [CIFS] missing #e...
589
  #endif /* UPCALL */
3979877e5   Steve French   [CIFS] Support fo...
590
591
  #endif /* WEAK_PW_HASH */
  #define   CIFSSEC_MUST_SEAL	0x40040 /* not supported yet */
ac6839246   Steve French   [CIFS] Allow raw ...
592
  #define   CIFSSEC_MUST_NTLMSSP	0x80080 /* raw ntlmssp with ntlmv2 */
3979877e5   Steve French   [CIFS] Support fo...
593

ef571cadd   Shirish Pargaonkar   [CIFS] Fix warnin...
594
595
  #define   CIFSSEC_DEF (CIFSSEC_MAY_SIGN | CIFSSEC_MAY_NTLM | CIFSSEC_MAY_NTLMV2)
  #define   CIFSSEC_MAX (CIFSSEC_MUST_SIGN | CIFSSEC_MUST_NTLMV2)
ac6839246   Steve French   [CIFS] Allow raw ...
596
  #define   CIFSSEC_AUTH_MASK (CIFSSEC_MAY_NTLM | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_LANMAN | CIFSSEC_MAY_PLNTXT | CIFSSEC_MAY_KRB5 | CIFSSEC_MAY_NTLMSSP)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
  /*
   *****************************************************************
   * All constants go here
   *****************************************************************
   */
  
  #define UID_HASH (16)
  
  /*
   * Note that ONE module should define _DECLARE_GLOBALS_HERE to cause the
   * following to be declared.
   */
  
  /****************************************************************************
   *  Locking notes.  All updates to global variables and lists should be
   *                  protected by spinlocks or semaphores.
   *
   *  Spinlocks
   *  ---------
   *  GlobalMid_Lock protects:
   *	list operations on pending_mid_q and oplockQ
   *      updates to XID counters, multiplex id  and SMB sequence numbers
   *  GlobalSMBSesLock protects:
   *	list operations on tcp and SMB session lists and tCon lists
   *  f_owner.lock protects certain per file struct operations
   *  mapping->page_lock protects certain per page operations
   *
   *  Semaphores
   *  ----------
   *  sesSem     operations on smb session
   *  tconSem    operations on tree connection
d38d8c74c   Steve French   [CIFS] whitespace...
628
   *  fh_sem      file handle reconnection operations
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
629
630
631
632
633
634
635
636
   *
   ****************************************************************************/
  
  #ifdef DECLARE_GLOBALS_HERE
  #define GLOBAL_EXTERN
  #else
  #define GLOBAL_EXTERN extern
  #endif
e7ddee903   Jeff Layton   cifs: disable sha...
637
638
  /*
   * the list of TCP_Server_Info structures, ie each of the sockets
fb3960166   Steve French   [CIFS] remove unu...
639
   * connecting our client to a distinct server (ip address), is
e7ddee903   Jeff Layton   cifs: disable sha...
640
   * chained together by cifs_tcp_ses_list. The list of all our SMB
fb3960166   Steve French   [CIFS] remove unu...
641
   * sessions (and from that the tree connections) can be found
e7ddee903   Jeff Layton   cifs: disable sha...
642
643
644
   * by iterating over cifs_tcp_ses_list
   */
  GLOBAL_EXTERN struct list_head		cifs_tcp_ses_list;
f1987b44f   Jeff Layton   cifs: reinstate s...
645
646
647
648
649
650
  /*
   * This lock protects the cifs_tcp_ses_list, the list of smb sessions per
   * tcp session, and the list of tcon's per smb session. It also protects
   * the reference counters for the server, smb session, and tcon. Finally,
   * changes to the tcon->tidStatus should be done while holding this lock.
   */
e7ddee903   Jeff Layton   cifs: disable sha...
651
  GLOBAL_EXTERN rwlock_t		cifs_tcp_ses_lock;
ddb4cbfc5   Steve French   [CIFS] Do not att...
652
653
654
655
656
657
658
659
660
  
  /*
   * This lock protects the cifs_file->llist and cifs_file->flist
   * list operations, and updates to some flags (cifs_file->invalidHandle)
   * It will be moved to either use the tcon->stat_lock or equivalent later.
   * If cifs_tcp_ses_lock and the lock below are both needed to be held, then
   * the cifs_tcp_ses_lock must be grabbed first and released last.
   */
  GLOBAL_EXTERN rwlock_t GlobalSMBSeslock;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
661

99ee4dbd7   Steve French   [CIFS] Remove som...
662
663
664
665
  /* Outstanding dir notify requests */
  GLOBAL_EXTERN struct list_head GlobalDnotifyReqList;
  /* DirNotify response queue */
  GLOBAL_EXTERN struct list_head GlobalDnotifyRsp_Q;
ff5dbd9ea   Steve French   [CIFS] Change not...
666

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
667
668
669
670
  /*
   * Global transaction id (XID) information
   */
  GLOBAL_EXTERN unsigned int GlobalCurrentXid;	/* protected by GlobalMid_Sem */
254e55ed0   Steve French   CIFS] Support for...
671
  GLOBAL_EXTERN unsigned int GlobalTotalActiveXid; /* prot by GlobalMid_Sem */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
672
  GLOBAL_EXTERN unsigned int GlobalMaxActiveXid;	/* prot by GlobalMid_Sem */
254e55ed0   Steve French   CIFS] Support for...
673
674
  GLOBAL_EXTERN spinlock_t GlobalMid_Lock;  /* protects above & list operations */
  					  /* on midQ entries */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
675
676
677
678
679
680
681
682
683
684
  GLOBAL_EXTERN char Local_System_Name[15];
  
  /*
   *  Global counters, updated atomically
   */
  GLOBAL_EXTERN atomic_t sesInfoAllocCount;
  GLOBAL_EXTERN atomic_t tconInfoAllocCount;
  GLOBAL_EXTERN atomic_t tcpSesAllocCount;
  GLOBAL_EXTERN atomic_t tcpSesReconnectCount;
  GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
aaa9bbe03   Steve French   [CIFS] remove unu...
685
  /* Various Debug counters */
4498eed50   Steve French   [CIFS] Add extend...
686
687
688
689
690
691
  GLOBAL_EXTERN atomic_t bufAllocCount;    /* current number allocated  */
  #ifdef CONFIG_CIFS_STATS2
  GLOBAL_EXTERN atomic_t totBufAllocCount; /* total allocated over all time */
  GLOBAL_EXTERN atomic_t totSmBufAllocCount;
  #endif
  GLOBAL_EXTERN atomic_t smBufAllocCount;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
692
693
694
  GLOBAL_EXTERN atomic_t midCount;
  
  /* Misc globals */
254e55ed0   Steve French   CIFS] Support for...
695
  GLOBAL_EXTERN unsigned int multiuser_mount; /* if enabled allows new sessions
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
696
  				to be established on existing mount if we
d38d8c74c   Steve French   [CIFS] whitespace...
697
  				have the uid/password or Kerberos credential
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
698
699
700
701
  				or equivalent for current user */
  GLOBAL_EXTERN unsigned int oplockEnabled;
  GLOBAL_EXTERN unsigned int experimEnabled;
  GLOBAL_EXTERN unsigned int lookupCacheEnabled;
04912d6a2   Jeff Layton   cifs: rename "ext...
702
  GLOBAL_EXTERN unsigned int global_secflags;	/* if on, session setup sent
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
703
  				with more secure ntlmssp2 challenge/resp */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
704
705
706
707
708
709
  GLOBAL_EXTERN unsigned int sign_CIFS_PDUs;  /* enable smb packet signing */
  GLOBAL_EXTERN unsigned int linuxExtEnabled;/*enable Linux/Unix CIFS extensions*/
  GLOBAL_EXTERN unsigned int CIFSMaxBufSize;  /* max size not including hdr */
  GLOBAL_EXTERN unsigned int cifs_min_rcv;    /* min size of big ntwrk buf pool */
  GLOBAL_EXTERN unsigned int cifs_min_small;  /* min size of small buf pool */
  GLOBAL_EXTERN unsigned int cifs_max_pending; /* MAX requests at once to server*/
9b6469724   Tejun Heo   cifs: use workque...
710
711
712
  void cifs_oplock_break(struct work_struct *work);
  void cifs_oplock_break_get(struct cifsFileInfo *cfile);
  void cifs_oplock_break_put(struct cifsFileInfo *cfile);
3b7433b8a   Linus Torvalds   Merge branch 'for...
713

3bc303c25   Jeff Layton   cifs: convert opl...
714
  extern const struct slow_work_ops cifs_oplock_break_ops;
abd2e44dc   Suresh Jayaraman   cifs: guard cifsg...
715
716
  
  #endif	/* _CIFS_GLOB_H */