1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef _CIFS_GLOB_H
20#define _CIFS_GLOB_H
21
22#include <linux/in.h>
23#include <linux/in6.h>
24#include <linux/slab.h>
25#include <linux/workqueue.h>
26#include "cifs_fs_sb.h"
27#include "cifsacl.h"
28#include <crypto/internal/hash.h>
29#include <linux/scatterlist.h>
30
31
32
33
34#define MAX_UID_INFO 16
35#define MAX_SES_INFO 2
36#define MAX_TCON_INFO 4
37
38#define MAX_TREE_SIZE (2 + MAX_SERVER_SIZE + 1 + MAX_SHARE_SIZE + 1)
39#define MAX_SERVER_SIZE 15
40#define MAX_SHARE_SIZE 80
41#define MAX_USERNAME_SIZE 256
42#define MAX_PASSWORD_SIZE 512
43
44#define CIFS_MIN_RCV_POOL 4
45
46
47
48
49#define CIFS_DEF_ACTIMEO (1 * HZ)
50
51
52
53
54#define CIFS_MAX_ACTIMEO (1 << 30)
55
56
57
58
59
60#define CIFS_MAX_REQ 32767
61
62#define RFC1001_NAME_LEN 15
63#define RFC1001_NAME_LEN_WITH_NULL (RFC1001_NAME_LEN + 1)
64
65
66#define SERVER_NAME_LENGTH 40
67#define SERVER_NAME_LEN_WITH_NULL (SERVER_NAME_LENGTH + 1)
68
69
70
71
72#define MAX_NAME 514
73
74#include "cifspdu.h"
75
76#ifndef XATTR_DOS_ATTRIB
77#define XATTR_DOS_ATTRIB "user.DOSATTRIB"
78#endif
79
80
81
82
83
84
85enum statusEnum {
86 CifsNew = 0,
87 CifsGood,
88 CifsExiting,
89 CifsNeedReconnect,
90 CifsNeedNegotiate
91};
92
93enum securityEnum {
94 LANMAN = 0,
95 NTLM,
96 NTLMv2,
97 RawNTLMSSP,
98
99 Kerberos,
100};
101
102enum protocolEnum {
103 TCP = 0,
104 SCTP
105
106};
107
108struct session_key {
109 unsigned int len;
110 char *response;
111};
112
113
114struct sdesc {
115 struct shash_desc shash;
116 char ctx[];
117};
118
119
120struct cifs_secmech {
121 struct crypto_shash *hmacmd5;
122 struct crypto_shash *md5;
123 struct sdesc *sdeschmacmd5;
124 struct sdesc *sdescmd5;
125};
126
127
128struct ntlmssp_auth {
129 __u32 client_flags;
130 __u32 server_flags;
131 unsigned char ciphertext[CIFS_CPHTXT_SIZE];
132 char cryptkey[CIFS_CRYPTO_KEY_SIZE];
133};
134
135struct cifs_cred {
136 int uid;
137 int gid;
138 int mode;
139 int cecount;
140 struct cifs_sid osid;
141 struct cifs_sid gsid;
142 struct cifs_ntace *ntaces;
143 struct cifs_ace *aces;
144};
145
146
147
148
149
150
151
152
153struct smb_vol {
154 char *username;
155 char *password;
156 char *domainname;
157 char *UNC;
158 char *UNCip;
159 char *iocharset;
160 char source_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL];
161 char target_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL];
162 uid_t cred_uid;
163 uid_t linux_uid;
164 gid_t linux_gid;
165 uid_t backupuid;
166 gid_t backupgid;
167 umode_t file_mode;
168 umode_t dir_mode;
169 unsigned secFlg;
170 bool retry:1;
171 bool intr:1;
172 bool setuids:1;
173 bool override_uid:1;
174 bool override_gid:1;
175 bool dynperm:1;
176 bool noperm:1;
177 bool no_psx_acl:1;
178 bool cifs_acl:1;
179 bool backupuid_specified;
180 bool backupgid_specified;
181 bool no_xattr:1;
182 bool server_ino:1;
183 bool direct_io:1;
184 bool strict_io:1;
185 bool remap:1;
186 bool posix_paths:1;
187 bool no_linux_ext:1;
188 bool sfu_emul:1;
189 bool nullauth:1;
190 bool nocase:1;
191 bool nobrl:1;
192 bool mand_lock:1;
193 bool seal:1;
194 bool nodfs:1;
195 bool local_lease:1;
196 bool noblocksnd:1;
197 bool noautotune:1;
198 bool nostrictsync:1;
199 bool fsc:1;
200 bool mfsymlinks:1;
201 bool multiuser:1;
202 bool rwpidforward:1;
203 unsigned int rsize;
204 unsigned int wsize;
205 bool sockopt_tcp_nodelay:1;
206 unsigned short int port;
207 unsigned long actimeo;
208 char *prepath;
209 struct sockaddr_storage srcaddr;
210 struct nls_table *local_nls;
211};
212
213#define CIFS_MOUNT_MASK (CIFS_MOUNT_NO_PERM | CIFS_MOUNT_SET_UID | \
214 CIFS_MOUNT_SERVER_INUM | CIFS_MOUNT_DIRECT_IO | \
215 CIFS_MOUNT_NO_XATTR | CIFS_MOUNT_MAP_SPECIAL_CHR | \
216 CIFS_MOUNT_UNX_EMUL | CIFS_MOUNT_NO_BRL | \
217 CIFS_MOUNT_CIFS_ACL | CIFS_MOUNT_OVERR_UID | \
218 CIFS_MOUNT_OVERR_GID | CIFS_MOUNT_DYNPERM | \
219 CIFS_MOUNT_NOPOSIXBRL | CIFS_MOUNT_NOSSYNC | \
220 CIFS_MOUNT_FSCACHE | CIFS_MOUNT_MF_SYMLINKS | \
221 CIFS_MOUNT_MULTIUSER | CIFS_MOUNT_STRICT_IO | \
222 CIFS_MOUNT_CIFS_BACKUPUID | CIFS_MOUNT_CIFS_BACKUPGID)
223
224#define CIFS_MS_MASK (MS_RDONLY | MS_MANDLOCK | MS_NOEXEC | MS_NOSUID | \
225 MS_NODEV | MS_SYNCHRONOUS)
226
227struct cifs_mnt_data {
228 struct cifs_sb_info *cifs_sb;
229 struct smb_vol *vol;
230 int flags;
231};
232
233struct TCP_Server_Info {
234 struct list_head tcp_ses_list;
235 struct list_head smb_ses_list;
236 int srv_count;
237
238 char server_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
239 enum statusEnum tcpStatus;
240 char *hostname;
241 struct socket *ssocket;
242 struct sockaddr_storage dstaddr;
243 struct sockaddr_storage srcaddr;
244#ifdef CONFIG_NET_NS
245 struct net *net;
246#endif
247 wait_queue_head_t response_q;
248 wait_queue_head_t request_q;
249 struct list_head pending_mid_q;
250 bool noblocksnd;
251 bool noautotune;
252 bool tcp_nodelay;
253 atomic_t inFlight;
254 struct mutex srv_mutex;
255 struct task_struct *tsk;
256 char server_GUID[16];
257 char sec_mode;
258 bool session_estab;
259 u16 dialect;
260 enum securityEnum secType;
261 bool oplocks:1;
262 unsigned int maxReq;
263
264
265 unsigned int maxBuf;
266
267
268
269 unsigned int max_rw;
270
271
272 unsigned int max_vcs;
273
274
275 int capabilities;
276 int timeAdj;
277 __u16 CurrentMid;
278 char cryptkey[CIFS_CRYPTO_KEY_SIZE];
279
280 char workstation_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
281 __u32 sequence_number;
282 struct session_key session_key;
283 unsigned long lstrp;
284 struct cifs_secmech secmech;
285
286 bool sec_ntlmssp;
287 bool sec_kerberosu2u;
288 bool sec_kerberos;
289 bool sec_mskerberos;
290 bool large_buf;
291 struct delayed_work echo;
292 struct kvec *iov;
293 unsigned int nr_iov;
294 char *smallbuf;
295 char *bigbuf;
296 unsigned int total_read;
297#ifdef CONFIG_CIFS_FSCACHE
298 struct fscache_cookie *fscache;
299#endif
300#ifdef CONFIG_CIFS_STATS2
301 atomic_t in_send;
302 atomic_t num_waiters;
303#endif
304};
305
306
307
308
309
310
311#ifdef CONFIG_NET_NS
312
313static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
314{
315 return srv->net;
316}
317
318static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
319{
320 srv->net = net;
321}
322
323#else
324
325static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
326{
327 return &init_net;
328}
329
330static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
331{
332}
333
334#endif
335
336
337
338
339struct cifs_ses {
340 struct list_head smb_ses_list;
341 struct list_head tcon_list;
342 struct mutex session_mutex;
343 struct TCP_Server_Info *server;
344 int ses_count;
345 enum statusEnum status;
346 unsigned overrideSecFlg;
347 __u16 ipc_tid;
348 __u16 flags;
349 __u16 vcnum;
350 char *serverOS;
351 char *serverNOS;
352 char *serverDomain;
353 int Suid;
354 uid_t linux_uid;
355 uid_t cred_uid;
356 int capabilities;
357 char serverName[SERVER_NAME_LEN_WITH_NULL * 2];
358
359 char *user_name;
360
361 char *domainName;
362 char *password;
363 struct session_key auth_key;
364 struct ntlmssp_auth *ntlmssp;
365 bool need_reconnect:1;
366};
367
368#define CIFS_SES_NT4 1
369#define CIFS_SES_OS2 2
370#define CIFS_SES_W9X 4
371
372
373
374#define CIFS_SES_LANMAN 8
375
376
377
378
379struct cifs_tcon {
380 struct list_head tcon_list;
381 int tc_count;
382 struct list_head openFileList;
383 struct cifs_ses *ses;
384 char treeName[MAX_TREE_SIZE + 1];
385 char *nativeFileSystem;
386 char *password;
387 __u16 tid;
388 __u16 Flags;
389 enum statusEnum tidStatus;
390#ifdef CONFIG_CIFS_STATS
391 atomic_t num_smbs_sent;
392 atomic_t num_writes;
393 atomic_t num_reads;
394 atomic_t num_flushes;
395 atomic_t num_oplock_brks;
396 atomic_t num_opens;
397 atomic_t num_closes;
398 atomic_t num_deletes;
399 atomic_t num_mkdirs;
400 atomic_t num_posixopens;
401 atomic_t num_posixmkdirs;
402 atomic_t num_rmdirs;
403 atomic_t num_renames;
404 atomic_t num_t2renames;
405 atomic_t num_ffirst;
406 atomic_t num_fnext;
407 atomic_t num_fclose;
408 atomic_t num_hardlinks;
409 atomic_t num_symlinks;
410 atomic_t num_locks;
411 atomic_t num_acl_get;
412 atomic_t num_acl_set;
413#ifdef CONFIG_CIFS_STATS2
414 unsigned long long time_writes;
415 unsigned long long time_reads;
416 unsigned long long time_opens;
417 unsigned long long time_deletes;
418 unsigned long long time_closes;
419 unsigned long long time_mkdirs;
420 unsigned long long time_rmdirs;
421 unsigned long long time_renames;
422 unsigned long long time_t2renames;
423 unsigned long long time_ffirst;
424 unsigned long long time_fnext;
425 unsigned long long time_fclose;
426#endif
427 __u64 bytes_read;
428 __u64 bytes_written;
429 spinlock_t stat_lock;
430#endif
431 FILE_SYSTEM_DEVICE_INFO fsDevInfo;
432 FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo;
433 FILE_SYSTEM_UNIX_INFO fsUnixInfo;
434 bool ipc:1;
435 bool retry:1;
436 bool nocase:1;
437 bool seal:1;
438 bool unix_ext:1;
439
440 bool local_lease:1;
441 bool broken_posix_open;
442 bool need_reconnect:1;
443#ifdef CONFIG_CIFS_FSCACHE
444 u64 resource_id;
445 struct fscache_cookie *fscache;
446#endif
447
448};
449
450
451
452
453
454
455
456struct tcon_link {
457 struct rb_node tl_rbnode;
458 uid_t tl_uid;
459 unsigned long tl_flags;
460#define TCON_LINK_MASTER 0
461#define TCON_LINK_PENDING 1
462#define TCON_LINK_IN_TREE 2
463 unsigned long tl_time;
464 atomic_t tl_count;
465 struct cifs_tcon *tl_tcon;
466};
467
468extern struct tcon_link *cifs_sb_tlink(struct cifs_sb_info *cifs_sb);
469
470static inline struct cifs_tcon *
471tlink_tcon(struct tcon_link *tlink)
472{
473 return tlink->tl_tcon;
474}
475
476extern void cifs_put_tlink(struct tcon_link *tlink);
477
478static inline struct tcon_link *
479cifs_get_tlink(struct tcon_link *tlink)
480{
481 if (tlink && !IS_ERR(tlink))
482 atomic_inc(&tlink->tl_count);
483 return tlink;
484}
485
486
487extern struct cifs_tcon *cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb);
488
489
490
491
492
493struct cifsLockInfo {
494 struct list_head llist;
495 struct list_head blist;
496 wait_queue_head_t block_q;
497 __u64 offset;
498 __u64 length;
499 __u32 pid;
500 __u8 type;
501 __u16 netfid;
502};
503
504
505
506
507struct cifs_search_info {
508 loff_t index_of_last_entry;
509 __u16 entries_in_buffer;
510 __u16 info_level;
511 __u32 resume_key;
512 char *ntwrk_buf_start;
513 char *srch_entries_start;
514 char *last_entry;
515 const char *presume_name;
516 unsigned int resume_name_len;
517 bool endOfSearch:1;
518 bool emptyDir:1;
519 bool unicode:1;
520 bool smallBuf:1;
521};
522
523struct cifsFileInfo {
524 struct list_head tlist;
525 struct list_head flist;
526 unsigned int uid;
527 __u32 pid;
528 __u16 netfid;
529 ;
530
531 struct dentry *dentry;
532 unsigned int f_flags;
533 struct tcon_link *tlink;
534 bool invalidHandle:1;
535 bool oplock_break_cancelled:1;
536 int count;
537 struct mutex fh_mutex;
538 struct cifs_search_info srch_inf;
539 struct work_struct oplock_break;
540};
541
542struct cifs_io_parms {
543 __u16 netfid;
544 __u32 pid;
545 __u64 offset;
546 unsigned int length;
547 struct cifs_tcon *tcon;
548};
549
550
551
552
553
554static inline void cifsFileInfo_get(struct cifsFileInfo *cifs_file)
555{
556 ++cifs_file->count;
557}
558
559void cifsFileInfo_put(struct cifsFileInfo *cifs_file);
560
561
562
563
564
565struct cifsInodeInfo {
566 struct list_head llist;
567 bool can_cache_brlcks;
568 struct mutex lock_mutex;
569
570 struct list_head openFileList;
571 __u32 cifsAttrs;
572 bool clientCanCacheRead;
573 bool clientCanCacheAll;
574 bool delete_pending;
575 bool invalid_mapping;
576 unsigned long time;
577 u64 server_eof;
578 u64 uniqueid;
579 u64 createtime;
580#ifdef CONFIG_CIFS_FSCACHE
581 struct fscache_cookie *fscache;
582#endif
583 struct inode vfs_inode;
584};
585
586static inline struct cifsInodeInfo *
587CIFS_I(struct inode *inode)
588{
589 return container_of(inode, struct cifsInodeInfo, vfs_inode);
590}
591
592static inline struct cifs_sb_info *
593CIFS_SB(struct super_block *sb)
594{
595 return sb->s_fs_info;
596}
597
598static inline char CIFS_DIR_SEP(const struct cifs_sb_info *cifs_sb)
599{
600 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
601 return '/';
602 else
603 return '\\';
604}
605
606static inline void
607convert_delimiter(char *path, char delim)
608{
609 int i;
610 char old_delim;
611
612 if (path == NULL)
613 return;
614
615 if (delim == '/')
616 old_delim = '\\';
617 else
618 old_delim = '/';
619
620 for (i = 0; path[i] != '\0'; i++) {
621 if (path[i] == old_delim)
622 path[i] = delim;
623 }
624}
625
626#ifdef CONFIG_CIFS_STATS
627#define cifs_stats_inc atomic_inc
628
629static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
630 unsigned int bytes)
631{
632 if (bytes) {
633 spin_lock(&tcon->stat_lock);
634 tcon->bytes_written += bytes;
635 spin_unlock(&tcon->stat_lock);
636 }
637}
638
639static inline void cifs_stats_bytes_read(struct cifs_tcon *tcon,
640 unsigned int bytes)
641{
642 spin_lock(&tcon->stat_lock);
643 tcon->bytes_read += bytes;
644 spin_unlock(&tcon->stat_lock);
645}
646#else
647
648#define cifs_stats_inc(field) do {} while (0)
649#define cifs_stats_bytes_written(tcon, bytes) do {} while (0)
650#define cifs_stats_bytes_read(tcon, bytes) do {} while (0)
651
652#endif
653
654struct mid_q_entry;
655
656
657
658
659
660
661
662
663
664
665
666
667
668typedef int (mid_receive_t)(struct TCP_Server_Info *server,
669 struct mid_q_entry *mid);
670
671
672
673
674
675
676
677
678
679typedef void (mid_callback_t)(struct mid_q_entry *mid);
680
681
682struct mid_q_entry {
683 struct list_head qhead;
684 __u16 mid;
685 __u16 pid;
686 __u32 sequence_number;
687 unsigned long when_alloc;
688#ifdef CONFIG_CIFS_STATS2
689 unsigned long when_sent;
690 unsigned long when_received;
691#endif
692 mid_receive_t *receive;
693 mid_callback_t *callback;
694 void *callback_data;
695 struct smb_hdr *resp_buf;
696 int midState;
697 __u8 command;
698 bool largeBuf:1;
699 bool multiRsp:1;
700 bool multiEnd:1;
701};
702
703
704
705#ifdef CONFIG_CIFS_STATS2
706
707static inline void cifs_in_send_inc(struct TCP_Server_Info *server)
708{
709 atomic_inc(&server->in_send);
710}
711
712static inline void cifs_in_send_dec(struct TCP_Server_Info *server)
713{
714 atomic_dec(&server->in_send);
715}
716
717static inline void cifs_num_waiters_inc(struct TCP_Server_Info *server)
718{
719 atomic_inc(&server->num_waiters);
720}
721
722static inline void cifs_num_waiters_dec(struct TCP_Server_Info *server)
723{
724 atomic_dec(&server->num_waiters);
725}
726
727static inline void cifs_save_when_sent(struct mid_q_entry *mid)
728{
729 mid->when_sent = jiffies;
730}
731#else
732static inline void cifs_in_send_inc(struct TCP_Server_Info *server)
733{
734}
735static inline void cifs_in_send_dec(struct TCP_Server_Info *server)
736{
737}
738
739static inline void cifs_num_waiters_inc(struct TCP_Server_Info *server)
740{
741}
742
743static inline void cifs_num_waiters_dec(struct TCP_Server_Info *server)
744{
745}
746
747static inline void cifs_save_when_sent(struct mid_q_entry *mid)
748{
749}
750#endif
751
752
753struct dir_notify_req {
754 struct list_head lhead;
755 __le16 Pid;
756 __le16 PidHigh;
757 __u16 Mid;
758 __u16 Tid;
759 __u16 Uid;
760 __u16 netfid;
761 __u32 filter;
762 int multishot;
763 struct file *pfile;
764};
765
766struct dfs_info3_param {
767 int flags;
768 int path_consumed;
769 int server_type;
770 int ref_flag;
771 char *path_name;
772 char *node_name;
773};
774
775
776
777
778
779
780#define CIFS_FATTR_DFS_REFERRAL 0x1
781#define CIFS_FATTR_DELETE_PENDING 0x2
782#define CIFS_FATTR_NEED_REVAL 0x4
783#define CIFS_FATTR_INO_COLLISION 0x8
784
785struct cifs_fattr {
786 u32 cf_flags;
787 u32 cf_cifsattrs;
788 u64 cf_uniqueid;
789 u64 cf_eof;
790 u64 cf_bytes;
791 u64 cf_createtime;
792 uid_t cf_uid;
793 gid_t cf_gid;
794 umode_t cf_mode;
795 dev_t cf_rdev;
796 unsigned int cf_nlink;
797 unsigned int cf_dtype;
798 struct timespec cf_atime;
799 struct timespec cf_mtime;
800 struct timespec cf_ctime;
801};
802
803static inline void free_dfs_info_param(struct dfs_info3_param *param)
804{
805 if (param) {
806 kfree(param->path_name);
807 kfree(param->node_name);
808 kfree(param);
809 }
810}
811
812static inline void free_dfs_info_array(struct dfs_info3_param *param,
813 int number_of_items)
814{
815 int i;
816 if ((number_of_items == 0) || (param == NULL))
817 return;
818 for (i = 0; i < number_of_items; i++) {
819 kfree(param[i].path_name);
820 kfree(param[i].node_name);
821 }
822 kfree(param);
823}
824
825#define MID_FREE 0
826#define MID_REQUEST_ALLOCATED 1
827#define MID_REQUEST_SUBMITTED 2
828#define MID_RESPONSE_RECEIVED 4
829#define MID_RETRY_NEEDED 8
830#define MID_RESPONSE_MALFORMED 0x10
831#define MID_SHUTDOWN 0x20
832
833
834#define CIFS_NO_BUFFER 0
835#define CIFS_SMALL_BUFFER 1
836#define CIFS_LARGE_BUFFER 2
837#define CIFS_IOVEC 4
838
839
840#define CIFS_BLOCKING_OP 1
841#define CIFS_ASYNC_OP 2
842#define CIFS_TIMEOUT_MASK 0x003
843#define CIFS_LOG_ERROR 0x010
844#define CIFS_LARGE_BUF_OP 0x020
845#define CIFS_NO_RESP 0x040
846
847
848#define CIFSSEC_MAY_SIGN 0x00001
849#define CIFSSEC_MAY_NTLM 0x00002
850#define CIFSSEC_MAY_NTLMV2 0x00004
851#define CIFSSEC_MAY_KRB5 0x00008
852#ifdef CONFIG_CIFS_WEAK_PW_HASH
853#define CIFSSEC_MAY_LANMAN 0x00010
854#define CIFSSEC_MAY_PLNTXT 0x00020
855#else
856#define CIFSSEC_MAY_LANMAN 0
857#define CIFSSEC_MAY_PLNTXT 0
858#endif
859#define CIFSSEC_MAY_SEAL 0x00040
860#define CIFSSEC_MAY_NTLMSSP 0x00080
861
862#define CIFSSEC_MUST_SIGN 0x01001
863
864
865
866#define CIFSSEC_MUST_NTLM 0x02002
867#define CIFSSEC_MUST_NTLMV2 0x04004
868#define CIFSSEC_MUST_KRB5 0x08008
869#ifdef CONFIG_CIFS_WEAK_PW_HASH
870#define CIFSSEC_MUST_LANMAN 0x10010
871#define CIFSSEC_MUST_PLNTXT 0x20020
872#ifdef CONFIG_CIFS_UPCALL
873#define CIFSSEC_MASK 0xBF0BF
874#else
875#define CIFSSEC_MASK 0xB70B7
876#endif
877#else
878#define CIFSSEC_MUST_LANMAN 0
879#define CIFSSEC_MUST_PLNTXT 0
880#ifdef CONFIG_CIFS_UPCALL
881#define CIFSSEC_MASK 0x8F08F
882#else
883#define CIFSSEC_MASK 0x87087
884#endif
885#endif
886#define CIFSSEC_MUST_SEAL 0x40040
887#define CIFSSEC_MUST_NTLMSSP 0x80080
888
889#define CIFSSEC_DEF (CIFSSEC_MAY_SIGN | CIFSSEC_MAY_NTLM | CIFSSEC_MAY_NTLMV2)
890#define CIFSSEC_MAX (CIFSSEC_MUST_SIGN | CIFSSEC_MUST_NTLMV2)
891#define CIFSSEC_AUTH_MASK (CIFSSEC_MAY_NTLM | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_LANMAN | CIFSSEC_MAY_PLNTXT | CIFSSEC_MAY_KRB5 | CIFSSEC_MAY_NTLMSSP)
892
893
894
895
896
897
898#define UID_HASH (16)
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927#ifdef DECLARE_GLOBALS_HERE
928#define GLOBAL_EXTERN
929#else
930#define GLOBAL_EXTERN extern
931#endif
932
933
934
935
936
937
938
939
940GLOBAL_EXTERN struct list_head cifs_tcp_ses_list;
941
942
943
944
945
946
947
948GLOBAL_EXTERN spinlock_t cifs_tcp_ses_lock;
949
950
951
952
953
954
955
956
957GLOBAL_EXTERN spinlock_t cifs_file_list_lock;
958
959#ifdef CONFIG_CIFS_DNOTIFY_EXPERIMENTAL
960
961GLOBAL_EXTERN struct list_head GlobalDnotifyReqList;
962
963GLOBAL_EXTERN struct list_head GlobalDnotifyRsp_Q;
964#endif
965
966
967
968
969GLOBAL_EXTERN unsigned int GlobalCurrentXid;
970GLOBAL_EXTERN unsigned int GlobalTotalActiveXid;
971GLOBAL_EXTERN unsigned int GlobalMaxActiveXid;
972GLOBAL_EXTERN spinlock_t GlobalMid_Lock;
973
974
975
976
977GLOBAL_EXTERN atomic_t sesInfoAllocCount;
978GLOBAL_EXTERN atomic_t tconInfoAllocCount;
979GLOBAL_EXTERN atomic_t tcpSesAllocCount;
980GLOBAL_EXTERN atomic_t tcpSesReconnectCount;
981GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
982
983
984GLOBAL_EXTERN atomic_t bufAllocCount;
985#ifdef CONFIG_CIFS_STATS2
986GLOBAL_EXTERN atomic_t totBufAllocCount;
987GLOBAL_EXTERN atomic_t totSmBufAllocCount;
988#endif
989GLOBAL_EXTERN atomic_t smBufAllocCount;
990GLOBAL_EXTERN atomic_t midCount;
991
992
993GLOBAL_EXTERN unsigned int multiuser_mount;
994
995
996
997
998GLOBAL_EXTERN bool enable_oplocks;
999GLOBAL_EXTERN unsigned int lookupCacheEnabled;
1000GLOBAL_EXTERN unsigned int global_secflags;
1001
1002GLOBAL_EXTERN unsigned int sign_CIFS_PDUs;
1003GLOBAL_EXTERN unsigned int linuxExtEnabled;
1004GLOBAL_EXTERN unsigned int CIFSMaxBufSize;
1005GLOBAL_EXTERN unsigned int cifs_min_rcv;
1006GLOBAL_EXTERN unsigned int cifs_min_small;
1007GLOBAL_EXTERN unsigned int cifs_max_pending;
1008
1009
1010GLOBAL_EXTERN unsigned short echo_retries;
1011
1012#ifdef CONFIG_CIFS_ACL
1013GLOBAL_EXTERN struct rb_root uidtree;
1014GLOBAL_EXTERN struct rb_root gidtree;
1015GLOBAL_EXTERN spinlock_t siduidlock;
1016GLOBAL_EXTERN spinlock_t sidgidlock;
1017GLOBAL_EXTERN struct rb_root siduidtree;
1018GLOBAL_EXTERN struct rb_root sidgidtree;
1019GLOBAL_EXTERN spinlock_t uidsidlock;
1020GLOBAL_EXTERN spinlock_t gidsidlock;
1021#endif
1022
1023void cifs_oplock_break(struct work_struct *work);
1024
1025extern const struct slow_work_ops cifs_oplock_break_ops;
1026
1027#endif
1028