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/mempool.h>
26#include <linux/workqueue.h>
27#include "cifs_fs_sb.h"
28#include "cifsacl.h"
29#include <crypto/internal/hash.h>
30#include <linux/scatterlist.h>
31#include <uapi/linux/cifs/cifs_mount.h>
32#ifdef CONFIG_CIFS_SMB2
33#include "smb2pdu.h"
34#endif
35
36#define CIFS_MAGIC_NUMBER 0xFF534D42
37
38
39
40
41#define MAX_UID_INFO 16
42#define MAX_SES_INFO 2
43#define MAX_TCON_INFO 4
44
45#define MAX_TREE_SIZE (2 + CIFS_NI_MAXHOST + 1 + CIFS_MAX_SHARE_LEN + 1)
46
47#define CIFS_MIN_RCV_POOL 4
48
49#define MAX_REOPEN_ATT 5
50
51
52
53#define CIFS_DEF_ACTIMEO (1 * HZ)
54
55
56
57
58#define CIFS_MAX_ACTIMEO (1 << 30)
59
60
61
62
63
64#define CIFS_MAX_REQ 32767
65
66#define RFC1001_NAME_LEN 15
67#define RFC1001_NAME_LEN_WITH_NULL (RFC1001_NAME_LEN + 1)
68
69
70#define SERVER_NAME_LENGTH 40
71#define SERVER_NAME_LEN_WITH_NULL (SERVER_NAME_LENGTH + 1)
72
73
74#define SMB_ECHO_INTERVAL_MIN 1
75#define SMB_ECHO_INTERVAL_MAX 600
76#define SMB_ECHO_INTERVAL_DEFAULT 60
77
78#include "cifspdu.h"
79
80#ifndef XATTR_DOS_ATTRIB
81#define XATTR_DOS_ATTRIB "user.DOSATTRIB"
82#endif
83
84
85
86
87
88
89enum statusEnum {
90 CifsNew = 0,
91 CifsGood,
92 CifsExiting,
93 CifsNeedReconnect,
94 CifsNeedNegotiate
95};
96
97enum securityEnum {
98 Unspecified = 0,
99 LANMAN,
100 NTLM,
101 NTLMv2,
102 RawNTLMSSP,
103 Kerberos,
104};
105
106struct session_key {
107 unsigned int len;
108 char *response;
109};
110
111
112struct sdesc {
113 struct shash_desc shash;
114 char ctx[];
115};
116
117
118struct cifs_secmech {
119 struct crypto_shash *hmacmd5;
120 struct crypto_shash *md5;
121 struct crypto_shash *hmacsha256;
122 struct crypto_shash *cmacaes;
123 struct sdesc *sdeschmacmd5;
124 struct sdesc *sdescmd5;
125 struct sdesc *sdeschmacsha256;
126 struct sdesc *sdesccmacaes;
127};
128
129
130struct ntlmssp_auth {
131 bool sesskey_per_smbsess;
132 __u32 client_flags;
133 __u32 server_flags;
134 unsigned char ciphertext[CIFS_CPHTXT_SIZE];
135 char cryptkey[CIFS_CRYPTO_KEY_SIZE];
136};
137
138struct cifs_cred {
139 int uid;
140 int gid;
141 int mode;
142 int cecount;
143 struct cifs_sid osid;
144 struct cifs_sid gsid;
145 struct cifs_ntace *ntaces;
146 struct cifs_ace *aces;
147};
148
149
150
151
152
153
154
155
156
157
158
159
160
161struct smb_rqst {
162 struct kvec *rq_iov;
163 unsigned int rq_nvec;
164 struct page **rq_pages;
165 unsigned int rq_npages;
166 unsigned int rq_pagesz;
167 unsigned int rq_tailsz;
168};
169
170enum smb_version {
171 Smb_1 = 1,
172 Smb_20,
173 Smb_21,
174 Smb_30,
175 Smb_302,
176#ifdef CONFIG_CIFS_SMB311
177 Smb_311,
178#endif
179 Smb_version_err
180};
181
182struct mid_q_entry;
183struct TCP_Server_Info;
184struct cifsFileInfo;
185struct cifs_ses;
186struct cifs_tcon;
187struct dfs_info3_param;
188struct cifs_fattr;
189struct smb_vol;
190struct cifs_fid;
191struct cifs_readdata;
192struct cifs_writedata;
193struct cifs_io_parms;
194struct cifs_search_info;
195struct cifsInodeInfo;
196struct cifs_open_parms;
197
198struct smb_version_operations {
199 int (*send_cancel)(struct TCP_Server_Info *, void *,
200 struct mid_q_entry *);
201 bool (*compare_fids)(struct cifsFileInfo *, struct cifsFileInfo *);
202
203 struct mid_q_entry *(*setup_request)(struct cifs_ses *,
204 struct smb_rqst *);
205
206 struct mid_q_entry *(*setup_async_request)(struct TCP_Server_Info *,
207 struct smb_rqst *);
208
209 int (*check_receive)(struct mid_q_entry *, struct TCP_Server_Info *,
210 bool);
211 void (*add_credits)(struct TCP_Server_Info *, const unsigned int,
212 const int);
213 void (*set_credits)(struct TCP_Server_Info *, const int);
214 int * (*get_credits_field)(struct TCP_Server_Info *, const int);
215 unsigned int (*get_credits)(struct mid_q_entry *);
216 __u64 (*get_next_mid)(struct TCP_Server_Info *);
217
218 unsigned int (*read_data_offset)(char *);
219
220 unsigned int (*read_data_length)(char *);
221
222 int (*map_error)(char *, bool);
223
224 struct mid_q_entry * (*find_mid)(struct TCP_Server_Info *, char *);
225 void (*dump_detail)(void *);
226 void (*clear_stats)(struct cifs_tcon *);
227 void (*print_stats)(struct seq_file *m, struct cifs_tcon *);
228 void (*dump_share_caps)(struct seq_file *, struct cifs_tcon *);
229
230 int (*check_message)(char *, unsigned int, struct TCP_Server_Info *);
231 bool (*is_oplock_break)(char *, struct TCP_Server_Info *);
232 void (*downgrade_oplock)(struct TCP_Server_Info *,
233 struct cifsInodeInfo *, bool);
234
235 bool (*check_trans2)(struct mid_q_entry *, struct TCP_Server_Info *,
236 char *, int);
237
238 bool (*need_neg)(struct TCP_Server_Info *);
239
240 int (*negotiate)(const unsigned int, struct cifs_ses *);
241
242 unsigned int (*negotiate_wsize)(struct cifs_tcon *, struct smb_vol *);
243
244 unsigned int (*negotiate_rsize)(struct cifs_tcon *, struct smb_vol *);
245
246 int (*sess_setup)(const unsigned int, struct cifs_ses *,
247 const struct nls_table *);
248
249 int (*logoff)(const unsigned int, struct cifs_ses *);
250
251 int (*tree_connect)(const unsigned int, struct cifs_ses *, const char *,
252 struct cifs_tcon *, const struct nls_table *);
253
254 int (*tree_disconnect)(const unsigned int, struct cifs_tcon *);
255
256 int (*get_dfs_refer)(const unsigned int, struct cifs_ses *,
257 const char *, struct dfs_info3_param **,
258 unsigned int *, const struct nls_table *, int);
259
260 void (*qfs_tcon)(const unsigned int, struct cifs_tcon *);
261
262 int (*is_path_accessible)(const unsigned int, struct cifs_tcon *,
263 struct cifs_sb_info *, const char *);
264
265 int (*query_path_info)(const unsigned int, struct cifs_tcon *,
266 struct cifs_sb_info *, const char *,
267 FILE_ALL_INFO *, bool *, bool *);
268
269 int (*query_file_info)(const unsigned int, struct cifs_tcon *,
270 struct cifs_fid *, FILE_ALL_INFO *);
271
272 int (*get_srv_inum)(const unsigned int, struct cifs_tcon *,
273 struct cifs_sb_info *, const char *,
274 u64 *uniqueid, FILE_ALL_INFO *);
275
276 int (*set_path_size)(const unsigned int, struct cifs_tcon *,
277 const char *, __u64, struct cifs_sb_info *, bool);
278
279 int (*set_file_size)(const unsigned int, struct cifs_tcon *,
280 struct cifsFileInfo *, __u64, bool);
281
282 int (*set_file_info)(struct inode *, const char *, FILE_BASIC_INFO *,
283 const unsigned int);
284 int (*set_compression)(const unsigned int, struct cifs_tcon *,
285 struct cifsFileInfo *);
286
287 bool (*can_echo)(struct TCP_Server_Info *);
288
289 int (*echo)(struct TCP_Server_Info *);
290
291 int (*mkdir)(const unsigned int, struct cifs_tcon *, const char *,
292 struct cifs_sb_info *);
293
294 void (*mkdir_setinfo)(struct inode *, const char *,
295 struct cifs_sb_info *, struct cifs_tcon *,
296 const unsigned int);
297
298 int (*rmdir)(const unsigned int, struct cifs_tcon *, const char *,
299 struct cifs_sb_info *);
300
301 int (*unlink)(const unsigned int, struct cifs_tcon *, const char *,
302 struct cifs_sb_info *);
303
304 int (*rename_pending_delete)(const char *, struct dentry *,
305 const unsigned int);
306
307 int (*rename)(const unsigned int, struct cifs_tcon *, const char *,
308 const char *, struct cifs_sb_info *);
309
310 int (*create_hardlink)(const unsigned int, struct cifs_tcon *,
311 const char *, const char *,
312 struct cifs_sb_info *);
313
314 int (*query_symlink)(const unsigned int, struct cifs_tcon *,
315 const char *, char **, struct cifs_sb_info *);
316
317 int (*open)(const unsigned int, struct cifs_open_parms *,
318 __u32 *, FILE_ALL_INFO *);
319
320 void (*set_fid)(struct cifsFileInfo *, struct cifs_fid *, __u32);
321
322 void (*close)(const unsigned int, struct cifs_tcon *,
323 struct cifs_fid *);
324
325 int (*flush)(const unsigned int, struct cifs_tcon *, struct cifs_fid *);
326
327 int (*async_readv)(struct cifs_readdata *);
328
329 int (*async_writev)(struct cifs_writedata *,
330 void (*release)(struct kref *));
331
332 int (*sync_read)(const unsigned int, struct cifs_fid *,
333 struct cifs_io_parms *, unsigned int *, char **,
334 int *);
335
336 int (*sync_write)(const unsigned int, struct cifs_fid *,
337 struct cifs_io_parms *, unsigned int *, struct kvec *,
338 unsigned long);
339
340 int (*query_dir_first)(const unsigned int, struct cifs_tcon *,
341 const char *, struct cifs_sb_info *,
342 struct cifs_fid *, __u16,
343 struct cifs_search_info *);
344
345 int (*query_dir_next)(const unsigned int, struct cifs_tcon *,
346 struct cifs_fid *,
347 __u16, struct cifs_search_info *srch_inf);
348
349 int (*close_dir)(const unsigned int, struct cifs_tcon *,
350 struct cifs_fid *);
351
352 unsigned int (*calc_smb_size)(void *);
353
354 bool (*is_status_pending)(char *, struct TCP_Server_Info *, int);
355
356 int (*oplock_response)(struct cifs_tcon *, struct cifs_fid *,
357 struct cifsInodeInfo *);
358
359 int (*queryfs)(const unsigned int, struct cifs_tcon *,
360 struct kstatfs *);
361
362 int (*mand_lock)(const unsigned int, struct cifsFileInfo *, __u64,
363 __u64, __u32, int, int, bool);
364
365 int (*mand_unlock_range)(struct cifsFileInfo *, struct file_lock *,
366 const unsigned int);
367
368 int (*push_mand_locks)(struct cifsFileInfo *);
369
370 void (*get_lease_key)(struct inode *, struct cifs_fid *);
371
372 void (*set_lease_key)(struct inode *, struct cifs_fid *);
373
374 void (*new_lease_key)(struct cifs_fid *);
375 int (*generate_signingkey)(struct cifs_ses *);
376 int (*calc_signature)(struct smb_rqst *, struct TCP_Server_Info *);
377 int (*set_integrity)(const unsigned int, struct cifs_tcon *tcon,
378 struct cifsFileInfo *src_file);
379 int (*query_mf_symlink)(unsigned int, struct cifs_tcon *,
380 struct cifs_sb_info *, const unsigned char *,
381 char *, unsigned int *);
382 int (*create_mf_symlink)(unsigned int, struct cifs_tcon *,
383 struct cifs_sb_info *, const unsigned char *,
384 char *, unsigned int *);
385
386 bool (*is_read_op)(__u32);
387
388 void (*set_oplock_level)(struct cifsInodeInfo *, __u32, unsigned int,
389 bool *);
390
391 char * (*create_lease_buf)(u8 *, u8);
392
393 __u8 (*parse_lease_buf)(void *, unsigned int *);
394 int (*clone_range)(const unsigned int, struct cifsFileInfo *src_file,
395 struct cifsFileInfo *target_file, u64 src_off, u64 len,
396 u64 dest_off);
397 int (*duplicate_extents)(const unsigned int, struct cifsFileInfo *src,
398 struct cifsFileInfo *target_file, u64 src_off, u64 len,
399 u64 dest_off);
400 int (*validate_negotiate)(const unsigned int, struct cifs_tcon *);
401 ssize_t (*query_all_EAs)(const unsigned int, struct cifs_tcon *,
402 const unsigned char *, const unsigned char *, char *,
403 size_t, const struct nls_table *, int);
404 int (*set_EA)(const unsigned int, struct cifs_tcon *, const char *,
405 const char *, const void *, const __u16,
406 const struct nls_table *, int);
407 struct cifs_ntsd * (*get_acl)(struct cifs_sb_info *, struct inode *,
408 const char *, u32 *);
409 struct cifs_ntsd * (*get_acl_by_fid)(struct cifs_sb_info *,
410 const struct cifs_fid *, u32 *);
411 int (*set_acl)(struct cifs_ntsd *, __u32, struct inode *, const char *,
412 int);
413
414 unsigned int (*wp_retry_size)(struct inode *);
415
416 int (*wait_mtu_credits)(struct TCP_Server_Info *, unsigned int,
417 unsigned int *, unsigned int *);
418
419 bool (*dir_needs_close)(struct cifsFileInfo *);
420 long (*fallocate)(struct file *, struct cifs_tcon *, int, loff_t,
421 loff_t);
422};
423
424struct smb_version_values {
425 char *version_string;
426 __u16 protocol_id;
427 __u32 req_capabilities;
428 __u32 large_lock_type;
429 __u32 exclusive_lock_type;
430 __u32 shared_lock_type;
431 __u32 unlock_lock_type;
432 size_t header_size;
433 size_t max_header_size;
434 size_t read_rsp_size;
435 __le16 lock_cmd;
436 unsigned int cap_unix;
437 unsigned int cap_nt_find;
438 unsigned int cap_large_files;
439 __u16 signing_enabled;
440 __u16 signing_required;
441 size_t create_lease_size;
442};
443
444#define HEADER_SIZE(server) (server->vals->header_size)
445#define MAX_HEADER_SIZE(server) (server->vals->max_header_size)
446
447struct smb_vol {
448 char *username;
449 char *password;
450 char *domainname;
451 char *UNC;
452 char *iocharset;
453 char source_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL];
454 char target_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL];
455 kuid_t cred_uid;
456 kuid_t linux_uid;
457 kgid_t linux_gid;
458 kuid_t backupuid;
459 kgid_t backupgid;
460 umode_t file_mode;
461 umode_t dir_mode;
462 enum securityEnum sectype;
463 bool sign;
464 bool retry:1;
465 bool intr:1;
466 bool setuids:1;
467 bool override_uid:1;
468 bool override_gid:1;
469 bool dynperm:1;
470 bool noperm:1;
471 bool no_psx_acl:1;
472 bool cifs_acl:1;
473 bool backupuid_specified;
474 bool backupgid_specified;
475 bool no_xattr:1;
476 bool server_ino:1;
477 bool direct_io:1;
478 bool strict_io:1;
479 bool remap:1;
480 bool sfu_remap:1;
481 bool posix_paths:1;
482 bool no_linux_ext:1;
483 bool sfu_emul:1;
484 bool nullauth:1;
485 bool nocase:1;
486 bool nobrl:1;
487 bool mand_lock:1;
488 bool seal:1;
489 bool nodfs:1;
490 bool local_lease:1;
491 bool noblocksnd:1;
492 bool noautotune:1;
493 bool nostrictsync:1;
494 bool fsc:1;
495 bool mfsymlinks:1;
496 bool multiuser:1;
497 bool rwpidforward:1;
498 bool nosharesock:1;
499 bool persistent:1;
500 bool nopersistent:1;
501 bool resilient:1;
502 unsigned int rsize;
503 unsigned int wsize;
504 bool sockopt_tcp_nodelay:1;
505 unsigned long actimeo;
506 struct smb_version_operations *ops;
507 struct smb_version_values *vals;
508 char *prepath;
509 struct sockaddr_storage dstaddr;
510 struct sockaddr_storage srcaddr;
511 struct nls_table *local_nls;
512 unsigned int echo_interval;
513};
514
515#define CIFS_MOUNT_MASK (CIFS_MOUNT_NO_PERM | CIFS_MOUNT_SET_UID | \
516 CIFS_MOUNT_SERVER_INUM | CIFS_MOUNT_DIRECT_IO | \
517 CIFS_MOUNT_NO_XATTR | CIFS_MOUNT_MAP_SPECIAL_CHR | \
518 CIFS_MOUNT_MAP_SFM_CHR | \
519 CIFS_MOUNT_UNX_EMUL | CIFS_MOUNT_NO_BRL | \
520 CIFS_MOUNT_CIFS_ACL | CIFS_MOUNT_OVERR_UID | \
521 CIFS_MOUNT_OVERR_GID | CIFS_MOUNT_DYNPERM | \
522 CIFS_MOUNT_NOPOSIXBRL | CIFS_MOUNT_NOSSYNC | \
523 CIFS_MOUNT_FSCACHE | CIFS_MOUNT_MF_SYMLINKS | \
524 CIFS_MOUNT_MULTIUSER | CIFS_MOUNT_STRICT_IO | \
525 CIFS_MOUNT_CIFS_BACKUPUID | CIFS_MOUNT_CIFS_BACKUPGID)
526
527#define CIFS_MS_MASK (MS_RDONLY | MS_MANDLOCK | MS_NOEXEC | MS_NOSUID | \
528 MS_NODEV | MS_SYNCHRONOUS)
529
530struct cifs_mnt_data {
531 struct cifs_sb_info *cifs_sb;
532 struct smb_vol *vol;
533 int flags;
534};
535
536static inline unsigned int
537get_rfc1002_length(void *buf)
538{
539 return be32_to_cpu(*((__be32 *)buf)) & 0xffffff;
540}
541
542static inline void
543inc_rfc1001_len(void *buf, int count)
544{
545 be32_add_cpu((__be32 *)buf, count);
546}
547
548struct TCP_Server_Info {
549 struct list_head tcp_ses_list;
550 struct list_head smb_ses_list;
551 int srv_count;
552
553 char server_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
554 struct smb_version_operations *ops;
555 struct smb_version_values *vals;
556 enum statusEnum tcpStatus;
557 char *hostname;
558 struct socket *ssocket;
559 struct sockaddr_storage dstaddr;
560 struct sockaddr_storage srcaddr;
561#ifdef CONFIG_NET_NS
562 struct net *net;
563#endif
564 wait_queue_head_t response_q;
565 wait_queue_head_t request_q;
566 struct list_head pending_mid_q;
567 bool noblocksnd;
568 bool noautotune;
569 bool tcp_nodelay;
570 int credits;
571 unsigned int in_flight;
572 spinlock_t req_lock;
573 struct mutex srv_mutex;
574 struct task_struct *tsk;
575 char server_GUID[16];
576 __u16 sec_mode;
577 bool sign;
578 bool session_estab;
579#ifdef CONFIG_CIFS_SMB2
580 int echo_credits;
581 int oplock_credits;
582 bool echoes:1;
583 __u8 client_guid[SMB2_CLIENT_GUID_SIZE];
584#endif
585 u16 dialect;
586 bool oplocks:1;
587 unsigned int maxReq;
588
589
590 unsigned int maxBuf;
591
592
593
594 unsigned int max_rw;
595
596
597 unsigned int capabilities;
598 int timeAdj;
599 __u64 CurrentMid;
600 char cryptkey[CIFS_CRYPTO_KEY_SIZE];
601
602 char workstation_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
603 __u32 sequence_number;
604 struct session_key session_key;
605 unsigned long lstrp;
606 struct cifs_secmech secmech;
607#define CIFS_NEGFLAVOR_LANMAN 0
608#define CIFS_NEGFLAVOR_UNENCAP 1
609#define CIFS_NEGFLAVOR_EXTENDED 2
610 char negflavor;
611
612 bool sec_ntlmssp;
613 bool sec_kerberosu2u;
614 bool sec_kerberos;
615 bool sec_mskerberos;
616 bool large_buf;
617 struct delayed_work echo;
618 struct kvec *iov;
619 unsigned int nr_iov;
620 char *smallbuf;
621 char *bigbuf;
622 unsigned int total_read;
623#ifdef CONFIG_CIFS_FSCACHE
624 struct fscache_cookie *fscache;
625#endif
626#ifdef CONFIG_CIFS_STATS2
627 atomic_t in_send;
628 atomic_t num_waiters;
629#endif
630#ifdef CONFIG_CIFS_SMB2
631 unsigned int max_read;
632 unsigned int max_write;
633 __u8 preauth_hash[512];
634#endif
635 unsigned long echo_interval;
636};
637
638static inline unsigned int
639in_flight(struct TCP_Server_Info *server)
640{
641 unsigned int num;
642 spin_lock(&server->req_lock);
643 num = server->in_flight;
644 spin_unlock(&server->req_lock);
645 return num;
646}
647
648static inline bool
649has_credits(struct TCP_Server_Info *server, int *credits)
650{
651 int num;
652 spin_lock(&server->req_lock);
653 num = *credits;
654 spin_unlock(&server->req_lock);
655 return num > 0;
656}
657
658static inline void
659add_credits(struct TCP_Server_Info *server, const unsigned int add,
660 const int optype)
661{
662 server->ops->add_credits(server, add, optype);
663}
664
665static inline void
666add_credits_and_wake_if(struct TCP_Server_Info *server, const unsigned int add,
667 const int optype)
668{
669 if (add) {
670 server->ops->add_credits(server, add, optype);
671 wake_up(&server->request_q);
672 }
673}
674
675static inline void
676set_credits(struct TCP_Server_Info *server, const int val)
677{
678 server->ops->set_credits(server, val);
679}
680
681static inline __le64
682get_next_mid64(struct TCP_Server_Info *server)
683{
684 return cpu_to_le64(server->ops->get_next_mid(server));
685}
686
687static inline __le16
688get_next_mid(struct TCP_Server_Info *server)
689{
690 __u16 mid = server->ops->get_next_mid(server);
691
692
693
694
695 return cpu_to_le16(mid);
696}
697
698static inline __u16
699get_mid(const struct smb_hdr *smb)
700{
701 return le16_to_cpu(smb->Mid);
702}
703
704static inline bool
705compare_mid(__u16 mid, const struct smb_hdr *smb)
706{
707 return mid == le16_to_cpu(smb->Mid);
708}
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723#define CIFS_MAX_WSIZE ((1<<24) - 1 - sizeof(WRITE_REQ) + 4)
724#define CIFS_MAX_RSIZE ((1<<24) - sizeof(READ_RSP) + 4)
725
726
727
728
729
730
731#define CIFS_MAX_RFC1002_WSIZE ((1<<17) - 1 - sizeof(WRITE_REQ) + 4)
732#define CIFS_MAX_RFC1002_RSIZE ((1<<17) - 1 - sizeof(READ_RSP) + 4)
733
734
735
736
737
738
739#define CIFS_DEFAULT_IOSIZE (1024 * 1024)
740
741
742
743
744
745
746
747
748
749
750
751
752#define CIFS_DEFAULT_NON_POSIX_RSIZE (60 * 1024)
753#define CIFS_DEFAULT_NON_POSIX_WSIZE (65536)
754
755
756
757
758
759
760#ifdef CONFIG_NET_NS
761
762static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
763{
764 return srv->net;
765}
766
767static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
768{
769 srv->net = net;
770}
771
772#else
773
774static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
775{
776 return &init_net;
777}
778
779static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
780{
781}
782
783#endif
784
785
786
787
788struct cifs_ses {
789 struct list_head smb_ses_list;
790 struct list_head tcon_list;
791 struct mutex session_mutex;
792 struct TCP_Server_Info *server;
793 int ses_count;
794 enum statusEnum status;
795 unsigned overrideSecFlg;
796 __u16 ipc_tid;
797 char *serverOS;
798 char *serverNOS;
799 char *serverDomain;
800 __u64 Suid;
801 kuid_t linux_uid;
802 kuid_t cred_uid;
803 unsigned int capabilities;
804 char serverName[SERVER_NAME_LEN_WITH_NULL * 2];
805
806 char *user_name;
807
808 char *domainName;
809 char *password;
810 struct session_key auth_key;
811 struct ntlmssp_auth *ntlmssp;
812 enum securityEnum sectype;
813 bool sign;
814 bool need_reconnect:1;
815#ifdef CONFIG_CIFS_SMB2
816 __u16 session_flags;
817 __u8 smb3signingkey[SMB3_SIGN_KEY_SIZE];
818 __u8 smb3encryptionkey[SMB3_SIGN_KEY_SIZE];
819 __u8 smb3decryptionkey[SMB3_SIGN_KEY_SIZE];
820 __u8 preauth_hash[512];
821#endif
822};
823
824static inline bool
825cap_unix(struct cifs_ses *ses)
826{
827 return ses->server->vals->cap_unix & ses->capabilities;
828}
829
830
831
832
833
834struct cifs_tcon {
835 struct list_head tcon_list;
836 int tc_count;
837 struct list_head openFileList;
838 struct cifs_ses *ses;
839 char treeName[MAX_TREE_SIZE + 1];
840 char *nativeFileSystem;
841 char *password;
842 __u32 tid;
843 __u16 Flags;
844 enum statusEnum tidStatus;
845#ifdef CONFIG_CIFS_STATS
846 atomic_t num_smbs_sent;
847 union {
848 struct {
849 atomic_t num_writes;
850 atomic_t num_reads;
851 atomic_t num_flushes;
852 atomic_t num_oplock_brks;
853 atomic_t num_opens;
854 atomic_t num_closes;
855 atomic_t num_deletes;
856 atomic_t num_mkdirs;
857 atomic_t num_posixopens;
858 atomic_t num_posixmkdirs;
859 atomic_t num_rmdirs;
860 atomic_t num_renames;
861 atomic_t num_t2renames;
862 atomic_t num_ffirst;
863 atomic_t num_fnext;
864 atomic_t num_fclose;
865 atomic_t num_hardlinks;
866 atomic_t num_symlinks;
867 atomic_t num_locks;
868 atomic_t num_acl_get;
869 atomic_t num_acl_set;
870 } cifs_stats;
871#ifdef CONFIG_CIFS_SMB2
872 struct {
873 atomic_t smb2_com_sent[NUMBER_OF_SMB2_COMMANDS];
874 atomic_t smb2_com_failed[NUMBER_OF_SMB2_COMMANDS];
875 } smb2_stats;
876#endif
877 } stats;
878#ifdef CONFIG_CIFS_STATS2
879 unsigned long long time_writes;
880 unsigned long long time_reads;
881 unsigned long long time_opens;
882 unsigned long long time_deletes;
883 unsigned long long time_closes;
884 unsigned long long time_mkdirs;
885 unsigned long long time_rmdirs;
886 unsigned long long time_renames;
887 unsigned long long time_t2renames;
888 unsigned long long time_ffirst;
889 unsigned long long time_fnext;
890 unsigned long long time_fclose;
891#endif
892 __u64 bytes_read;
893 __u64 bytes_written;
894 spinlock_t stat_lock;
895#endif
896 FILE_SYSTEM_DEVICE_INFO fsDevInfo;
897 FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo;
898 FILE_SYSTEM_UNIX_INFO fsUnixInfo;
899 bool ipc:1;
900 bool retry:1;
901 bool nocase:1;
902 bool seal:1;
903 bool unix_ext:1;
904
905 bool local_lease:1;
906 bool broken_posix_open;
907 bool broken_sparse_sup;
908 bool need_reconnect:1;
909 bool use_resilient:1;
910 bool use_persistent:1;
911#ifdef CONFIG_CIFS_SMB2
912 bool print:1;
913 bool bad_network_name:1;
914 __le32 capabilities;
915 __u32 share_flags;
916 __u32 maximal_access;
917 __u32 vol_serial_number;
918 __le64 vol_create_time;
919 __u32 ss_flags;
920 __u32 perf_sector_size;
921 __u32 max_chunks;
922 __u32 max_bytes_chunk;
923 __u32 max_bytes_copy;
924#endif
925#ifdef CONFIG_CIFS_FSCACHE
926 u64 resource_id;
927 struct fscache_cookie *fscache;
928#endif
929 struct list_head pending_opens;
930
931};
932
933
934
935
936
937
938
939struct tcon_link {
940 struct rb_node tl_rbnode;
941 kuid_t tl_uid;
942 unsigned long tl_flags;
943#define TCON_LINK_MASTER 0
944#define TCON_LINK_PENDING 1
945#define TCON_LINK_IN_TREE 2
946 unsigned long tl_time;
947 atomic_t tl_count;
948 struct cifs_tcon *tl_tcon;
949};
950
951extern struct tcon_link *cifs_sb_tlink(struct cifs_sb_info *cifs_sb);
952
953static inline struct cifs_tcon *
954tlink_tcon(struct tcon_link *tlink)
955{
956 return tlink->tl_tcon;
957}
958
959extern void cifs_put_tlink(struct tcon_link *tlink);
960
961static inline struct tcon_link *
962cifs_get_tlink(struct tcon_link *tlink)
963{
964 if (tlink && !IS_ERR(tlink))
965 atomic_inc(&tlink->tl_count);
966 return tlink;
967}
968
969
970extern struct cifs_tcon *cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb);
971
972#define CIFS_OPLOCK_NO_CHANGE 0xfe
973
974struct cifs_pending_open {
975 struct list_head olist;
976 struct tcon_link *tlink;
977 __u8 lease_key[16];
978 __u32 oplock;
979};
980
981
982
983
984
985struct cifsLockInfo {
986 struct list_head llist;
987 struct list_head blist;
988 wait_queue_head_t block_q;
989 __u64 offset;
990 __u64 length;
991 __u32 pid;
992 __u32 type;
993};
994
995
996
997
998struct cifs_search_info {
999 loff_t index_of_last_entry;
1000 __u16 entries_in_buffer;
1001 __u16 info_level;
1002 __u32 resume_key;
1003 char *ntwrk_buf_start;
1004 char *srch_entries_start;
1005 char *last_entry;
1006 const char *presume_name;
1007 unsigned int resume_name_len;
1008 bool endOfSearch:1;
1009 bool emptyDir:1;
1010 bool unicode:1;
1011 bool smallBuf:1;
1012};
1013
1014struct cifs_open_parms {
1015 struct cifs_tcon *tcon;
1016 struct cifs_sb_info *cifs_sb;
1017 int disposition;
1018 int desired_access;
1019 int create_options;
1020 const char *path;
1021 struct cifs_fid *fid;
1022 bool reconnect:1;
1023};
1024
1025struct cifs_fid {
1026 __u16 netfid;
1027#ifdef CONFIG_CIFS_SMB2
1028 __u64 persistent_fid;
1029 __u64 volatile_fid;
1030 __u8 lease_key[SMB2_LEASE_KEY_SIZE];
1031 __u8 create_guid[16];
1032#endif
1033 struct cifs_pending_open *pending_open;
1034 unsigned int epoch;
1035 bool purge_cache;
1036};
1037
1038struct cifs_fid_locks {
1039 struct list_head llist;
1040 struct cifsFileInfo *cfile;
1041 struct list_head locks;
1042};
1043
1044struct cifsFileInfo {
1045 struct list_head tlist;
1046 struct list_head flist;
1047 struct cifs_fid_locks *llist;
1048 kuid_t uid;
1049 __u32 pid;
1050 struct cifs_fid fid;
1051 ;
1052
1053 struct dentry *dentry;
1054 unsigned int f_flags;
1055 struct tcon_link *tlink;
1056 bool invalidHandle:1;
1057 bool oplock_break_cancelled:1;
1058 int count;
1059 struct mutex fh_mutex;
1060 struct cifs_search_info srch_inf;
1061 struct work_struct oplock_break;
1062};
1063
1064struct cifs_io_parms {
1065 __u16 netfid;
1066#ifdef CONFIG_CIFS_SMB2
1067 __u64 persistent_fid;
1068 __u64 volatile_fid;
1069#endif
1070 __u32 pid;
1071 __u64 offset;
1072 unsigned int length;
1073 struct cifs_tcon *tcon;
1074};
1075
1076struct cifs_readdata;
1077
1078
1079struct cifs_readdata {
1080 struct kref refcount;
1081 struct list_head list;
1082 struct completion done;
1083 struct cifsFileInfo *cfile;
1084 struct address_space *mapping;
1085 __u64 offset;
1086 unsigned int bytes;
1087 unsigned int got_bytes;
1088 pid_t pid;
1089 int result;
1090 struct work_struct work;
1091 int (*read_into_pages)(struct TCP_Server_Info *server,
1092 struct cifs_readdata *rdata,
1093 unsigned int len);
1094 struct kvec iov;
1095 unsigned int pagesz;
1096 unsigned int tailsz;
1097 unsigned int credits;
1098 unsigned int nr_pages;
1099 struct page *pages[];
1100};
1101
1102struct cifs_writedata;
1103
1104
1105struct cifs_writedata {
1106 struct kref refcount;
1107 struct list_head list;
1108 struct completion done;
1109 enum writeback_sync_modes sync_mode;
1110 struct work_struct work;
1111 struct cifsFileInfo *cfile;
1112 __u64 offset;
1113 pid_t pid;
1114 unsigned int bytes;
1115 int result;
1116 unsigned int pagesz;
1117 unsigned int tailsz;
1118 unsigned int credits;
1119 unsigned int nr_pages;
1120 struct page *pages[];
1121};
1122
1123
1124
1125
1126
1127static inline void
1128cifsFileInfo_get_locked(struct cifsFileInfo *cifs_file)
1129{
1130 ++cifs_file->count;
1131}
1132
1133struct cifsFileInfo *cifsFileInfo_get(struct cifsFileInfo *cifs_file);
1134void cifsFileInfo_put(struct cifsFileInfo *cifs_file);
1135
1136#define CIFS_CACHE_READ_FLG 1
1137#define CIFS_CACHE_HANDLE_FLG 2
1138#define CIFS_CACHE_RH_FLG (CIFS_CACHE_READ_FLG | CIFS_CACHE_HANDLE_FLG)
1139#define CIFS_CACHE_WRITE_FLG 4
1140#define CIFS_CACHE_RW_FLG (CIFS_CACHE_READ_FLG | CIFS_CACHE_WRITE_FLG)
1141#define CIFS_CACHE_RHW_FLG (CIFS_CACHE_RW_FLG | CIFS_CACHE_HANDLE_FLG)
1142
1143#define CIFS_CACHE_READ(cinode) (cinode->oplock & CIFS_CACHE_READ_FLG)
1144#define CIFS_CACHE_HANDLE(cinode) (cinode->oplock & CIFS_CACHE_HANDLE_FLG)
1145#define CIFS_CACHE_WRITE(cinode) (cinode->oplock & CIFS_CACHE_WRITE_FLG)
1146
1147
1148
1149
1150
1151struct cifsInodeInfo {
1152 bool can_cache_brlcks;
1153 struct list_head llist;
1154 struct rw_semaphore lock_sem;
1155
1156 struct list_head openFileList;
1157 __u32 cifsAttrs;
1158 unsigned int oplock;
1159 unsigned int epoch;
1160#define CIFS_INODE_PENDING_OPLOCK_BREAK (0)
1161#define CIFS_INODE_PENDING_WRITERS (1)
1162#define CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2 (2)
1163#define CIFS_INO_DELETE_PENDING (3)
1164#define CIFS_INO_INVALID_MAPPING (4)
1165#define CIFS_INO_LOCK (5)
1166 unsigned long flags;
1167 spinlock_t writers_lock;
1168 unsigned int writers;
1169 unsigned long time;
1170 u64 server_eof;
1171 u64 uniqueid;
1172 u64 createtime;
1173#ifdef CONFIG_CIFS_SMB2
1174 __u8 lease_key[SMB2_LEASE_KEY_SIZE];
1175#endif
1176#ifdef CONFIG_CIFS_FSCACHE
1177 struct fscache_cookie *fscache;
1178#endif
1179 struct inode vfs_inode;
1180};
1181
1182static inline struct cifsInodeInfo *
1183CIFS_I(struct inode *inode)
1184{
1185 return container_of(inode, struct cifsInodeInfo, vfs_inode);
1186}
1187
1188static inline struct cifs_sb_info *
1189CIFS_SB(struct super_block *sb)
1190{
1191 return sb->s_fs_info;
1192}
1193
1194static inline struct cifs_sb_info *
1195CIFS_FILE_SB(struct file *file)
1196{
1197 return CIFS_SB(file_inode(file)->i_sb);
1198}
1199
1200static inline char CIFS_DIR_SEP(const struct cifs_sb_info *cifs_sb)
1201{
1202 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
1203 return '/';
1204 else
1205 return '\\';
1206}
1207
1208static inline void
1209convert_delimiter(char *path, char delim)
1210{
1211 char old_delim, *pos;
1212
1213 if (delim == '/')
1214 old_delim = '\\';
1215 else
1216 old_delim = '/';
1217
1218 pos = path;
1219 while ((pos = strchr(pos, old_delim)))
1220 *pos = delim;
1221}
1222
1223#ifdef CONFIG_CIFS_STATS
1224#define cifs_stats_inc atomic_inc
1225
1226static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
1227 unsigned int bytes)
1228{
1229 if (bytes) {
1230 spin_lock(&tcon->stat_lock);
1231 tcon->bytes_written += bytes;
1232 spin_unlock(&tcon->stat_lock);
1233 }
1234}
1235
1236static inline void cifs_stats_bytes_read(struct cifs_tcon *tcon,
1237 unsigned int bytes)
1238{
1239 spin_lock(&tcon->stat_lock);
1240 tcon->bytes_read += bytes;
1241 spin_unlock(&tcon->stat_lock);
1242}
1243#else
1244
1245#define cifs_stats_inc(field) do {} while (0)
1246#define cifs_stats_bytes_written(tcon, bytes) do {} while (0)
1247#define cifs_stats_bytes_read(tcon, bytes) do {} while (0)
1248
1249#endif
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264typedef int (mid_receive_t)(struct TCP_Server_Info *server,
1265 struct mid_q_entry *mid);
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275typedef void (mid_callback_t)(struct mid_q_entry *mid);
1276
1277
1278struct mid_q_entry {
1279 struct list_head qhead;
1280 struct TCP_Server_Info *server;
1281 __u64 mid;
1282 __u32 pid;
1283 __u32 sequence_number;
1284 unsigned long when_alloc;
1285#ifdef CONFIG_CIFS_STATS2
1286 unsigned long when_sent;
1287 unsigned long when_received;
1288#endif
1289 mid_receive_t *receive;
1290 mid_callback_t *callback;
1291 void *callback_data;
1292 void *resp_buf;
1293 int mid_state;
1294 __le16 command;
1295 bool large_buf:1;
1296 bool multiRsp:1;
1297 bool multiEnd:1;
1298};
1299
1300
1301
1302#ifdef CONFIG_CIFS_STATS2
1303
1304static inline void cifs_in_send_inc(struct TCP_Server_Info *server)
1305{
1306 atomic_inc(&server->in_send);
1307}
1308
1309static inline void cifs_in_send_dec(struct TCP_Server_Info *server)
1310{
1311 atomic_dec(&server->in_send);
1312}
1313
1314static inline void cifs_num_waiters_inc(struct TCP_Server_Info *server)
1315{
1316 atomic_inc(&server->num_waiters);
1317}
1318
1319static inline void cifs_num_waiters_dec(struct TCP_Server_Info *server)
1320{
1321 atomic_dec(&server->num_waiters);
1322}
1323
1324static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1325{
1326 mid->when_sent = jiffies;
1327}
1328#else
1329static inline void cifs_in_send_inc(struct TCP_Server_Info *server)
1330{
1331}
1332static inline void cifs_in_send_dec(struct TCP_Server_Info *server)
1333{
1334}
1335
1336static inline void cifs_num_waiters_inc(struct TCP_Server_Info *server)
1337{
1338}
1339
1340static inline void cifs_num_waiters_dec(struct TCP_Server_Info *server)
1341{
1342}
1343
1344static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1345{
1346}
1347#endif
1348
1349
1350struct dir_notify_req {
1351 struct list_head lhead;
1352 __le16 Pid;
1353 __le16 PidHigh;
1354 __u16 Mid;
1355 __u16 Tid;
1356 __u16 Uid;
1357 __u16 netfid;
1358 __u32 filter;
1359 int multishot;
1360 struct file *pfile;
1361};
1362
1363struct dfs_info3_param {
1364 int flags;
1365 int path_consumed;
1366 int server_type;
1367 int ref_flag;
1368 char *path_name;
1369 char *node_name;
1370};
1371
1372
1373
1374
1375
1376
1377#define CIFS_FATTR_DFS_REFERRAL 0x1
1378#define CIFS_FATTR_DELETE_PENDING 0x2
1379#define CIFS_FATTR_NEED_REVAL 0x4
1380#define CIFS_FATTR_INO_COLLISION 0x8
1381#define CIFS_FATTR_UNKNOWN_NLINK 0x10
1382
1383struct cifs_fattr {
1384 u32 cf_flags;
1385 u32 cf_cifsattrs;
1386 u64 cf_uniqueid;
1387 u64 cf_eof;
1388 u64 cf_bytes;
1389 u64 cf_createtime;
1390 kuid_t cf_uid;
1391 kgid_t cf_gid;
1392 umode_t cf_mode;
1393 dev_t cf_rdev;
1394 unsigned int cf_nlink;
1395 unsigned int cf_dtype;
1396 struct timespec cf_atime;
1397 struct timespec cf_mtime;
1398 struct timespec cf_ctime;
1399};
1400
1401static inline void free_dfs_info_param(struct dfs_info3_param *param)
1402{
1403 if (param) {
1404 kfree(param->path_name);
1405 kfree(param->node_name);
1406 kfree(param);
1407 }
1408}
1409
1410static inline void free_dfs_info_array(struct dfs_info3_param *param,
1411 int number_of_items)
1412{
1413 int i;
1414 if ((number_of_items == 0) || (param == NULL))
1415 return;
1416 for (i = 0; i < number_of_items; i++) {
1417 kfree(param[i].path_name);
1418 kfree(param[i].node_name);
1419 }
1420 kfree(param);
1421}
1422
1423#define MID_FREE 0
1424#define MID_REQUEST_ALLOCATED 1
1425#define MID_REQUEST_SUBMITTED 2
1426#define MID_RESPONSE_RECEIVED 4
1427#define MID_RETRY_NEEDED 8
1428#define MID_RESPONSE_MALFORMED 0x10
1429#define MID_SHUTDOWN 0x20
1430
1431
1432#define CIFS_NO_BUFFER 0
1433#define CIFS_SMALL_BUFFER 1
1434#define CIFS_LARGE_BUFFER 2
1435#define CIFS_IOVEC 4
1436
1437
1438#define CIFS_BLOCKING_OP 1
1439#define CIFS_ASYNC_OP 2
1440#define CIFS_TIMEOUT_MASK 0x003
1441#define CIFS_LOG_ERROR 0x010
1442#define CIFS_LARGE_BUF_OP 0x020
1443#define CIFS_NO_RESP 0x040
1444
1445
1446#define CIFS_ECHO_OP 0x080
1447#define CIFS_OBREAK_OP 0x0100
1448#define CIFS_NEG_OP 0x0200
1449#define CIFS_OP_MASK 0x0380
1450#define CIFS_HAS_CREDITS 0x0400
1451
1452
1453#define CIFSSEC_MAY_SIGN 0x00001
1454#define CIFSSEC_MAY_NTLM 0x00002
1455#define CIFSSEC_MAY_NTLMV2 0x00004
1456#define CIFSSEC_MAY_KRB5 0x00008
1457#ifdef CONFIG_CIFS_WEAK_PW_HASH
1458#define CIFSSEC_MAY_LANMAN 0x00010
1459#define CIFSSEC_MAY_PLNTXT 0x00020
1460#else
1461#define CIFSSEC_MAY_LANMAN 0
1462#define CIFSSEC_MAY_PLNTXT 0
1463#endif
1464#define CIFSSEC_MAY_SEAL 0x00040
1465#define CIFSSEC_MAY_NTLMSSP 0x00080
1466
1467#define CIFSSEC_MUST_SIGN 0x01001
1468
1469
1470
1471#define CIFSSEC_MUST_NTLM 0x02002
1472#define CIFSSEC_MUST_NTLMV2 0x04004
1473#define CIFSSEC_MUST_KRB5 0x08008
1474#ifdef CONFIG_CIFS_WEAK_PW_HASH
1475#define CIFSSEC_MUST_LANMAN 0x10010
1476#define CIFSSEC_MUST_PLNTXT 0x20020
1477#ifdef CONFIG_CIFS_UPCALL
1478#define CIFSSEC_MASK 0xBF0BF
1479#else
1480#define CIFSSEC_MASK 0xB70B7
1481#endif
1482#else
1483#define CIFSSEC_MUST_LANMAN 0
1484#define CIFSSEC_MUST_PLNTXT 0
1485#ifdef CONFIG_CIFS_UPCALL
1486#define CIFSSEC_MASK 0x8F08F
1487#else
1488#define CIFSSEC_MASK 0x87087
1489#endif
1490#endif
1491#define CIFSSEC_MUST_SEAL 0x40040
1492#define CIFSSEC_MUST_NTLMSSP 0x80080
1493
1494#define CIFSSEC_DEF (CIFSSEC_MAY_SIGN | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_NTLMSSP)
1495#define CIFSSEC_MAX (CIFSSEC_MUST_SIGN | CIFSSEC_MUST_NTLMV2)
1496#define CIFSSEC_AUTH_MASK (CIFSSEC_MAY_NTLM | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_LANMAN | CIFSSEC_MAY_PLNTXT | CIFSSEC_MAY_KRB5 | CIFSSEC_MAY_NTLMSSP)
1497
1498
1499
1500
1501
1502
1503#define UID_HASH (16)
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532#ifdef DECLARE_GLOBALS_HERE
1533#define GLOBAL_EXTERN
1534#else
1535#define GLOBAL_EXTERN extern
1536#endif
1537
1538
1539
1540
1541
1542
1543
1544
1545GLOBAL_EXTERN struct list_head cifs_tcp_ses_list;
1546
1547
1548
1549
1550
1551
1552
1553GLOBAL_EXTERN spinlock_t cifs_tcp_ses_lock;
1554
1555
1556
1557
1558
1559
1560
1561
1562GLOBAL_EXTERN spinlock_t cifs_file_list_lock;
1563
1564#ifdef CONFIG_CIFS_DNOTIFY_EXPERIMENTAL
1565
1566GLOBAL_EXTERN struct list_head GlobalDnotifyReqList;
1567
1568GLOBAL_EXTERN struct list_head GlobalDnotifyRsp_Q;
1569#endif
1570
1571
1572
1573
1574GLOBAL_EXTERN unsigned int GlobalCurrentXid;
1575GLOBAL_EXTERN unsigned int GlobalTotalActiveXid;
1576GLOBAL_EXTERN unsigned int GlobalMaxActiveXid;
1577GLOBAL_EXTERN spinlock_t GlobalMid_Lock;
1578
1579
1580
1581
1582GLOBAL_EXTERN atomic_t sesInfoAllocCount;
1583GLOBAL_EXTERN atomic_t tconInfoAllocCount;
1584GLOBAL_EXTERN atomic_t tcpSesAllocCount;
1585GLOBAL_EXTERN atomic_t tcpSesReconnectCount;
1586GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
1587
1588
1589GLOBAL_EXTERN atomic_t bufAllocCount;
1590#ifdef CONFIG_CIFS_STATS2
1591GLOBAL_EXTERN atomic_t totBufAllocCount;
1592GLOBAL_EXTERN atomic_t totSmBufAllocCount;
1593#endif
1594GLOBAL_EXTERN atomic_t smBufAllocCount;
1595GLOBAL_EXTERN atomic_t midCount;
1596
1597
1598GLOBAL_EXTERN bool enable_oplocks;
1599GLOBAL_EXTERN bool lookupCacheEnabled;
1600GLOBAL_EXTERN unsigned int global_secflags;
1601
1602GLOBAL_EXTERN unsigned int sign_CIFS_PDUs;
1603GLOBAL_EXTERN bool linuxExtEnabled;
1604GLOBAL_EXTERN unsigned int CIFSMaxBufSize;
1605GLOBAL_EXTERN unsigned int cifs_min_rcv;
1606GLOBAL_EXTERN unsigned int cifs_min_small;
1607GLOBAL_EXTERN unsigned int cifs_max_pending;
1608
1609#ifdef CONFIG_CIFS_ACL
1610GLOBAL_EXTERN struct rb_root uidtree;
1611GLOBAL_EXTERN struct rb_root gidtree;
1612GLOBAL_EXTERN spinlock_t siduidlock;
1613GLOBAL_EXTERN spinlock_t sidgidlock;
1614GLOBAL_EXTERN struct rb_root siduidtree;
1615GLOBAL_EXTERN struct rb_root sidgidtree;
1616GLOBAL_EXTERN spinlock_t uidsidlock;
1617GLOBAL_EXTERN spinlock_t gidsidlock;
1618#endif
1619
1620void cifs_oplock_break(struct work_struct *work);
1621
1622extern const struct slow_work_ops cifs_oplock_break_ops;
1623extern struct workqueue_struct *cifsiod_wq;
1624
1625extern mempool_t *cifs_mid_poolp;
1626
1627
1628#define SMB1_VERSION_STRING "1.0"
1629extern struct smb_version_operations smb1_operations;
1630extern struct smb_version_values smb1_values;
1631#define SMB20_VERSION_STRING "2.0"
1632extern struct smb_version_operations smb20_operations;
1633extern struct smb_version_values smb20_values;
1634#define SMB21_VERSION_STRING "2.1"
1635extern struct smb_version_operations smb21_operations;
1636extern struct smb_version_values smb21_values;
1637#define SMB30_VERSION_STRING "3.0"
1638extern struct smb_version_operations smb30_operations;
1639extern struct smb_version_values smb30_values;
1640#define SMB302_VERSION_STRING "3.02"
1641
1642extern struct smb_version_values smb302_values;
1643#define SMB311_VERSION_STRING "3.1.1"
1644#define ALT_SMB311_VERSION_STRING "3.11"
1645extern struct smb_version_operations smb311_operations;
1646extern struct smb_version_values smb311_values;
1647#endif
1648