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