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