1  // SPDX-License-Identifier: LGPL-2.1
2  /*
3   *
4   *   Copyright (C) International Business Machines  Corp., 2002,2008
5   *   Author(s): Steve French (sfrench@us.ibm.com)
6   *
7   *   Common Internet FileSystem (CIFS) client
8   *
9   */
10  
11  /* Note that BB means BUGBUG (ie something to fix eventually) */
12  
13  #include <linux/module.h>
14  #include <linux/fs.h>
15  #include <linux/filelock.h>
16  #include <linux/mount.h>
17  #include <linux/slab.h>
18  #include <linux/init.h>
19  #include <linux/list.h>
20  #include <linux/seq_file.h>
21  #include <linux/vfs.h>
22  #include <linux/mempool.h>
23  #include <linux/delay.h>
24  #include <linux/kthread.h>
25  #include <linux/freezer.h>
26  #include <linux/namei.h>
27  #include <linux/random.h>
28  #include <linux/splice.h>
29  #include <linux/uuid.h>
30  #include <linux/xattr.h>
31  #include <uapi/linux/magic.h>
32  #include <net/ipv6.h>
33  #include "cifsfs.h"
34  #include "cifspdu.h"
35  #define DECLARE_GLOBALS_HERE
36  #include "cifsglob.h"
37  #include "cifsproto.h"
38  #include "cifs_debug.h"
39  #include "cifs_fs_sb.h"
40  #include <linux/mm.h>
41  #include <linux/key-type.h>
42  #include "cifs_spnego.h"
43  #include "fscache.h"
44  #ifdef CONFIG_CIFS_DFS_UPCALL
45  #include "dfs_cache.h"
46  #endif
47  #ifdef CONFIG_CIFS_SWN_UPCALL
48  #include "netlink.h"
49  #endif
50  #include "fs_context.h"
51  #include "cached_dir.h"
52  
53  /*
54   * DOS dates from 1980/1/1 through 2107/12/31
55   * Protocol specifications indicate the range should be to 119, which
56   * limits maximum year to 2099. But this range has not been checked.
57   */
58  #define SMB_DATE_MAX (127<<9 | 12<<5 | 31)
59  #define SMB_DATE_MIN (0<<9 | 1<<5 | 1)
60  #define SMB_TIME_MAX (23<<11 | 59<<5 | 29)
61  
62  int cifsFYI = 0;
63  bool traceSMB;
64  bool enable_oplocks = true;
65  bool linuxExtEnabled = true;
66  bool lookupCacheEnabled = true;
67  bool disable_legacy_dialects; /* false by default */
68  bool enable_gcm_256 = true;
69  bool require_gcm_256; /* false by default */
70  bool enable_negotiate_signing; /* false by default */
71  unsigned int global_secflags = CIFSSEC_DEF;
72  /* unsigned int ntlmv2_support = 0; */
73  unsigned int sign_CIFS_PDUs = 1;
74  
75  /*
76   * Global transaction id (XID) information
77   */
78  unsigned int GlobalCurrentXid;	/* protected by GlobalMid_Lock */
79  unsigned int GlobalTotalActiveXid; /* prot by GlobalMid_Lock */
80  unsigned int GlobalMaxActiveXid;	/* prot by GlobalMid_Lock */
81  spinlock_t GlobalMid_Lock; /* protects above & list operations on midQ entries */
82  
83  /*
84   *  Global counters, updated atomically
85   */
86  atomic_t sesInfoAllocCount;
87  atomic_t tconInfoAllocCount;
88  atomic_t tcpSesNextId;
89  atomic_t tcpSesAllocCount;
90  atomic_t tcpSesReconnectCount;
91  atomic_t tconInfoReconnectCount;
92  
93  atomic_t mid_count;
94  atomic_t buf_alloc_count;
95  atomic_t small_buf_alloc_count;
96  #ifdef CONFIG_CIFS_STATS2
97  atomic_t total_buf_alloc_count;
98  atomic_t total_small_buf_alloc_count;
99  #endif/* STATS2 */
100  struct list_head	cifs_tcp_ses_list;
101  spinlock_t		cifs_tcp_ses_lock;
102  static const struct super_operations cifs_super_ops;
103  unsigned int CIFSMaxBufSize = CIFS_MAX_MSGSIZE;
104  module_param(CIFSMaxBufSize, uint, 0444);
105  MODULE_PARM_DESC(CIFSMaxBufSize, "Network buffer size (not including header) "
106  				 "for CIFS requests. "
107  				 "Default: 16384 Range: 8192 to 130048");
108  unsigned int cifs_min_rcv = CIFS_MIN_RCV_POOL;
109  module_param(cifs_min_rcv, uint, 0444);
110  MODULE_PARM_DESC(cifs_min_rcv, "Network buffers in pool. Default: 4 Range: "
111  				"1 to 64");
112  unsigned int cifs_min_small = 30;
113  module_param(cifs_min_small, uint, 0444);
114  MODULE_PARM_DESC(cifs_min_small, "Small network buffers in pool. Default: 30 "
115  				 "Range: 2 to 256");
116  unsigned int cifs_max_pending = CIFS_MAX_REQ;
117  module_param(cifs_max_pending, uint, 0444);
118  MODULE_PARM_DESC(cifs_max_pending, "Simultaneous requests to server for "
119  				   "CIFS/SMB1 dialect (N/A for SMB3) "
120  				   "Default: 32767 Range: 2 to 32767.");
121  unsigned int dir_cache_timeout = 30;
122  module_param(dir_cache_timeout, uint, 0644);
123  MODULE_PARM_DESC(dir_cache_timeout, "Number of seconds to cache directory contents for which we have a lease. Default: 30 "
124  				 "Range: 1 to 65000 seconds, 0 to disable caching dir contents");
125  #ifdef CONFIG_CIFS_STATS2
126  unsigned int slow_rsp_threshold = 1;
127  module_param(slow_rsp_threshold, uint, 0644);
128  MODULE_PARM_DESC(slow_rsp_threshold, "Amount of time (in seconds) to wait "
129  				   "before logging that a response is delayed. "
130  				   "Default: 1 (if set to 0 disables msg).");
131  #endif /* STATS2 */
132  
133  module_param(enable_oplocks, bool, 0644);
134  MODULE_PARM_DESC(enable_oplocks, "Enable or disable oplocks. Default: y/Y/1");
135  
136  module_param(enable_gcm_256, bool, 0644);
137  MODULE_PARM_DESC(enable_gcm_256, "Enable requesting strongest (256 bit) GCM encryption. Default: y/Y/0");
138  
139  module_param(require_gcm_256, bool, 0644);
140  MODULE_PARM_DESC(require_gcm_256, "Require strongest (256 bit) GCM encryption. Default: n/N/0");
141  
142  module_param(enable_negotiate_signing, bool, 0644);
143  MODULE_PARM_DESC(enable_negotiate_signing, "Enable negotiating packet signing algorithm with server. Default: n/N/0");
144  
145  module_param(disable_legacy_dialects, bool, 0644);
146  MODULE_PARM_DESC(disable_legacy_dialects, "To improve security it may be "
147  				  "helpful to restrict the ability to "
148  				  "override the default dialects (SMB2.1, "
149  				  "SMB3 and SMB3.02) on mount with old "
150  				  "dialects (CIFS/SMB1 and SMB2) since "
151  				  "vers=1.0 (CIFS/SMB1) and vers=2.0 are weaker"
152  				  " and less secure. Default: n/N/0");
153  
154  struct workqueue_struct	*cifsiod_wq;
155  struct workqueue_struct	*decrypt_wq;
156  struct workqueue_struct	*fileinfo_put_wq;
157  struct workqueue_struct	*cifsoplockd_wq;
158  struct workqueue_struct	*deferredclose_wq;
159  struct workqueue_struct	*serverclose_wq;
160  __u32 cifs_lock_secret;
161  
162  /*
163   * Bumps refcount for cifs super block.
164   * Note that it should be only called if a reference to VFS super block is
165   * already held, e.g. in open-type syscalls context. Otherwise it can race with
166   * atomic_dec_and_test in deactivate_locked_super.
167   */
168  void
cifs_sb_active(struct super_block * sb)169  cifs_sb_active(struct super_block *sb)
170  {
171  	struct cifs_sb_info *server = CIFS_SB(sb);
172  
173  	if (atomic_inc_return(&server->active) == 1)
174  		atomic_inc(&sb->s_active);
175  }
176  
177  void
cifs_sb_deactive(struct super_block * sb)178  cifs_sb_deactive(struct super_block *sb)
179  {
180  	struct cifs_sb_info *server = CIFS_SB(sb);
181  
182  	if (atomic_dec_and_test(&server->active))
183  		deactivate_super(sb);
184  }
185  
186  static int
cifs_read_super(struct super_block * sb)187  cifs_read_super(struct super_block *sb)
188  {
189  	struct inode *inode;
190  	struct cifs_sb_info *cifs_sb;
191  	struct cifs_tcon *tcon;
192  	struct timespec64 ts;
193  	int rc = 0;
194  
195  	cifs_sb = CIFS_SB(sb);
196  	tcon = cifs_sb_master_tcon(cifs_sb);
197  
198  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL)
199  		sb->s_flags |= SB_POSIXACL;
200  
201  	if (tcon->snapshot_time)
202  		sb->s_flags |= SB_RDONLY;
203  
204  	if (tcon->ses->capabilities & tcon->ses->server->vals->cap_large_files)
205  		sb->s_maxbytes = MAX_LFS_FILESIZE;
206  	else
207  		sb->s_maxbytes = MAX_NON_LFS;
208  
209  	/*
210  	 * Some very old servers like DOS and OS/2 used 2 second granularity
211  	 * (while all current servers use 100ns granularity - see MS-DTYP)
212  	 * but 1 second is the maximum allowed granularity for the VFS
213  	 * so for old servers set time granularity to 1 second while for
214  	 * everything else (current servers) set it to 100ns.
215  	 */
216  	if ((tcon->ses->server->vals->protocol_id == SMB10_PROT_ID) &&
217  	    ((tcon->ses->capabilities &
218  	      tcon->ses->server->vals->cap_nt_find) == 0) &&
219  	    !tcon->unix_ext) {
220  		sb->s_time_gran = 1000000000; /* 1 second is max allowed gran */
221  		ts = cnvrtDosUnixTm(cpu_to_le16(SMB_DATE_MIN), 0, 0);
222  		sb->s_time_min = ts.tv_sec;
223  		ts = cnvrtDosUnixTm(cpu_to_le16(SMB_DATE_MAX),
224  				    cpu_to_le16(SMB_TIME_MAX), 0);
225  		sb->s_time_max = ts.tv_sec;
226  	} else {
227  		/*
228  		 * Almost every server, including all SMB2+, uses DCE TIME
229  		 * ie 100 nanosecond units, since 1601.  See MS-DTYP and MS-FSCC
230  		 */
231  		sb->s_time_gran = 100;
232  		ts = cifs_NTtimeToUnix(0);
233  		sb->s_time_min = ts.tv_sec;
234  		ts = cifs_NTtimeToUnix(cpu_to_le64(S64_MAX));
235  		sb->s_time_max = ts.tv_sec;
236  	}
237  
238  	sb->s_magic = CIFS_SUPER_MAGIC;
239  	sb->s_op = &cifs_super_ops;
240  	sb->s_xattr = cifs_xattr_handlers;
241  	rc = super_setup_bdi(sb);
242  	if (rc)
243  		goto out_no_root;
244  	/* tune readahead according to rsize if readahead size not set on mount */
245  	if (cifs_sb->ctx->rsize == 0)
246  		cifs_sb->ctx->rsize =
247  			tcon->ses->server->ops->negotiate_rsize(tcon, cifs_sb->ctx);
248  	if (cifs_sb->ctx->rasize)
249  		sb->s_bdi->ra_pages = cifs_sb->ctx->rasize / PAGE_SIZE;
250  	else
251  		sb->s_bdi->ra_pages = 2 * (cifs_sb->ctx->rsize / PAGE_SIZE);
252  
253  	sb->s_blocksize = CIFS_MAX_MSGSIZE;
254  	sb->s_blocksize_bits = 14;	/* default 2**14 = CIFS_MAX_MSGSIZE */
255  	inode = cifs_root_iget(sb);
256  
257  	if (IS_ERR(inode)) {
258  		rc = PTR_ERR(inode);
259  		goto out_no_root;
260  	}
261  
262  	if (tcon->nocase)
263  		sb->s_d_op = &cifs_ci_dentry_ops;
264  	else
265  		sb->s_d_op = &cifs_dentry_ops;
266  
267  	sb->s_root = d_make_root(inode);
268  	if (!sb->s_root) {
269  		rc = -ENOMEM;
270  		goto out_no_root;
271  	}
272  
273  #ifdef CONFIG_CIFS_NFSD_EXPORT
274  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
275  		cifs_dbg(FYI, "export ops supported\n");
276  		sb->s_export_op = &cifs_export_ops;
277  	}
278  #endif /* CONFIG_CIFS_NFSD_EXPORT */
279  
280  	return 0;
281  
282  out_no_root:
283  	cifs_dbg(VFS, "%s: get root inode failed\n", __func__);
284  	return rc;
285  }
286  
cifs_kill_sb(struct super_block * sb)287  static void cifs_kill_sb(struct super_block *sb)
288  {
289  	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
290  
291  	/*
292  	 * We need to release all dentries for the cached directories
293  	 * before we kill the sb.
294  	 */
295  	if (cifs_sb->root) {
296  		close_all_cached_dirs(cifs_sb);
297  
298  		/* finally release root dentry */
299  		dput(cifs_sb->root);
300  		cifs_sb->root = NULL;
301  	}
302  
303  	kill_anon_super(sb);
304  	cifs_umount(cifs_sb);
305  }
306  
307  static int
cifs_statfs(struct dentry * dentry,struct kstatfs * buf)308  cifs_statfs(struct dentry *dentry, struct kstatfs *buf)
309  {
310  	struct super_block *sb = dentry->d_sb;
311  	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
312  	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
313  	struct TCP_Server_Info *server = tcon->ses->server;
314  	unsigned int xid;
315  	int rc = 0;
316  	const char *full_path;
317  	void *page;
318  
319  	xid = get_xid();
320  	page = alloc_dentry_path();
321  
322  	full_path = build_path_from_dentry(dentry, page);
323  	if (IS_ERR(full_path)) {
324  		rc = PTR_ERR(full_path);
325  		goto statfs_out;
326  	}
327  
328  	if (le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength) > 0)
329  		buf->f_namelen =
330  		       le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength);
331  	else
332  		buf->f_namelen = PATH_MAX;
333  
334  	buf->f_fsid.val[0] = tcon->vol_serial_number;
335  	/* are using part of create time for more randomness, see man statfs */
336  	buf->f_fsid.val[1] =  (int)le64_to_cpu(tcon->vol_create_time);
337  
338  	buf->f_files = 0;	/* undefined */
339  	buf->f_ffree = 0;	/* unlimited */
340  
341  	if (server->ops->queryfs)
342  		rc = server->ops->queryfs(xid, tcon, full_path, cifs_sb, buf);
343  
344  statfs_out:
345  	free_dentry_path(page);
346  	free_xid(xid);
347  	return rc;
348  }
349  
cifs_fallocate(struct file * file,int mode,loff_t off,loff_t len)350  static long cifs_fallocate(struct file *file, int mode, loff_t off, loff_t len)
351  {
352  	struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
353  	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
354  	struct TCP_Server_Info *server = tcon->ses->server;
355  
356  	if (server->ops->fallocate)
357  		return server->ops->fallocate(file, tcon, mode, off, len);
358  
359  	return -EOPNOTSUPP;
360  }
361  
cifs_permission(struct mnt_idmap * idmap,struct inode * inode,int mask)362  static int cifs_permission(struct mnt_idmap *idmap,
363  			   struct inode *inode, int mask)
364  {
365  	struct cifs_sb_info *cifs_sb;
366  
367  	cifs_sb = CIFS_SB(inode->i_sb);
368  
369  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) {
370  		if ((mask & MAY_EXEC) && !execute_ok(inode))
371  			return -EACCES;
372  		else
373  			return 0;
374  	} else /* file mode might have been restricted at mount time
375  		on the client (above and beyond ACL on servers) for
376  		servers which do not support setting and viewing mode bits,
377  		so allowing client to check permissions is useful */
378  		return generic_permission(&nop_mnt_idmap, inode, mask);
379  }
380  
381  static struct kmem_cache *cifs_inode_cachep;
382  static struct kmem_cache *cifs_req_cachep;
383  static struct kmem_cache *cifs_mid_cachep;
384  static struct kmem_cache *cifs_sm_req_cachep;
385  static struct kmem_cache *cifs_io_request_cachep;
386  static struct kmem_cache *cifs_io_subrequest_cachep;
387  mempool_t *cifs_sm_req_poolp;
388  mempool_t *cifs_req_poolp;
389  mempool_t *cifs_mid_poolp;
390  mempool_t cifs_io_request_pool;
391  mempool_t cifs_io_subrequest_pool;
392  
393  static struct inode *
cifs_alloc_inode(struct super_block * sb)394  cifs_alloc_inode(struct super_block *sb)
395  {
396  	struct cifsInodeInfo *cifs_inode;
397  	cifs_inode = alloc_inode_sb(sb, cifs_inode_cachep, GFP_KERNEL);
398  	if (!cifs_inode)
399  		return NULL;
400  	cifs_inode->cifsAttrs = 0x20;	/* default */
401  	cifs_inode->time = 0;
402  	/*
403  	 * Until the file is open and we have gotten oplock info back from the
404  	 * server, can not assume caching of file data or metadata.
405  	 */
406  	cifs_set_oplock_level(cifs_inode, 0);
407  	cifs_inode->lease_granted = false;
408  	cifs_inode->flags = 0;
409  	spin_lock_init(&cifs_inode->writers_lock);
410  	cifs_inode->writers = 0;
411  	cifs_inode->netfs.inode.i_blkbits = 14;  /* 2**14 = CIFS_MAX_MSGSIZE */
412  	cifs_inode->netfs.remote_i_size = 0;
413  	cifs_inode->uniqueid = 0;
414  	cifs_inode->createtime = 0;
415  	cifs_inode->epoch = 0;
416  	spin_lock_init(&cifs_inode->open_file_lock);
417  	generate_random_uuid(cifs_inode->lease_key);
418  	cifs_inode->symlink_target = NULL;
419  
420  	/*
421  	 * Can not set i_flags here - they get immediately overwritten to zero
422  	 * by the VFS.
423  	 */
424  	/* cifs_inode->netfs.inode.i_flags = S_NOATIME | S_NOCMTIME; */
425  	INIT_LIST_HEAD(&cifs_inode->openFileList);
426  	INIT_LIST_HEAD(&cifs_inode->llist);
427  	INIT_LIST_HEAD(&cifs_inode->deferred_closes);
428  	spin_lock_init(&cifs_inode->deferred_lock);
429  	return &cifs_inode->netfs.inode;
430  }
431  
432  static void
cifs_free_inode(struct inode * inode)433  cifs_free_inode(struct inode *inode)
434  {
435  	struct cifsInodeInfo *cinode = CIFS_I(inode);
436  
437  	if (S_ISLNK(inode->i_mode))
438  		kfree(cinode->symlink_target);
439  	kmem_cache_free(cifs_inode_cachep, cinode);
440  }
441  
442  static void
cifs_evict_inode(struct inode * inode)443  cifs_evict_inode(struct inode *inode)
444  {
445  	netfs_wait_for_outstanding_io(inode);
446  	truncate_inode_pages_final(&inode->i_data);
447  	if (inode->i_state & I_PINNING_NETFS_WB)
448  		cifs_fscache_unuse_inode_cookie(inode, true);
449  	cifs_fscache_release_inode_cookie(inode);
450  	clear_inode(inode);
451  }
452  
453  static void
cifs_show_address(struct seq_file * s,struct TCP_Server_Info * server)454  cifs_show_address(struct seq_file *s, struct TCP_Server_Info *server)
455  {
456  	struct sockaddr_in *sa = (struct sockaddr_in *) &server->dstaddr;
457  	struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) &server->dstaddr;
458  
459  	seq_puts(s, ",addr=");
460  
461  	switch (server->dstaddr.ss_family) {
462  	case AF_INET:
463  		seq_printf(s, "%pI4", &sa->sin_addr.s_addr);
464  		break;
465  	case AF_INET6:
466  		seq_printf(s, "%pI6", &sa6->sin6_addr.s6_addr);
467  		if (sa6->sin6_scope_id)
468  			seq_printf(s, "%%%u", sa6->sin6_scope_id);
469  		break;
470  	default:
471  		seq_puts(s, "(unknown)");
472  	}
473  	if (server->rdma)
474  		seq_puts(s, ",rdma");
475  }
476  
477  static void
cifs_show_security(struct seq_file * s,struct cifs_ses * ses)478  cifs_show_security(struct seq_file *s, struct cifs_ses *ses)
479  {
480  	if (ses->sectype == Unspecified) {
481  		if (ses->user_name == NULL)
482  			seq_puts(s, ",sec=none");
483  		return;
484  	}
485  
486  	seq_puts(s, ",sec=");
487  
488  	switch (ses->sectype) {
489  	case NTLMv2:
490  		seq_puts(s, "ntlmv2");
491  		break;
492  	case Kerberos:
493  		seq_puts(s, "krb5");
494  		break;
495  	case RawNTLMSSP:
496  		seq_puts(s, "ntlmssp");
497  		break;
498  	default:
499  		/* shouldn't ever happen */
500  		seq_puts(s, "unknown");
501  		break;
502  	}
503  
504  	if (ses->sign)
505  		seq_puts(s, "i");
506  
507  	if (ses->sectype == Kerberos)
508  		seq_printf(s, ",cruid=%u",
509  			   from_kuid_munged(&init_user_ns, ses->cred_uid));
510  }
511  
512  static void
cifs_show_cache_flavor(struct seq_file * s,struct cifs_sb_info * cifs_sb)513  cifs_show_cache_flavor(struct seq_file *s, struct cifs_sb_info *cifs_sb)
514  {
515  	seq_puts(s, ",cache=");
516  
517  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
518  		seq_puts(s, "strict");
519  	else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
520  		seq_puts(s, "none");
521  	else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RW_CACHE)
522  		seq_puts(s, "singleclient"); /* assume only one client access */
523  	else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RO_CACHE)
524  		seq_puts(s, "ro"); /* read only caching assumed */
525  	else
526  		seq_puts(s, "loose");
527  }
528  
529  /*
530   * cifs_show_devname() is used so we show the mount device name with correct
531   * format (e.g. forward slashes vs. back slashes) in /proc/mounts
532   */
cifs_show_devname(struct seq_file * m,struct dentry * root)533  static int cifs_show_devname(struct seq_file *m, struct dentry *root)
534  {
535  	struct cifs_sb_info *cifs_sb = CIFS_SB(root->d_sb);
536  	char *devname = kstrdup(cifs_sb->ctx->source, GFP_KERNEL);
537  
538  	if (devname == NULL)
539  		seq_puts(m, "none");
540  	else {
541  		convert_delimiter(devname, '/');
542  		/* escape all spaces in share names */
543  		seq_escape(m, devname, " \t");
544  		kfree(devname);
545  	}
546  	return 0;
547  }
548  
549  /*
550   * cifs_show_options() is for displaying mount options in /proc/mounts.
551   * Not all settable options are displayed but most of the important
552   * ones are.
553   */
554  static int
cifs_show_options(struct seq_file * s,struct dentry * root)555  cifs_show_options(struct seq_file *s, struct dentry *root)
556  {
557  	struct cifs_sb_info *cifs_sb = CIFS_SB(root->d_sb);
558  	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
559  	struct sockaddr *srcaddr;
560  	srcaddr = (struct sockaddr *)&tcon->ses->server->srcaddr;
561  
562  	seq_show_option(s, "vers", tcon->ses->server->vals->version_string);
563  	cifs_show_security(s, tcon->ses);
564  	cifs_show_cache_flavor(s, cifs_sb);
565  
566  	if (tcon->no_lease)
567  		seq_puts(s, ",nolease");
568  	if (cifs_sb->ctx->multiuser)
569  		seq_puts(s, ",multiuser");
570  	else if (tcon->ses->user_name)
571  		seq_show_option(s, "username", tcon->ses->user_name);
572  
573  	if (tcon->ses->domainName && tcon->ses->domainName[0] != 0)
574  		seq_show_option(s, "domain", tcon->ses->domainName);
575  
576  	if (srcaddr->sa_family != AF_UNSPEC) {
577  		struct sockaddr_in *saddr4;
578  		struct sockaddr_in6 *saddr6;
579  		saddr4 = (struct sockaddr_in *)srcaddr;
580  		saddr6 = (struct sockaddr_in6 *)srcaddr;
581  		if (srcaddr->sa_family == AF_INET6)
582  			seq_printf(s, ",srcaddr=%pI6c",
583  				   &saddr6->sin6_addr);
584  		else if (srcaddr->sa_family == AF_INET)
585  			seq_printf(s, ",srcaddr=%pI4",
586  				   &saddr4->sin_addr.s_addr);
587  		else
588  			seq_printf(s, ",srcaddr=BAD-AF:%i",
589  				   (int)(srcaddr->sa_family));
590  	}
591  
592  	seq_printf(s, ",uid=%u",
593  		   from_kuid_munged(&init_user_ns, cifs_sb->ctx->linux_uid));
594  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID)
595  		seq_puts(s, ",forceuid");
596  	else
597  		seq_puts(s, ",noforceuid");
598  
599  	seq_printf(s, ",gid=%u",
600  		   from_kgid_munged(&init_user_ns, cifs_sb->ctx->linux_gid));
601  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID)
602  		seq_puts(s, ",forcegid");
603  	else
604  		seq_puts(s, ",noforcegid");
605  
606  	cifs_show_address(s, tcon->ses->server);
607  
608  	if (!tcon->unix_ext)
609  		seq_printf(s, ",file_mode=0%ho,dir_mode=0%ho",
610  					   cifs_sb->ctx->file_mode,
611  					   cifs_sb->ctx->dir_mode);
612  	if (cifs_sb->ctx->iocharset)
613  		seq_printf(s, ",iocharset=%s", cifs_sb->ctx->iocharset);
614  	if (tcon->seal)
615  		seq_puts(s, ",seal");
616  	else if (tcon->ses->server->ignore_signature)
617  		seq_puts(s, ",signloosely");
618  	if (tcon->nocase)
619  		seq_puts(s, ",nocase");
620  	if (tcon->nodelete)
621  		seq_puts(s, ",nodelete");
622  	if (cifs_sb->ctx->no_sparse)
623  		seq_puts(s, ",nosparse");
624  	if (tcon->local_lease)
625  		seq_puts(s, ",locallease");
626  	if (tcon->retry)
627  		seq_puts(s, ",hard");
628  	else
629  		seq_puts(s, ",soft");
630  	if (tcon->use_persistent)
631  		seq_puts(s, ",persistenthandles");
632  	else if (tcon->use_resilient)
633  		seq_puts(s, ",resilienthandles");
634  	if (tcon->posix_extensions)
635  		seq_puts(s, ",posix");
636  	else if (tcon->unix_ext)
637  		seq_puts(s, ",unix");
638  	else
639  		seq_puts(s, ",nounix");
640  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS)
641  		seq_puts(s, ",nodfs");
642  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
643  		seq_puts(s, ",posixpaths");
644  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)
645  		seq_puts(s, ",setuids");
646  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UID_FROM_ACL)
647  		seq_puts(s, ",idsfromsid");
648  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)
649  		seq_puts(s, ",serverino");
650  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
651  		seq_puts(s, ",rwpidforward");
652  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL)
653  		seq_puts(s, ",forcemand");
654  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)
655  		seq_puts(s, ",nouser_xattr");
656  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR)
657  		seq_puts(s, ",mapchars");
658  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SFM_CHR)
659  		seq_puts(s, ",mapposix");
660  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)
661  		seq_puts(s, ",sfu");
662  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
663  		seq_puts(s, ",nobrl");
664  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_HANDLE_CACHE)
665  		seq_puts(s, ",nohandlecache");
666  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MODE_FROM_SID)
667  		seq_puts(s, ",modefromsid");
668  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL)
669  		seq_puts(s, ",cifsacl");
670  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)
671  		seq_puts(s, ",dynperm");
672  	if (root->d_sb->s_flags & SB_POSIXACL)
673  		seq_puts(s, ",acl");
674  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MF_SYMLINKS)
675  		seq_puts(s, ",mfsymlinks");
676  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_FSCACHE)
677  		seq_puts(s, ",fsc");
678  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)
679  		seq_puts(s, ",nostrictsync");
680  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM)
681  		seq_puts(s, ",noperm");
682  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_BACKUPUID)
683  		seq_printf(s, ",backupuid=%u",
684  			   from_kuid_munged(&init_user_ns,
685  					    cifs_sb->ctx->backupuid));
686  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_BACKUPGID)
687  		seq_printf(s, ",backupgid=%u",
688  			   from_kgid_munged(&init_user_ns,
689  					    cifs_sb->ctx->backupgid));
690  	seq_show_option(s, "reparse",
691  			cifs_reparse_type_str(cifs_sb->ctx->reparse_type));
692  
693  	seq_printf(s, ",rsize=%u", cifs_sb->ctx->rsize);
694  	seq_printf(s, ",wsize=%u", cifs_sb->ctx->wsize);
695  	seq_printf(s, ",bsize=%u", cifs_sb->ctx->bsize);
696  	if (cifs_sb->ctx->rasize)
697  		seq_printf(s, ",rasize=%u", cifs_sb->ctx->rasize);
698  	if (tcon->ses->server->min_offload)
699  		seq_printf(s, ",esize=%u", tcon->ses->server->min_offload);
700  	if (tcon->ses->server->retrans)
701  		seq_printf(s, ",retrans=%u", tcon->ses->server->retrans);
702  	seq_printf(s, ",echo_interval=%lu",
703  			tcon->ses->server->echo_interval / HZ);
704  
705  	/* Only display the following if overridden on mount */
706  	if (tcon->ses->server->max_credits != SMB2_MAX_CREDITS_AVAILABLE)
707  		seq_printf(s, ",max_credits=%u", tcon->ses->server->max_credits);
708  	if (tcon->ses->server->tcp_nodelay)
709  		seq_puts(s, ",tcpnodelay");
710  	if (tcon->ses->server->noautotune)
711  		seq_puts(s, ",noautotune");
712  	if (tcon->ses->server->noblocksnd)
713  		seq_puts(s, ",noblocksend");
714  	if (tcon->ses->server->nosharesock)
715  		seq_puts(s, ",nosharesock");
716  
717  	if (tcon->snapshot_time)
718  		seq_printf(s, ",snapshot=%llu", tcon->snapshot_time);
719  	if (tcon->handle_timeout)
720  		seq_printf(s, ",handletimeout=%u", tcon->handle_timeout);
721  	if (tcon->max_cached_dirs != MAX_CACHED_FIDS)
722  		seq_printf(s, ",max_cached_dirs=%u", tcon->max_cached_dirs);
723  
724  	/*
725  	 * Display file and directory attribute timeout in seconds.
726  	 * If file and directory attribute timeout the same then actimeo
727  	 * was likely specified on mount
728  	 */
729  	if (cifs_sb->ctx->acdirmax == cifs_sb->ctx->acregmax)
730  		seq_printf(s, ",actimeo=%lu", cifs_sb->ctx->acregmax / HZ);
731  	else {
732  		seq_printf(s, ",acdirmax=%lu", cifs_sb->ctx->acdirmax / HZ);
733  		seq_printf(s, ",acregmax=%lu", cifs_sb->ctx->acregmax / HZ);
734  	}
735  	seq_printf(s, ",closetimeo=%lu", cifs_sb->ctx->closetimeo / HZ);
736  
737  	if (tcon->ses->chan_max > 1)
738  		seq_printf(s, ",multichannel,max_channels=%zu",
739  			   tcon->ses->chan_max);
740  
741  	if (tcon->use_witness)
742  		seq_puts(s, ",witness");
743  
744  	return 0;
745  }
746  
cifs_umount_begin(struct super_block * sb)747  static void cifs_umount_begin(struct super_block *sb)
748  {
749  	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
750  	struct cifs_tcon *tcon;
751  
752  	if (cifs_sb == NULL)
753  		return;
754  
755  	tcon = cifs_sb_master_tcon(cifs_sb);
756  
757  	spin_lock(&cifs_tcp_ses_lock);
758  	spin_lock(&tcon->tc_lock);
759  	trace_smb3_tcon_ref(tcon->debug_id, tcon->tc_count,
760  			    netfs_trace_tcon_ref_see_umount);
761  	if ((tcon->tc_count > 1) || (tcon->status == TID_EXITING)) {
762  		/* we have other mounts to same share or we have
763  		   already tried to umount this and woken up
764  		   all waiting network requests, nothing to do */
765  		spin_unlock(&tcon->tc_lock);
766  		spin_unlock(&cifs_tcp_ses_lock);
767  		return;
768  	}
769  	/*
770  	 * can not set tcon->status to TID_EXITING yet since we don't know if umount -f will
771  	 * fail later (e.g. due to open files).  TID_EXITING will be set just before tdis req sent
772  	 */
773  	spin_unlock(&tcon->tc_lock);
774  	spin_unlock(&cifs_tcp_ses_lock);
775  
776  	cifs_close_all_deferred_files(tcon);
777  	/* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */
778  	/* cancel_notify_requests(tcon); */
779  	if (tcon->ses && tcon->ses->server) {
780  		cifs_dbg(FYI, "wake up tasks now - umount begin not complete\n");
781  		wake_up_all(&tcon->ses->server->request_q);
782  		wake_up_all(&tcon->ses->server->response_q);
783  		msleep(1); /* yield */
784  		/* we have to kick the requests once more */
785  		wake_up_all(&tcon->ses->server->response_q);
786  		msleep(1);
787  	}
788  
789  	return;
790  }
791  
cifs_freeze(struct super_block * sb)792  static int cifs_freeze(struct super_block *sb)
793  {
794  	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
795  	struct cifs_tcon *tcon;
796  
797  	if (cifs_sb == NULL)
798  		return 0;
799  
800  	tcon = cifs_sb_master_tcon(cifs_sb);
801  
802  	cifs_close_all_deferred_files(tcon);
803  	return 0;
804  }
805  
806  #ifdef CONFIG_CIFS_STATS2
cifs_show_stats(struct seq_file * s,struct dentry * root)807  static int cifs_show_stats(struct seq_file *s, struct dentry *root)
808  {
809  	/* BB FIXME */
810  	return 0;
811  }
812  #endif
813  
cifs_write_inode(struct inode * inode,struct writeback_control * wbc)814  static int cifs_write_inode(struct inode *inode, struct writeback_control *wbc)
815  {
816  	return netfs_unpin_writeback(inode, wbc);
817  }
818  
cifs_drop_inode(struct inode * inode)819  static int cifs_drop_inode(struct inode *inode)
820  {
821  	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
822  
823  	/* no serverino => unconditional eviction */
824  	return !(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) ||
825  		generic_drop_inode(inode);
826  }
827  
828  static const struct super_operations cifs_super_ops = {
829  	.statfs = cifs_statfs,
830  	.alloc_inode = cifs_alloc_inode,
831  	.write_inode	= cifs_write_inode,
832  	.free_inode = cifs_free_inode,
833  	.drop_inode	= cifs_drop_inode,
834  	.evict_inode	= cifs_evict_inode,
835  /*	.show_path	= cifs_show_path, */ /* Would we ever need show path? */
836  	.show_devname   = cifs_show_devname,
837  /*	.delete_inode	= cifs_delete_inode,  */  /* Do not need above
838  	function unless later we add lazy close of inodes or unless the
839  	kernel forgets to call us with the same number of releases (closes)
840  	as opens */
841  	.show_options = cifs_show_options,
842  	.umount_begin   = cifs_umount_begin,
843  	.freeze_fs      = cifs_freeze,
844  #ifdef CONFIG_CIFS_STATS2
845  	.show_stats = cifs_show_stats,
846  #endif
847  };
848  
849  /*
850   * Get root dentry from superblock according to prefix path mount option.
851   * Return dentry with refcount + 1 on success and NULL otherwise.
852   */
853  static struct dentry *
cifs_get_root(struct smb3_fs_context * ctx,struct super_block * sb)854  cifs_get_root(struct smb3_fs_context *ctx, struct super_block *sb)
855  {
856  	struct dentry *dentry;
857  	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
858  	char *full_path = NULL;
859  	char *s, *p;
860  	char sep;
861  
862  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH)
863  		return dget(sb->s_root);
864  
865  	full_path = cifs_build_path_to_root(ctx, cifs_sb,
866  				cifs_sb_master_tcon(cifs_sb), 0);
867  	if (full_path == NULL)
868  		return ERR_PTR(-ENOMEM);
869  
870  	cifs_dbg(FYI, "Get root dentry for %s\n", full_path);
871  
872  	sep = CIFS_DIR_SEP(cifs_sb);
873  	dentry = dget(sb->s_root);
874  	s = full_path;
875  
876  	do {
877  		struct inode *dir = d_inode(dentry);
878  		struct dentry *child;
879  
880  		if (!S_ISDIR(dir->i_mode)) {
881  			dput(dentry);
882  			dentry = ERR_PTR(-ENOTDIR);
883  			break;
884  		}
885  
886  		/* skip separators */
887  		while (*s == sep)
888  			s++;
889  		if (!*s)
890  			break;
891  		p = s++;
892  		/* next separator */
893  		while (*s && *s != sep)
894  			s++;
895  
896  		child = lookup_positive_unlocked(p, dentry, s - p);
897  		dput(dentry);
898  		dentry = child;
899  	} while (!IS_ERR(dentry));
900  	kfree(full_path);
901  	return dentry;
902  }
903  
cifs_set_super(struct super_block * sb,void * data)904  static int cifs_set_super(struct super_block *sb, void *data)
905  {
906  	struct cifs_mnt_data *mnt_data = data;
907  	sb->s_fs_info = mnt_data->cifs_sb;
908  	return set_anon_super(sb, NULL);
909  }
910  
911  struct dentry *
cifs_smb3_do_mount(struct file_system_type * fs_type,int flags,struct smb3_fs_context * old_ctx)912  cifs_smb3_do_mount(struct file_system_type *fs_type,
913  	      int flags, struct smb3_fs_context *old_ctx)
914  {
915  	struct cifs_mnt_data mnt_data;
916  	struct cifs_sb_info *cifs_sb;
917  	struct super_block *sb;
918  	struct dentry *root;
919  	int rc;
920  
921  	if (cifsFYI) {
922  		cifs_dbg(FYI, "%s: devname=%s flags=0x%x\n", __func__,
923  			 old_ctx->source, flags);
924  	} else {
925  		cifs_info("Attempting to mount %s\n", old_ctx->source);
926  	}
927  
928  	cifs_sb = kzalloc(sizeof(*cifs_sb), GFP_KERNEL);
929  	if (!cifs_sb)
930  		return ERR_PTR(-ENOMEM);
931  
932  	cifs_sb->ctx = kzalloc(sizeof(struct smb3_fs_context), GFP_KERNEL);
933  	if (!cifs_sb->ctx) {
934  		root = ERR_PTR(-ENOMEM);
935  		goto out;
936  	}
937  	rc = smb3_fs_context_dup(cifs_sb->ctx, old_ctx);
938  	if (rc) {
939  		root = ERR_PTR(rc);
940  		goto out;
941  	}
942  
943  	rc = cifs_setup_cifs_sb(cifs_sb);
944  	if (rc) {
945  		root = ERR_PTR(rc);
946  		goto out;
947  	}
948  
949  	rc = cifs_mount(cifs_sb, cifs_sb->ctx);
950  	if (rc) {
951  		if (!(flags & SB_SILENT))
952  			cifs_dbg(VFS, "cifs_mount failed w/return code = %d\n",
953  				 rc);
954  		root = ERR_PTR(rc);
955  		goto out;
956  	}
957  
958  	mnt_data.ctx = cifs_sb->ctx;
959  	mnt_data.cifs_sb = cifs_sb;
960  	mnt_data.flags = flags;
961  
962  	/* BB should we make this contingent on mount parm? */
963  	flags |= SB_NODIRATIME | SB_NOATIME;
964  
965  	sb = sget(fs_type, cifs_match_super, cifs_set_super, flags, &mnt_data);
966  	if (IS_ERR(sb)) {
967  		cifs_umount(cifs_sb);
968  		return ERR_CAST(sb);
969  	}
970  
971  	if (sb->s_root) {
972  		cifs_dbg(FYI, "Use existing superblock\n");
973  		cifs_umount(cifs_sb);
974  		cifs_sb = NULL;
975  	} else {
976  		rc = cifs_read_super(sb);
977  		if (rc) {
978  			root = ERR_PTR(rc);
979  			goto out_super;
980  		}
981  
982  		sb->s_flags |= SB_ACTIVE;
983  	}
984  
985  	root = cifs_get_root(cifs_sb ? cifs_sb->ctx : old_ctx, sb);
986  	if (IS_ERR(root))
987  		goto out_super;
988  
989  	if (cifs_sb)
990  		cifs_sb->root = dget(root);
991  
992  	cifs_dbg(FYI, "dentry root is: %p\n", root);
993  	return root;
994  
995  out_super:
996  	deactivate_locked_super(sb);
997  	return root;
998  out:
999  	kfree(cifs_sb->prepath);
1000  	smb3_cleanup_fs_context(cifs_sb->ctx);
1001  	kfree(cifs_sb);
1002  	return root;
1003  }
1004  
cifs_llseek(struct file * file,loff_t offset,int whence)1005  static loff_t cifs_llseek(struct file *file, loff_t offset, int whence)
1006  {
1007  	struct cifsFileInfo *cfile = file->private_data;
1008  	struct cifs_tcon *tcon;
1009  
1010  	/*
1011  	 * whence == SEEK_END || SEEK_DATA || SEEK_HOLE => we must revalidate
1012  	 * the cached file length
1013  	 */
1014  	if (whence != SEEK_SET && whence != SEEK_CUR) {
1015  		int rc;
1016  		struct inode *inode = file_inode(file);
1017  
1018  		/*
1019  		 * We need to be sure that all dirty pages are written and the
1020  		 * server has the newest file length.
1021  		 */
1022  		if (!CIFS_CACHE_READ(CIFS_I(inode)) && inode->i_mapping &&
1023  		    inode->i_mapping->nrpages != 0) {
1024  			rc = filemap_fdatawait(inode->i_mapping);
1025  			if (rc) {
1026  				mapping_set_error(inode->i_mapping, rc);
1027  				return rc;
1028  			}
1029  		}
1030  		/*
1031  		 * Some applications poll for the file length in this strange
1032  		 * way so we must seek to end on non-oplocked files by
1033  		 * setting the revalidate time to zero.
1034  		 */
1035  		CIFS_I(inode)->time = 0;
1036  
1037  		rc = cifs_revalidate_file_attr(file);
1038  		if (rc < 0)
1039  			return (loff_t)rc;
1040  	}
1041  	if (cfile && cfile->tlink) {
1042  		tcon = tlink_tcon(cfile->tlink);
1043  		if (tcon->ses->server->ops->llseek)
1044  			return tcon->ses->server->ops->llseek(file, tcon,
1045  							      offset, whence);
1046  	}
1047  	return generic_file_llseek(file, offset, whence);
1048  }
1049  
1050  static int
cifs_setlease(struct file * file,int arg,struct file_lease ** lease,void ** priv)1051  cifs_setlease(struct file *file, int arg, struct file_lease **lease, void **priv)
1052  {
1053  	/*
1054  	 * Note that this is called by vfs setlease with i_lock held to
1055  	 * protect *lease from going away.
1056  	 */
1057  	struct inode *inode = file_inode(file);
1058  	struct cifsFileInfo *cfile = file->private_data;
1059  
1060  	/* Check if file is oplocked if this is request for new lease */
1061  	if (arg == F_UNLCK ||
1062  	    ((arg == F_RDLCK) && CIFS_CACHE_READ(CIFS_I(inode))) ||
1063  	    ((arg == F_WRLCK) && CIFS_CACHE_WRITE(CIFS_I(inode))))
1064  		return generic_setlease(file, arg, lease, priv);
1065  	else if (tlink_tcon(cfile->tlink)->local_lease &&
1066  		 !CIFS_CACHE_READ(CIFS_I(inode)))
1067  		/*
1068  		 * If the server claims to support oplock on this file, then we
1069  		 * still need to check oplock even if the local_lease mount
1070  		 * option is set, but there are servers which do not support
1071  		 * oplock for which this mount option may be useful if the user
1072  		 * knows that the file won't be changed on the server by anyone
1073  		 * else.
1074  		 */
1075  		return generic_setlease(file, arg, lease, priv);
1076  	else
1077  		return -EAGAIN;
1078  }
1079  
1080  struct file_system_type cifs_fs_type = {
1081  	.owner = THIS_MODULE,
1082  	.name = "cifs",
1083  	.init_fs_context = smb3_init_fs_context,
1084  	.parameters = smb3_fs_parameters,
1085  	.kill_sb = cifs_kill_sb,
1086  	.fs_flags = FS_RENAME_DOES_D_MOVE,
1087  };
1088  MODULE_ALIAS_FS("cifs");
1089  
1090  struct file_system_type smb3_fs_type = {
1091  	.owner = THIS_MODULE,
1092  	.name = "smb3",
1093  	.init_fs_context = smb3_init_fs_context,
1094  	.parameters = smb3_fs_parameters,
1095  	.kill_sb = cifs_kill_sb,
1096  	.fs_flags = FS_RENAME_DOES_D_MOVE,
1097  };
1098  MODULE_ALIAS_FS("smb3");
1099  MODULE_ALIAS("smb3");
1100  
1101  const struct inode_operations cifs_dir_inode_ops = {
1102  	.create = cifs_create,
1103  	.atomic_open = cifs_atomic_open,
1104  	.lookup = cifs_lookup,
1105  	.getattr = cifs_getattr,
1106  	.unlink = cifs_unlink,
1107  	.link = cifs_hardlink,
1108  	.mkdir = cifs_mkdir,
1109  	.rmdir = cifs_rmdir,
1110  	.rename = cifs_rename2,
1111  	.permission = cifs_permission,
1112  	.setattr = cifs_setattr,
1113  	.symlink = cifs_symlink,
1114  	.mknod   = cifs_mknod,
1115  	.listxattr = cifs_listxattr,
1116  	.get_acl = cifs_get_acl,
1117  	.set_acl = cifs_set_acl,
1118  };
1119  
1120  const struct inode_operations cifs_file_inode_ops = {
1121  	.setattr = cifs_setattr,
1122  	.getattr = cifs_getattr,
1123  	.permission = cifs_permission,
1124  	.listxattr = cifs_listxattr,
1125  	.fiemap = cifs_fiemap,
1126  	.get_acl = cifs_get_acl,
1127  	.set_acl = cifs_set_acl,
1128  };
1129  
cifs_get_link(struct dentry * dentry,struct inode * inode,struct delayed_call * done)1130  const char *cifs_get_link(struct dentry *dentry, struct inode *inode,
1131  			    struct delayed_call *done)
1132  {
1133  	char *target_path;
1134  
1135  	if (!dentry)
1136  		return ERR_PTR(-ECHILD);
1137  
1138  	target_path = kmalloc(PATH_MAX, GFP_KERNEL);
1139  	if (!target_path)
1140  		return ERR_PTR(-ENOMEM);
1141  
1142  	spin_lock(&inode->i_lock);
1143  	if (likely(CIFS_I(inode)->symlink_target)) {
1144  		strscpy(target_path, CIFS_I(inode)->symlink_target, PATH_MAX);
1145  	} else {
1146  		kfree(target_path);
1147  		target_path = ERR_PTR(-EOPNOTSUPP);
1148  	}
1149  	spin_unlock(&inode->i_lock);
1150  
1151  	if (!IS_ERR(target_path))
1152  		set_delayed_call(done, kfree_link, target_path);
1153  
1154  	return target_path;
1155  }
1156  
1157  const struct inode_operations cifs_symlink_inode_ops = {
1158  	.get_link = cifs_get_link,
1159  	.setattr = cifs_setattr,
1160  	.permission = cifs_permission,
1161  	.listxattr = cifs_listxattr,
1162  };
1163  
1164  /*
1165   * Advance the EOF marker to after the source range.
1166   */
cifs_precopy_set_eof(struct inode * src_inode,struct cifsInodeInfo * src_cifsi,struct cifs_tcon * src_tcon,unsigned int xid,loff_t src_end)1167  static int cifs_precopy_set_eof(struct inode *src_inode, struct cifsInodeInfo *src_cifsi,
1168  				struct cifs_tcon *src_tcon,
1169  				unsigned int xid, loff_t src_end)
1170  {
1171  	struct cifsFileInfo *writeable_srcfile;
1172  	int rc = -EINVAL;
1173  
1174  	writeable_srcfile = find_writable_file(src_cifsi, FIND_WR_FSUID_ONLY);
1175  	if (writeable_srcfile) {
1176  		if (src_tcon->ses->server->ops->set_file_size)
1177  			rc = src_tcon->ses->server->ops->set_file_size(
1178  				xid, src_tcon, writeable_srcfile,
1179  				src_inode->i_size, true /* no need to set sparse */);
1180  		else
1181  			rc = -ENOSYS;
1182  		cifsFileInfo_put(writeable_srcfile);
1183  		cifs_dbg(FYI, "SetFSize for copychunk rc = %d\n", rc);
1184  	}
1185  
1186  	if (rc < 0)
1187  		goto set_failed;
1188  
1189  	netfs_resize_file(&src_cifsi->netfs, src_end, true);
1190  	fscache_resize_cookie(cifs_inode_cookie(src_inode), src_end);
1191  	return 0;
1192  
1193  set_failed:
1194  	return filemap_write_and_wait(src_inode->i_mapping);
1195  }
1196  
1197  /*
1198   * Flush out either the folio that overlaps the beginning of a range in which
1199   * pos resides or the folio that overlaps the end of a range unless that folio
1200   * is entirely within the range we're going to invalidate.  We extend the flush
1201   * bounds to encompass the folio.
1202   */
cifs_flush_folio(struct inode * inode,loff_t pos,loff_t * _fstart,loff_t * _fend,bool first)1203  static int cifs_flush_folio(struct inode *inode, loff_t pos, loff_t *_fstart, loff_t *_fend,
1204  			    bool first)
1205  {
1206  	struct folio *folio;
1207  	unsigned long long fpos, fend;
1208  	pgoff_t index = pos / PAGE_SIZE;
1209  	size_t size;
1210  	int rc = 0;
1211  
1212  	folio = filemap_get_folio(inode->i_mapping, index);
1213  	if (IS_ERR(folio))
1214  		return 0;
1215  
1216  	size = folio_size(folio);
1217  	fpos = folio_pos(folio);
1218  	fend = fpos + size - 1;
1219  	*_fstart = min_t(unsigned long long, *_fstart, fpos);
1220  	*_fend   = max_t(unsigned long long, *_fend, fend);
1221  	if ((first && pos == fpos) || (!first && pos == fend))
1222  		goto out;
1223  
1224  	rc = filemap_write_and_wait_range(inode->i_mapping, fpos, fend);
1225  out:
1226  	folio_put(folio);
1227  	return rc;
1228  }
1229  
cifs_remap_file_range(struct file * src_file,loff_t off,struct file * dst_file,loff_t destoff,loff_t len,unsigned int remap_flags)1230  static loff_t cifs_remap_file_range(struct file *src_file, loff_t off,
1231  		struct file *dst_file, loff_t destoff, loff_t len,
1232  		unsigned int remap_flags)
1233  {
1234  	struct inode *src_inode = file_inode(src_file);
1235  	struct inode *target_inode = file_inode(dst_file);
1236  	struct cifsInodeInfo *src_cifsi = CIFS_I(src_inode);
1237  	struct cifsInodeInfo *target_cifsi = CIFS_I(target_inode);
1238  	struct cifsFileInfo *smb_file_src = src_file->private_data;
1239  	struct cifsFileInfo *smb_file_target = dst_file->private_data;
1240  	struct cifs_tcon *target_tcon, *src_tcon;
1241  	unsigned long long destend, fstart, fend, old_size, new_size;
1242  	unsigned int xid;
1243  	int rc;
1244  
1245  	if (remap_flags & REMAP_FILE_DEDUP)
1246  		return -EOPNOTSUPP;
1247  	if (remap_flags & ~REMAP_FILE_ADVISORY)
1248  		return -EINVAL;
1249  
1250  	cifs_dbg(FYI, "clone range\n");
1251  
1252  	xid = get_xid();
1253  
1254  	if (!smb_file_src || !smb_file_target) {
1255  		rc = -EBADF;
1256  		cifs_dbg(VFS, "missing cifsFileInfo on copy range src file\n");
1257  		goto out;
1258  	}
1259  
1260  	src_tcon = tlink_tcon(smb_file_src->tlink);
1261  	target_tcon = tlink_tcon(smb_file_target->tlink);
1262  
1263  	/*
1264  	 * Note: cifs case is easier than btrfs since server responsible for
1265  	 * checks for proper open modes and file type and if it wants
1266  	 * server could even support copy of range where source = target
1267  	 */
1268  	lock_two_nondirectories(target_inode, src_inode);
1269  
1270  	if (len == 0)
1271  		len = src_inode->i_size - off;
1272  
1273  	cifs_dbg(FYI, "clone range\n");
1274  
1275  	/* Flush the source buffer */
1276  	rc = filemap_write_and_wait_range(src_inode->i_mapping, off,
1277  					  off + len - 1);
1278  	if (rc)
1279  		goto unlock;
1280  
1281  	/* The server-side copy will fail if the source crosses the EOF marker.
1282  	 * Advance the EOF marker after the flush above to the end of the range
1283  	 * if it's short of that.
1284  	 */
1285  	if (src_cifsi->netfs.remote_i_size < off + len) {
1286  		rc = cifs_precopy_set_eof(src_inode, src_cifsi, src_tcon, xid, off + len);
1287  		if (rc < 0)
1288  			goto unlock;
1289  	}
1290  
1291  	new_size = destoff + len;
1292  	destend = destoff + len - 1;
1293  
1294  	/* Flush the folios at either end of the destination range to prevent
1295  	 * accidental loss of dirty data outside of the range.
1296  	 */
1297  	fstart = destoff;
1298  	fend = destend;
1299  
1300  	rc = cifs_flush_folio(target_inode, destoff, &fstart, &fend, true);
1301  	if (rc)
1302  		goto unlock;
1303  	rc = cifs_flush_folio(target_inode, destend, &fstart, &fend, false);
1304  	if (rc)
1305  		goto unlock;
1306  	if (fend > target_cifsi->netfs.zero_point)
1307  		target_cifsi->netfs.zero_point = fend + 1;
1308  	old_size = target_cifsi->netfs.remote_i_size;
1309  
1310  	/* Discard all the folios that overlap the destination region. */
1311  	cifs_dbg(FYI, "about to discard pages %llx-%llx\n", fstart, fend);
1312  	truncate_inode_pages_range(&target_inode->i_data, fstart, fend);
1313  
1314  	fscache_invalidate(cifs_inode_cookie(target_inode), NULL,
1315  			   i_size_read(target_inode), 0);
1316  
1317  	rc = -EOPNOTSUPP;
1318  	if (target_tcon->ses->server->ops->duplicate_extents) {
1319  		rc = target_tcon->ses->server->ops->duplicate_extents(xid,
1320  			smb_file_src, smb_file_target, off, len, destoff);
1321  		if (rc == 0 && new_size > old_size) {
1322  			truncate_setsize(target_inode, new_size);
1323  			fscache_resize_cookie(cifs_inode_cookie(target_inode),
1324  					      new_size);
1325  		}
1326  		if (rc == 0 && new_size > target_cifsi->netfs.zero_point)
1327  			target_cifsi->netfs.zero_point = new_size;
1328  	}
1329  
1330  	/* force revalidate of size and timestamps of target file now
1331  	   that target is updated on the server */
1332  	CIFS_I(target_inode)->time = 0;
1333  unlock:
1334  	/* although unlocking in the reverse order from locking is not
1335  	   strictly necessary here it is a little cleaner to be consistent */
1336  	unlock_two_nondirectories(src_inode, target_inode);
1337  out:
1338  	free_xid(xid);
1339  	return rc < 0 ? rc : len;
1340  }
1341  
cifs_file_copychunk_range(unsigned int xid,struct file * src_file,loff_t off,struct file * dst_file,loff_t destoff,size_t len,unsigned int flags)1342  ssize_t cifs_file_copychunk_range(unsigned int xid,
1343  				struct file *src_file, loff_t off,
1344  				struct file *dst_file, loff_t destoff,
1345  				size_t len, unsigned int flags)
1346  {
1347  	struct inode *src_inode = file_inode(src_file);
1348  	struct inode *target_inode = file_inode(dst_file);
1349  	struct cifsInodeInfo *src_cifsi = CIFS_I(src_inode);
1350  	struct cifsInodeInfo *target_cifsi = CIFS_I(target_inode);
1351  	struct cifsFileInfo *smb_file_src;
1352  	struct cifsFileInfo *smb_file_target;
1353  	struct cifs_tcon *src_tcon;
1354  	struct cifs_tcon *target_tcon;
1355  	ssize_t rc;
1356  
1357  	cifs_dbg(FYI, "copychunk range\n");
1358  
1359  	if (!src_file->private_data || !dst_file->private_data) {
1360  		rc = -EBADF;
1361  		cifs_dbg(VFS, "missing cifsFileInfo on copy range src file\n");
1362  		goto out;
1363  	}
1364  
1365  	rc = -EXDEV;
1366  	smb_file_target = dst_file->private_data;
1367  	smb_file_src = src_file->private_data;
1368  	src_tcon = tlink_tcon(smb_file_src->tlink);
1369  	target_tcon = tlink_tcon(smb_file_target->tlink);
1370  
1371  	if (src_tcon->ses != target_tcon->ses) {
1372  		cifs_dbg(FYI, "source and target of copy not on same server\n");
1373  		goto out;
1374  	}
1375  
1376  	rc = -EOPNOTSUPP;
1377  	if (!target_tcon->ses->server->ops->copychunk_range)
1378  		goto out;
1379  
1380  	/*
1381  	 * Note: cifs case is easier than btrfs since server responsible for
1382  	 * checks for proper open modes and file type and if it wants
1383  	 * server could even support copy of range where source = target
1384  	 */
1385  	lock_two_nondirectories(target_inode, src_inode);
1386  
1387  	cifs_dbg(FYI, "about to flush pages\n");
1388  
1389  	rc = filemap_write_and_wait_range(src_inode->i_mapping, off,
1390  					  off + len - 1);
1391  	if (rc)
1392  		goto unlock;
1393  
1394  	/* The server-side copy will fail if the source crosses the EOF marker.
1395  	 * Advance the EOF marker after the flush above to the end of the range
1396  	 * if it's short of that.
1397  	 */
1398  	if (src_cifsi->netfs.remote_i_size < off + len) {
1399  		rc = cifs_precopy_set_eof(src_inode, src_cifsi, src_tcon, xid, off + len);
1400  		if (rc < 0)
1401  			goto unlock;
1402  	}
1403  
1404  	/* Flush and invalidate all the folios in the destination region.  If
1405  	 * the copy was successful, then some of the flush is extra overhead,
1406  	 * but we need to allow for the copy failing in some way (eg. ENOSPC).
1407  	 */
1408  	rc = filemap_invalidate_inode(target_inode, true, destoff, destoff + len - 1);
1409  	if (rc)
1410  		goto unlock;
1411  
1412  	fscache_invalidate(cifs_inode_cookie(target_inode), NULL,
1413  			   i_size_read(target_inode), 0);
1414  
1415  	rc = file_modified(dst_file);
1416  	if (!rc) {
1417  		rc = target_tcon->ses->server->ops->copychunk_range(xid,
1418  			smb_file_src, smb_file_target, off, len, destoff);
1419  		if (rc > 0 && destoff + rc > i_size_read(target_inode)) {
1420  			truncate_setsize(target_inode, destoff + rc);
1421  			netfs_resize_file(&target_cifsi->netfs,
1422  					  i_size_read(target_inode), true);
1423  			fscache_resize_cookie(cifs_inode_cookie(target_inode),
1424  					      i_size_read(target_inode));
1425  		}
1426  		if (rc > 0 && destoff + rc > target_cifsi->netfs.zero_point)
1427  			target_cifsi->netfs.zero_point = destoff + rc;
1428  	}
1429  
1430  	file_accessed(src_file);
1431  
1432  	/* force revalidate of size and timestamps of target file now
1433  	 * that target is updated on the server
1434  	 */
1435  	CIFS_I(target_inode)->time = 0;
1436  
1437  unlock:
1438  	/* although unlocking in the reverse order from locking is not
1439  	 * strictly necessary here it is a little cleaner to be consistent
1440  	 */
1441  	unlock_two_nondirectories(src_inode, target_inode);
1442  
1443  out:
1444  	return rc;
1445  }
1446  
1447  /*
1448   * Directory operations under CIFS/SMB2/SMB3 are synchronous, so fsync()
1449   * is a dummy operation.
1450   */
cifs_dir_fsync(struct file * file,loff_t start,loff_t end,int datasync)1451  static int cifs_dir_fsync(struct file *file, loff_t start, loff_t end, int datasync)
1452  {
1453  	cifs_dbg(FYI, "Sync directory - name: %pD datasync: 0x%x\n",
1454  		 file, datasync);
1455  
1456  	return 0;
1457  }
1458  
cifs_copy_file_range(struct file * src_file,loff_t off,struct file * dst_file,loff_t destoff,size_t len,unsigned int flags)1459  static ssize_t cifs_copy_file_range(struct file *src_file, loff_t off,
1460  				struct file *dst_file, loff_t destoff,
1461  				size_t len, unsigned int flags)
1462  {
1463  	unsigned int xid = get_xid();
1464  	ssize_t rc;
1465  	struct cifsFileInfo *cfile = dst_file->private_data;
1466  
1467  	if (cfile->swapfile) {
1468  		rc = -EOPNOTSUPP;
1469  		free_xid(xid);
1470  		return rc;
1471  	}
1472  
1473  	rc = cifs_file_copychunk_range(xid, src_file, off, dst_file, destoff,
1474  					len, flags);
1475  	free_xid(xid);
1476  
1477  	if (rc == -EOPNOTSUPP || rc == -EXDEV)
1478  		rc = splice_copy_file_range(src_file, off, dst_file,
1479  					    destoff, len);
1480  	return rc;
1481  }
1482  
1483  const struct file_operations cifs_file_ops = {
1484  	.read_iter = cifs_loose_read_iter,
1485  	.write_iter = cifs_file_write_iter,
1486  	.open = cifs_open,
1487  	.release = cifs_close,
1488  	.lock = cifs_lock,
1489  	.flock = cifs_flock,
1490  	.fsync = cifs_fsync,
1491  	.flush = cifs_flush,
1492  	.mmap  = cifs_file_mmap,
1493  	.splice_read = filemap_splice_read,
1494  	.splice_write = iter_file_splice_write,
1495  	.llseek = cifs_llseek,
1496  	.unlocked_ioctl	= cifs_ioctl,
1497  	.copy_file_range = cifs_copy_file_range,
1498  	.remap_file_range = cifs_remap_file_range,
1499  	.setlease = cifs_setlease,
1500  	.fallocate = cifs_fallocate,
1501  };
1502  
1503  const struct file_operations cifs_file_strict_ops = {
1504  	.read_iter = cifs_strict_readv,
1505  	.write_iter = cifs_strict_writev,
1506  	.open = cifs_open,
1507  	.release = cifs_close,
1508  	.lock = cifs_lock,
1509  	.flock = cifs_flock,
1510  	.fsync = cifs_strict_fsync,
1511  	.flush = cifs_flush,
1512  	.mmap = cifs_file_strict_mmap,
1513  	.splice_read = filemap_splice_read,
1514  	.splice_write = iter_file_splice_write,
1515  	.llseek = cifs_llseek,
1516  	.unlocked_ioctl	= cifs_ioctl,
1517  	.copy_file_range = cifs_copy_file_range,
1518  	.remap_file_range = cifs_remap_file_range,
1519  	.setlease = cifs_setlease,
1520  	.fallocate = cifs_fallocate,
1521  };
1522  
1523  const struct file_operations cifs_file_direct_ops = {
1524  	.read_iter = netfs_unbuffered_read_iter,
1525  	.write_iter = netfs_file_write_iter,
1526  	.open = cifs_open,
1527  	.release = cifs_close,
1528  	.lock = cifs_lock,
1529  	.flock = cifs_flock,
1530  	.fsync = cifs_fsync,
1531  	.flush = cifs_flush,
1532  	.mmap = cifs_file_mmap,
1533  	.splice_read = copy_splice_read,
1534  	.splice_write = iter_file_splice_write,
1535  	.unlocked_ioctl  = cifs_ioctl,
1536  	.copy_file_range = cifs_copy_file_range,
1537  	.remap_file_range = cifs_remap_file_range,
1538  	.llseek = cifs_llseek,
1539  	.setlease = cifs_setlease,
1540  	.fallocate = cifs_fallocate,
1541  };
1542  
1543  const struct file_operations cifs_file_nobrl_ops = {
1544  	.read_iter = cifs_loose_read_iter,
1545  	.write_iter = cifs_file_write_iter,
1546  	.open = cifs_open,
1547  	.release = cifs_close,
1548  	.fsync = cifs_fsync,
1549  	.flush = cifs_flush,
1550  	.mmap  = cifs_file_mmap,
1551  	.splice_read = filemap_splice_read,
1552  	.splice_write = iter_file_splice_write,
1553  	.llseek = cifs_llseek,
1554  	.unlocked_ioctl	= cifs_ioctl,
1555  	.copy_file_range = cifs_copy_file_range,
1556  	.remap_file_range = cifs_remap_file_range,
1557  	.setlease = cifs_setlease,
1558  	.fallocate = cifs_fallocate,
1559  };
1560  
1561  const struct file_operations cifs_file_strict_nobrl_ops = {
1562  	.read_iter = cifs_strict_readv,
1563  	.write_iter = cifs_strict_writev,
1564  	.open = cifs_open,
1565  	.release = cifs_close,
1566  	.fsync = cifs_strict_fsync,
1567  	.flush = cifs_flush,
1568  	.mmap = cifs_file_strict_mmap,
1569  	.splice_read = filemap_splice_read,
1570  	.splice_write = iter_file_splice_write,
1571  	.llseek = cifs_llseek,
1572  	.unlocked_ioctl	= cifs_ioctl,
1573  	.copy_file_range = cifs_copy_file_range,
1574  	.remap_file_range = cifs_remap_file_range,
1575  	.setlease = cifs_setlease,
1576  	.fallocate = cifs_fallocate,
1577  };
1578  
1579  const struct file_operations cifs_file_direct_nobrl_ops = {
1580  	.read_iter = netfs_unbuffered_read_iter,
1581  	.write_iter = netfs_file_write_iter,
1582  	.open = cifs_open,
1583  	.release = cifs_close,
1584  	.fsync = cifs_fsync,
1585  	.flush = cifs_flush,
1586  	.mmap = cifs_file_mmap,
1587  	.splice_read = copy_splice_read,
1588  	.splice_write = iter_file_splice_write,
1589  	.unlocked_ioctl  = cifs_ioctl,
1590  	.copy_file_range = cifs_copy_file_range,
1591  	.remap_file_range = cifs_remap_file_range,
1592  	.llseek = cifs_llseek,
1593  	.setlease = cifs_setlease,
1594  	.fallocate = cifs_fallocate,
1595  };
1596  
1597  const struct file_operations cifs_dir_ops = {
1598  	.iterate_shared = cifs_readdir,
1599  	.release = cifs_closedir,
1600  	.read    = generic_read_dir,
1601  	.unlocked_ioctl  = cifs_ioctl,
1602  	.copy_file_range = cifs_copy_file_range,
1603  	.remap_file_range = cifs_remap_file_range,
1604  	.llseek = generic_file_llseek,
1605  	.fsync = cifs_dir_fsync,
1606  };
1607  
1608  static void
cifs_init_once(void * inode)1609  cifs_init_once(void *inode)
1610  {
1611  	struct cifsInodeInfo *cifsi = inode;
1612  
1613  	inode_init_once(&cifsi->netfs.inode);
1614  	init_rwsem(&cifsi->lock_sem);
1615  }
1616  
1617  static int __init
cifs_init_inodecache(void)1618  cifs_init_inodecache(void)
1619  {
1620  	cifs_inode_cachep = kmem_cache_create("cifs_inode_cache",
1621  					      sizeof(struct cifsInodeInfo),
1622  					      0, (SLAB_RECLAIM_ACCOUNT|
1623  						SLAB_ACCOUNT),
1624  					      cifs_init_once);
1625  	if (cifs_inode_cachep == NULL)
1626  		return -ENOMEM;
1627  
1628  	return 0;
1629  }
1630  
1631  static void
cifs_destroy_inodecache(void)1632  cifs_destroy_inodecache(void)
1633  {
1634  	/*
1635  	 * Make sure all delayed rcu free inodes are flushed before we
1636  	 * destroy cache.
1637  	 */
1638  	rcu_barrier();
1639  	kmem_cache_destroy(cifs_inode_cachep);
1640  }
1641  
1642  static int
cifs_init_request_bufs(void)1643  cifs_init_request_bufs(void)
1644  {
1645  	/*
1646  	 * SMB2 maximum header size is bigger than CIFS one - no problems to
1647  	 * allocate some more bytes for CIFS.
1648  	 */
1649  	size_t max_hdr_size = MAX_SMB2_HDR_SIZE;
1650  
1651  	if (CIFSMaxBufSize < 8192) {
1652  	/* Buffer size can not be smaller than 2 * PATH_MAX since maximum
1653  	Unicode path name has to fit in any SMB/CIFS path based frames */
1654  		CIFSMaxBufSize = 8192;
1655  	} else if (CIFSMaxBufSize > 1024*127) {
1656  		CIFSMaxBufSize = 1024 * 127;
1657  	} else {
1658  		CIFSMaxBufSize &= 0x1FE00; /* Round size to even 512 byte mult*/
1659  	}
1660  /*
1661  	cifs_dbg(VFS, "CIFSMaxBufSize %d 0x%x\n",
1662  		 CIFSMaxBufSize, CIFSMaxBufSize);
1663  */
1664  	cifs_req_cachep = kmem_cache_create_usercopy("cifs_request",
1665  					    CIFSMaxBufSize + max_hdr_size, 0,
1666  					    SLAB_HWCACHE_ALIGN, 0,
1667  					    CIFSMaxBufSize + max_hdr_size,
1668  					    NULL);
1669  	if (cifs_req_cachep == NULL)
1670  		return -ENOMEM;
1671  
1672  	if (cifs_min_rcv < 1)
1673  		cifs_min_rcv = 1;
1674  	else if (cifs_min_rcv > 64) {
1675  		cifs_min_rcv = 64;
1676  		cifs_dbg(VFS, "cifs_min_rcv set to maximum (64)\n");
1677  	}
1678  
1679  	cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
1680  						  cifs_req_cachep);
1681  
1682  	if (cifs_req_poolp == NULL) {
1683  		kmem_cache_destroy(cifs_req_cachep);
1684  		return -ENOMEM;
1685  	}
1686  	/* MAX_CIFS_SMALL_BUFFER_SIZE bytes is enough for most SMB responses and
1687  	almost all handle based requests (but not write response, nor is it
1688  	sufficient for path based requests).  A smaller size would have
1689  	been more efficient (compacting multiple slab items on one 4k page)
1690  	for the case in which debug was on, but this larger size allows
1691  	more SMBs to use small buffer alloc and is still much more
1692  	efficient to alloc 1 per page off the slab compared to 17K (5page)
1693  	alloc of large cifs buffers even when page debugging is on */
1694  	cifs_sm_req_cachep = kmem_cache_create_usercopy("cifs_small_rq",
1695  			MAX_CIFS_SMALL_BUFFER_SIZE, 0, SLAB_HWCACHE_ALIGN,
1696  			0, MAX_CIFS_SMALL_BUFFER_SIZE, NULL);
1697  	if (cifs_sm_req_cachep == NULL) {
1698  		mempool_destroy(cifs_req_poolp);
1699  		kmem_cache_destroy(cifs_req_cachep);
1700  		return -ENOMEM;
1701  	}
1702  
1703  	if (cifs_min_small < 2)
1704  		cifs_min_small = 2;
1705  	else if (cifs_min_small > 256) {
1706  		cifs_min_small = 256;
1707  		cifs_dbg(FYI, "cifs_min_small set to maximum (256)\n");
1708  	}
1709  
1710  	cifs_sm_req_poolp = mempool_create_slab_pool(cifs_min_small,
1711  						     cifs_sm_req_cachep);
1712  
1713  	if (cifs_sm_req_poolp == NULL) {
1714  		mempool_destroy(cifs_req_poolp);
1715  		kmem_cache_destroy(cifs_req_cachep);
1716  		kmem_cache_destroy(cifs_sm_req_cachep);
1717  		return -ENOMEM;
1718  	}
1719  
1720  	return 0;
1721  }
1722  
1723  static void
cifs_destroy_request_bufs(void)1724  cifs_destroy_request_bufs(void)
1725  {
1726  	mempool_destroy(cifs_req_poolp);
1727  	kmem_cache_destroy(cifs_req_cachep);
1728  	mempool_destroy(cifs_sm_req_poolp);
1729  	kmem_cache_destroy(cifs_sm_req_cachep);
1730  }
1731  
init_mids(void)1732  static int init_mids(void)
1733  {
1734  	cifs_mid_cachep = kmem_cache_create("cifs_mpx_ids",
1735  					    sizeof(struct mid_q_entry), 0,
1736  					    SLAB_HWCACHE_ALIGN, NULL);
1737  	if (cifs_mid_cachep == NULL)
1738  		return -ENOMEM;
1739  
1740  	/* 3 is a reasonable minimum number of simultaneous operations */
1741  	cifs_mid_poolp = mempool_create_slab_pool(3, cifs_mid_cachep);
1742  	if (cifs_mid_poolp == NULL) {
1743  		kmem_cache_destroy(cifs_mid_cachep);
1744  		return -ENOMEM;
1745  	}
1746  
1747  	return 0;
1748  }
1749  
destroy_mids(void)1750  static void destroy_mids(void)
1751  {
1752  	mempool_destroy(cifs_mid_poolp);
1753  	kmem_cache_destroy(cifs_mid_cachep);
1754  }
1755  
cifs_init_netfs(void)1756  static int cifs_init_netfs(void)
1757  {
1758  	cifs_io_request_cachep =
1759  		kmem_cache_create("cifs_io_request",
1760  				  sizeof(struct cifs_io_request), 0,
1761  				  SLAB_HWCACHE_ALIGN, NULL);
1762  	if (!cifs_io_request_cachep)
1763  		goto nomem_req;
1764  
1765  	if (mempool_init_slab_pool(&cifs_io_request_pool, 100, cifs_io_request_cachep) < 0)
1766  		goto nomem_reqpool;
1767  
1768  	cifs_io_subrequest_cachep =
1769  		kmem_cache_create("cifs_io_subrequest",
1770  				  sizeof(struct cifs_io_subrequest), 0,
1771  				  SLAB_HWCACHE_ALIGN, NULL);
1772  	if (!cifs_io_subrequest_cachep)
1773  		goto nomem_subreq;
1774  
1775  	if (mempool_init_slab_pool(&cifs_io_subrequest_pool, 100, cifs_io_subrequest_cachep) < 0)
1776  		goto nomem_subreqpool;
1777  
1778  	return 0;
1779  
1780  nomem_subreqpool:
1781  	kmem_cache_destroy(cifs_io_subrequest_cachep);
1782  nomem_subreq:
1783  	mempool_exit(&cifs_io_request_pool);
1784  nomem_reqpool:
1785  	kmem_cache_destroy(cifs_io_request_cachep);
1786  nomem_req:
1787  	return -ENOMEM;
1788  }
1789  
cifs_destroy_netfs(void)1790  static void cifs_destroy_netfs(void)
1791  {
1792  	mempool_exit(&cifs_io_subrequest_pool);
1793  	kmem_cache_destroy(cifs_io_subrequest_cachep);
1794  	mempool_exit(&cifs_io_request_pool);
1795  	kmem_cache_destroy(cifs_io_request_cachep);
1796  }
1797  
1798  static int __init
init_cifs(void)1799  init_cifs(void)
1800  {
1801  	int rc = 0;
1802  	cifs_proc_init();
1803  	INIT_LIST_HEAD(&cifs_tcp_ses_list);
1804  /*
1805   *  Initialize Global counters
1806   */
1807  	atomic_set(&sesInfoAllocCount, 0);
1808  	atomic_set(&tconInfoAllocCount, 0);
1809  	atomic_set(&tcpSesNextId, 0);
1810  	atomic_set(&tcpSesAllocCount, 0);
1811  	atomic_set(&tcpSesReconnectCount, 0);
1812  	atomic_set(&tconInfoReconnectCount, 0);
1813  
1814  	atomic_set(&buf_alloc_count, 0);
1815  	atomic_set(&small_buf_alloc_count, 0);
1816  #ifdef CONFIG_CIFS_STATS2
1817  	atomic_set(&total_buf_alloc_count, 0);
1818  	atomic_set(&total_small_buf_alloc_count, 0);
1819  	if (slow_rsp_threshold < 1)
1820  		cifs_dbg(FYI, "slow_response_threshold msgs disabled\n");
1821  	else if (slow_rsp_threshold > 32767)
1822  		cifs_dbg(VFS,
1823  		       "slow response threshold set higher than recommended (0 to 32767)\n");
1824  #endif /* CONFIG_CIFS_STATS2 */
1825  
1826  	atomic_set(&mid_count, 0);
1827  	GlobalCurrentXid = 0;
1828  	GlobalTotalActiveXid = 0;
1829  	GlobalMaxActiveXid = 0;
1830  	spin_lock_init(&cifs_tcp_ses_lock);
1831  	spin_lock_init(&GlobalMid_Lock);
1832  
1833  	cifs_lock_secret = get_random_u32();
1834  
1835  	if (cifs_max_pending < 2) {
1836  		cifs_max_pending = 2;
1837  		cifs_dbg(FYI, "cifs_max_pending set to min of 2\n");
1838  	} else if (cifs_max_pending > CIFS_MAX_REQ) {
1839  		cifs_max_pending = CIFS_MAX_REQ;
1840  		cifs_dbg(FYI, "cifs_max_pending set to max of %u\n",
1841  			 CIFS_MAX_REQ);
1842  	}
1843  
1844  	/* Limit max to about 18 hours, and setting to zero disables directory entry caching */
1845  	if (dir_cache_timeout > 65000) {
1846  		dir_cache_timeout = 65000;
1847  		cifs_dbg(VFS, "dir_cache_timeout set to max of 65000 seconds\n");
1848  	}
1849  
1850  	cifsiod_wq = alloc_workqueue("cifsiod", WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1851  	if (!cifsiod_wq) {
1852  		rc = -ENOMEM;
1853  		goto out_clean_proc;
1854  	}
1855  
1856  	/*
1857  	 * Consider in future setting limit!=0 maybe to min(num_of_cores - 1, 3)
1858  	 * so that we don't launch too many worker threads but
1859  	 * Documentation/core-api/workqueue.rst recommends setting it to 0
1860  	 */
1861  
1862  	/* WQ_UNBOUND allows decrypt tasks to run on any CPU */
1863  	decrypt_wq = alloc_workqueue("smb3decryptd",
1864  				     WQ_UNBOUND|WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1865  	if (!decrypt_wq) {
1866  		rc = -ENOMEM;
1867  		goto out_destroy_cifsiod_wq;
1868  	}
1869  
1870  	fileinfo_put_wq = alloc_workqueue("cifsfileinfoput",
1871  				     WQ_UNBOUND|WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1872  	if (!fileinfo_put_wq) {
1873  		rc = -ENOMEM;
1874  		goto out_destroy_decrypt_wq;
1875  	}
1876  
1877  	cifsoplockd_wq = alloc_workqueue("cifsoplockd",
1878  					 WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1879  	if (!cifsoplockd_wq) {
1880  		rc = -ENOMEM;
1881  		goto out_destroy_fileinfo_put_wq;
1882  	}
1883  
1884  	deferredclose_wq = alloc_workqueue("deferredclose",
1885  					   WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1886  	if (!deferredclose_wq) {
1887  		rc = -ENOMEM;
1888  		goto out_destroy_cifsoplockd_wq;
1889  	}
1890  
1891  	serverclose_wq = alloc_workqueue("serverclose",
1892  					   WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1893  	if (!serverclose_wq) {
1894  		rc = -ENOMEM;
1895  		goto out_destroy_deferredclose_wq;
1896  	}
1897  
1898  	rc = cifs_init_inodecache();
1899  	if (rc)
1900  		goto out_destroy_serverclose_wq;
1901  
1902  	rc = cifs_init_netfs();
1903  	if (rc)
1904  		goto out_destroy_inodecache;
1905  
1906  	rc = init_mids();
1907  	if (rc)
1908  		goto out_destroy_netfs;
1909  
1910  	rc = cifs_init_request_bufs();
1911  	if (rc)
1912  		goto out_destroy_mids;
1913  
1914  #ifdef CONFIG_CIFS_DFS_UPCALL
1915  	rc = dfs_cache_init();
1916  	if (rc)
1917  		goto out_destroy_request_bufs;
1918  #endif /* CONFIG_CIFS_DFS_UPCALL */
1919  #ifdef CONFIG_CIFS_UPCALL
1920  	rc = init_cifs_spnego();
1921  	if (rc)
1922  		goto out_destroy_dfs_cache;
1923  #endif /* CONFIG_CIFS_UPCALL */
1924  #ifdef CONFIG_CIFS_SWN_UPCALL
1925  	rc = cifs_genl_init();
1926  	if (rc)
1927  		goto out_register_key_type;
1928  #endif /* CONFIG_CIFS_SWN_UPCALL */
1929  
1930  	rc = init_cifs_idmap();
1931  	if (rc)
1932  		goto out_cifs_swn_init;
1933  
1934  	rc = register_filesystem(&cifs_fs_type);
1935  	if (rc)
1936  		goto out_init_cifs_idmap;
1937  
1938  	rc = register_filesystem(&smb3_fs_type);
1939  	if (rc) {
1940  		unregister_filesystem(&cifs_fs_type);
1941  		goto out_init_cifs_idmap;
1942  	}
1943  
1944  	return 0;
1945  
1946  out_init_cifs_idmap:
1947  	exit_cifs_idmap();
1948  out_cifs_swn_init:
1949  #ifdef CONFIG_CIFS_SWN_UPCALL
1950  	cifs_genl_exit();
1951  out_register_key_type:
1952  #endif
1953  #ifdef CONFIG_CIFS_UPCALL
1954  	exit_cifs_spnego();
1955  out_destroy_dfs_cache:
1956  #endif
1957  #ifdef CONFIG_CIFS_DFS_UPCALL
1958  	dfs_cache_destroy();
1959  out_destroy_request_bufs:
1960  #endif
1961  	cifs_destroy_request_bufs();
1962  out_destroy_mids:
1963  	destroy_mids();
1964  out_destroy_netfs:
1965  	cifs_destroy_netfs();
1966  out_destroy_inodecache:
1967  	cifs_destroy_inodecache();
1968  out_destroy_serverclose_wq:
1969  	destroy_workqueue(serverclose_wq);
1970  out_destroy_deferredclose_wq:
1971  	destroy_workqueue(deferredclose_wq);
1972  out_destroy_cifsoplockd_wq:
1973  	destroy_workqueue(cifsoplockd_wq);
1974  out_destroy_fileinfo_put_wq:
1975  	destroy_workqueue(fileinfo_put_wq);
1976  out_destroy_decrypt_wq:
1977  	destroy_workqueue(decrypt_wq);
1978  out_destroy_cifsiod_wq:
1979  	destroy_workqueue(cifsiod_wq);
1980  out_clean_proc:
1981  	cifs_proc_clean();
1982  	return rc;
1983  }
1984  
1985  static void __exit
exit_cifs(void)1986  exit_cifs(void)
1987  {
1988  	cifs_dbg(NOISY, "exit_smb3\n");
1989  	unregister_filesystem(&cifs_fs_type);
1990  	unregister_filesystem(&smb3_fs_type);
1991  	cifs_release_automount_timer();
1992  	exit_cifs_idmap();
1993  #ifdef CONFIG_CIFS_SWN_UPCALL
1994  	cifs_genl_exit();
1995  #endif
1996  #ifdef CONFIG_CIFS_UPCALL
1997  	exit_cifs_spnego();
1998  #endif
1999  #ifdef CONFIG_CIFS_DFS_UPCALL
2000  	dfs_cache_destroy();
2001  #endif
2002  	cifs_destroy_request_bufs();
2003  	destroy_mids();
2004  	cifs_destroy_netfs();
2005  	cifs_destroy_inodecache();
2006  	destroy_workqueue(deferredclose_wq);
2007  	destroy_workqueue(cifsoplockd_wq);
2008  	destroy_workqueue(decrypt_wq);
2009  	destroy_workqueue(fileinfo_put_wq);
2010  	destroy_workqueue(serverclose_wq);
2011  	destroy_workqueue(cifsiod_wq);
2012  	cifs_proc_clean();
2013  }
2014  
2015  MODULE_AUTHOR("Steve French");
2016  MODULE_LICENSE("GPL");	/* combination of LGPL + GPL source behaves as GPL */
2017  MODULE_DESCRIPTION
2018  	("VFS to access SMB3 servers e.g. Samba, Macs, Azure and Windows (and "
2019  	"also older servers complying with the SNIA CIFS Specification)");
2020  MODULE_VERSION(CIFS_VERSION);
2021  MODULE_SOFTDEP("ecb");
2022  MODULE_SOFTDEP("hmac");
2023  MODULE_SOFTDEP("md5");
2024  MODULE_SOFTDEP("nls");
2025  MODULE_SOFTDEP("aes");
2026  MODULE_SOFTDEP("cmac");
2027  MODULE_SOFTDEP("sha256");
2028  MODULE_SOFTDEP("sha512");
2029  MODULE_SOFTDEP("aead2");
2030  MODULE_SOFTDEP("ccm");
2031  MODULE_SOFTDEP("gcm");
2032  module_init(init_cifs)
2033  module_exit(exit_cifs)
2034