• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *   fs/cifs/cifsfs.c
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  *   This library is free software; you can redistribute it and/or modify
10  *   it under the terms of the GNU Lesser General Public License as published
11  *   by the Free Software Foundation; either version 2.1 of the License, or
12  *   (at your option) any later version.
13  *
14  *   This library is distributed in the hope that it will be useful,
15  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
17  *   the GNU Lesser General Public License for more details.
18  *
19  *   You should have received a copy of the GNU Lesser General Public License
20  *   along with this library; if not, write to the Free Software
21  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  */
23 
24 /* Note that BB means BUGBUG (ie something to fix eventually) */
25 
26 #include <linux/module.h>
27 #include <linux/fs.h>
28 #include <linux/mount.h>
29 #include <linux/slab.h>
30 #include <linux/init.h>
31 #include <linux/list.h>
32 #include <linux/seq_file.h>
33 #include <linux/vfs.h>
34 #include <linux/mempool.h>
35 #include <linux/delay.h>
36 #include <linux/kthread.h>
37 #include <linux/freezer.h>
38 #include <linux/namei.h>
39 #include <linux/random.h>
40 #include <linux/uuid.h>
41 #include <linux/xattr.h>
42 #include <net/ipv6.h>
43 #include "cifsfs.h"
44 #include "cifspdu.h"
45 #define DECLARE_GLOBALS_HERE
46 #include "cifsglob.h"
47 #include "cifsproto.h"
48 #include "cifs_debug.h"
49 #include "cifs_fs_sb.h"
50 #include <linux/mm.h>
51 #include <linux/key-type.h>
52 #include "cifs_spnego.h"
53 #include "fscache.h"
54 #include "smb2pdu.h"
55 
56 int cifsFYI = 0;
57 bool traceSMB;
58 bool enable_oplocks = true;
59 bool linuxExtEnabled = true;
60 bool lookupCacheEnabled = true;
61 unsigned int global_secflags = CIFSSEC_DEF;
62 /* unsigned int ntlmv2_support = 0; */
63 unsigned int sign_CIFS_PDUs = 1;
64 static const struct super_operations cifs_super_ops;
65 unsigned int CIFSMaxBufSize = CIFS_MAX_MSGSIZE;
66 module_param(CIFSMaxBufSize, uint, 0444);
67 MODULE_PARM_DESC(CIFSMaxBufSize, "Network buffer size (not including header). "
68 				 "Default: 16384 Range: 8192 to 130048");
69 unsigned int cifs_min_rcv = CIFS_MIN_RCV_POOL;
70 module_param(cifs_min_rcv, uint, 0444);
71 MODULE_PARM_DESC(cifs_min_rcv, "Network buffers in pool. Default: 4 Range: "
72 				"1 to 64");
73 unsigned int cifs_min_small = 30;
74 module_param(cifs_min_small, uint, 0444);
75 MODULE_PARM_DESC(cifs_min_small, "Small network buffers in pool. Default: 30 "
76 				 "Range: 2 to 256");
77 unsigned int cifs_max_pending = CIFS_MAX_REQ;
78 module_param(cifs_max_pending, uint, 0444);
79 MODULE_PARM_DESC(cifs_max_pending, "Simultaneous requests to server. "
80 				   "Default: 32767 Range: 2 to 32767.");
81 module_param(enable_oplocks, bool, 0644);
82 MODULE_PARM_DESC(enable_oplocks, "Enable or disable oplocks. Default: y/Y/1");
83 
84 extern mempool_t *cifs_sm_req_poolp;
85 extern mempool_t *cifs_req_poolp;
86 extern mempool_t *cifs_mid_poolp;
87 
88 struct workqueue_struct	*cifsiod_wq;
89 struct workqueue_struct	*cifsoplockd_wq;
90 __u32 cifs_lock_secret;
91 
92 /*
93  * Bumps refcount for cifs super block.
94  * Note that it should be only called if a referece to VFS super block is
95  * already held, e.g. in open-type syscalls context. Otherwise it can race with
96  * atomic_dec_and_test in deactivate_locked_super.
97  */
98 void
cifs_sb_active(struct super_block * sb)99 cifs_sb_active(struct super_block *sb)
100 {
101 	struct cifs_sb_info *server = CIFS_SB(sb);
102 
103 	if (atomic_inc_return(&server->active) == 1)
104 		atomic_inc(&sb->s_active);
105 }
106 
107 void
cifs_sb_deactive(struct super_block * sb)108 cifs_sb_deactive(struct super_block *sb)
109 {
110 	struct cifs_sb_info *server = CIFS_SB(sb);
111 
112 	if (atomic_dec_and_test(&server->active))
113 		deactivate_super(sb);
114 }
115 
116 static int
cifs_read_super(struct super_block * sb)117 cifs_read_super(struct super_block *sb)
118 {
119 	struct inode *inode;
120 	struct cifs_sb_info *cifs_sb;
121 	struct cifs_tcon *tcon;
122 	int rc = 0;
123 
124 	cifs_sb = CIFS_SB(sb);
125 	tcon = cifs_sb_master_tcon(cifs_sb);
126 
127 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL)
128 		sb->s_flags |= MS_POSIXACL;
129 
130 	if (tcon->ses->capabilities & tcon->ses->server->vals->cap_large_files)
131 		sb->s_maxbytes = MAX_LFS_FILESIZE;
132 	else
133 		sb->s_maxbytes = MAX_NON_LFS;
134 
135 	/* BB FIXME fix time_gran to be larger for LANMAN sessions */
136 	sb->s_time_gran = 100;
137 
138 	sb->s_magic = CIFS_MAGIC_NUMBER;
139 	sb->s_op = &cifs_super_ops;
140 	sb->s_xattr = cifs_xattr_handlers;
141 	rc = super_setup_bdi(sb);
142 	if (rc)
143 		goto out_no_root;
144 	/* tune readahead according to rsize */
145 	sb->s_bdi->ra_pages = cifs_sb->rsize / PAGE_SIZE;
146 
147 	sb->s_blocksize = CIFS_MAX_MSGSIZE;
148 	sb->s_blocksize_bits = 14;	/* default 2**14 = CIFS_MAX_MSGSIZE */
149 	inode = cifs_root_iget(sb);
150 
151 	if (IS_ERR(inode)) {
152 		rc = PTR_ERR(inode);
153 		goto out_no_root;
154 	}
155 
156 	if (tcon->nocase)
157 		sb->s_d_op = &cifs_ci_dentry_ops;
158 	else
159 		sb->s_d_op = &cifs_dentry_ops;
160 
161 	sb->s_root = d_make_root(inode);
162 	if (!sb->s_root) {
163 		rc = -ENOMEM;
164 		goto out_no_root;
165 	}
166 
167 #ifdef CONFIG_CIFS_NFSD_EXPORT
168 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
169 		cifs_dbg(FYI, "export ops supported\n");
170 		sb->s_export_op = &cifs_export_ops;
171 	}
172 #endif /* CONFIG_CIFS_NFSD_EXPORT */
173 
174 	return 0;
175 
176 out_no_root:
177 	cifs_dbg(VFS, "%s: get root inode failed\n", __func__);
178 	return rc;
179 }
180 
cifs_kill_sb(struct super_block * sb)181 static void cifs_kill_sb(struct super_block *sb)
182 {
183 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
184 	kill_anon_super(sb);
185 	cifs_umount(cifs_sb);
186 }
187 
188 static int
cifs_statfs(struct dentry * dentry,struct kstatfs * buf)189 cifs_statfs(struct dentry *dentry, struct kstatfs *buf)
190 {
191 	struct super_block *sb = dentry->d_sb;
192 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
193 	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
194 	struct TCP_Server_Info *server = tcon->ses->server;
195 	unsigned int xid;
196 	int rc = 0;
197 
198 	xid = get_xid();
199 
200 	if (le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength) > 0)
201 		buf->f_namelen =
202 		       le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength);
203 	else
204 		buf->f_namelen = PATH_MAX;
205 
206 	buf->f_fsid.val[0] = tcon->vol_serial_number;
207 	/* are using part of create time for more randomness, see man statfs */
208 	buf->f_fsid.val[1] =  (int)le64_to_cpu(tcon->vol_create_time);
209 
210 	buf->f_files = 0;	/* undefined */
211 	buf->f_ffree = 0;	/* unlimited */
212 
213 	if (server->ops->queryfs)
214 		rc = server->ops->queryfs(xid, tcon, buf);
215 
216 	free_xid(xid);
217 	return 0;
218 }
219 
cifs_fallocate(struct file * file,int mode,loff_t off,loff_t len)220 static long cifs_fallocate(struct file *file, int mode, loff_t off, loff_t len)
221 {
222 	struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
223 	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
224 	struct TCP_Server_Info *server = tcon->ses->server;
225 
226 	if (server->ops->fallocate)
227 		return server->ops->fallocate(file, tcon, mode, off, len);
228 
229 	return -EOPNOTSUPP;
230 }
231 
cifs_permission(struct inode * inode,int mask)232 static int cifs_permission(struct inode *inode, int mask)
233 {
234 	struct cifs_sb_info *cifs_sb;
235 
236 	cifs_sb = CIFS_SB(inode->i_sb);
237 
238 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) {
239 		if ((mask & MAY_EXEC) && !execute_ok(inode))
240 			return -EACCES;
241 		else
242 			return 0;
243 	} else /* file mode might have been restricted at mount time
244 		on the client (above and beyond ACL on servers) for
245 		servers which do not support setting and viewing mode bits,
246 		so allowing client to check permissions is useful */
247 		return generic_permission(inode, mask);
248 }
249 
250 static struct kmem_cache *cifs_inode_cachep;
251 static struct kmem_cache *cifs_req_cachep;
252 static struct kmem_cache *cifs_mid_cachep;
253 static struct kmem_cache *cifs_sm_req_cachep;
254 mempool_t *cifs_sm_req_poolp;
255 mempool_t *cifs_req_poolp;
256 mempool_t *cifs_mid_poolp;
257 
258 static struct inode *
cifs_alloc_inode(struct super_block * sb)259 cifs_alloc_inode(struct super_block *sb)
260 {
261 	struct cifsInodeInfo *cifs_inode;
262 	cifs_inode = kmem_cache_alloc(cifs_inode_cachep, GFP_KERNEL);
263 	if (!cifs_inode)
264 		return NULL;
265 	cifs_inode->cifsAttrs = 0x20;	/* default */
266 	cifs_inode->time = 0;
267 	/*
268 	 * Until the file is open and we have gotten oplock info back from the
269 	 * server, can not assume caching of file data or metadata.
270 	 */
271 	cifs_set_oplock_level(cifs_inode, 0);
272 	cifs_inode->flags = 0;
273 	spin_lock_init(&cifs_inode->writers_lock);
274 	cifs_inode->writers = 0;
275 	cifs_inode->vfs_inode.i_blkbits = 14;  /* 2**14 = CIFS_MAX_MSGSIZE */
276 	cifs_inode->server_eof = 0;
277 	cifs_inode->uniqueid = 0;
278 	cifs_inode->createtime = 0;
279 	cifs_inode->epoch = 0;
280 	generate_random_uuid(cifs_inode->lease_key);
281 
282 	/*
283 	 * Can not set i_flags here - they get immediately overwritten to zero
284 	 * by the VFS.
285 	 */
286 	/* cifs_inode->vfs_inode.i_flags = S_NOATIME | S_NOCMTIME; */
287 	INIT_LIST_HEAD(&cifs_inode->openFileList);
288 	INIT_LIST_HEAD(&cifs_inode->llist);
289 	return &cifs_inode->vfs_inode;
290 }
291 
cifs_i_callback(struct rcu_head * head)292 static void cifs_i_callback(struct rcu_head *head)
293 {
294 	struct inode *inode = container_of(head, struct inode, i_rcu);
295 	kmem_cache_free(cifs_inode_cachep, CIFS_I(inode));
296 }
297 
298 static void
cifs_destroy_inode(struct inode * inode)299 cifs_destroy_inode(struct inode *inode)
300 {
301 	call_rcu(&inode->i_rcu, cifs_i_callback);
302 }
303 
304 static void
cifs_evict_inode(struct inode * inode)305 cifs_evict_inode(struct inode *inode)
306 {
307 	truncate_inode_pages_final(&inode->i_data);
308 	clear_inode(inode);
309 	cifs_fscache_release_inode_cookie(inode);
310 }
311 
312 static void
cifs_show_address(struct seq_file * s,struct TCP_Server_Info * server)313 cifs_show_address(struct seq_file *s, struct TCP_Server_Info *server)
314 {
315 	struct sockaddr_in *sa = (struct sockaddr_in *) &server->dstaddr;
316 	struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) &server->dstaddr;
317 
318 	seq_puts(s, ",addr=");
319 
320 	switch (server->dstaddr.ss_family) {
321 	case AF_INET:
322 		seq_printf(s, "%pI4", &sa->sin_addr.s_addr);
323 		break;
324 	case AF_INET6:
325 		seq_printf(s, "%pI6", &sa6->sin6_addr.s6_addr);
326 		if (sa6->sin6_scope_id)
327 			seq_printf(s, "%%%u", sa6->sin6_scope_id);
328 		break;
329 	default:
330 		seq_puts(s, "(unknown)");
331 	}
332 }
333 
334 static void
cifs_show_security(struct seq_file * s,struct cifs_ses * ses)335 cifs_show_security(struct seq_file *s, struct cifs_ses *ses)
336 {
337 	if (ses->sectype == Unspecified) {
338 		if (ses->user_name == NULL)
339 			seq_puts(s, ",sec=none");
340 		return;
341 	}
342 
343 	seq_puts(s, ",sec=");
344 
345 	switch (ses->sectype) {
346 	case LANMAN:
347 		seq_puts(s, "lanman");
348 		break;
349 	case NTLMv2:
350 		seq_puts(s, "ntlmv2");
351 		break;
352 	case NTLM:
353 		seq_puts(s, "ntlm");
354 		break;
355 	case Kerberos:
356 		seq_puts(s, "krb5");
357 		break;
358 	case RawNTLMSSP:
359 		seq_puts(s, "ntlmssp");
360 		break;
361 	default:
362 		/* shouldn't ever happen */
363 		seq_puts(s, "unknown");
364 		break;
365 	}
366 
367 	if (ses->sign)
368 		seq_puts(s, "i");
369 }
370 
371 static void
cifs_show_cache_flavor(struct seq_file * s,struct cifs_sb_info * cifs_sb)372 cifs_show_cache_flavor(struct seq_file *s, struct cifs_sb_info *cifs_sb)
373 {
374 	seq_puts(s, ",cache=");
375 
376 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
377 		seq_puts(s, "strict");
378 	else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
379 		seq_puts(s, "none");
380 	else
381 		seq_puts(s, "loose");
382 }
383 
384 static void
cifs_show_nls(struct seq_file * s,struct nls_table * cur)385 cifs_show_nls(struct seq_file *s, struct nls_table *cur)
386 {
387 	struct nls_table *def;
388 
389 	/* Display iocharset= option if it's not default charset */
390 	def = load_nls_default();
391 	if (def != cur)
392 		seq_printf(s, ",iocharset=%s", cur->charset);
393 	unload_nls(def);
394 }
395 
396 /*
397  * cifs_show_options() is for displaying mount options in /proc/mounts.
398  * Not all settable options are displayed but most of the important
399  * ones are.
400  */
401 static int
cifs_show_options(struct seq_file * s,struct dentry * root)402 cifs_show_options(struct seq_file *s, struct dentry *root)
403 {
404 	struct cifs_sb_info *cifs_sb = CIFS_SB(root->d_sb);
405 	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
406 	struct sockaddr *srcaddr;
407 	srcaddr = (struct sockaddr *)&tcon->ses->server->srcaddr;
408 
409 	seq_show_option(s, "vers", tcon->ses->server->vals->version_string);
410 	cifs_show_security(s, tcon->ses);
411 	cifs_show_cache_flavor(s, cifs_sb);
412 
413 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER)
414 		seq_puts(s, ",multiuser");
415 	else if (tcon->ses->user_name)
416 		seq_show_option(s, "username", tcon->ses->user_name);
417 
418 	if (tcon->ses->domainName)
419 		seq_show_option(s, "domain", tcon->ses->domainName);
420 
421 	if (srcaddr->sa_family != AF_UNSPEC) {
422 		struct sockaddr_in *saddr4;
423 		struct sockaddr_in6 *saddr6;
424 		saddr4 = (struct sockaddr_in *)srcaddr;
425 		saddr6 = (struct sockaddr_in6 *)srcaddr;
426 		if (srcaddr->sa_family == AF_INET6)
427 			seq_printf(s, ",srcaddr=%pI6c",
428 				   &saddr6->sin6_addr);
429 		else if (srcaddr->sa_family == AF_INET)
430 			seq_printf(s, ",srcaddr=%pI4",
431 				   &saddr4->sin_addr.s_addr);
432 		else
433 			seq_printf(s, ",srcaddr=BAD-AF:%i",
434 				   (int)(srcaddr->sa_family));
435 	}
436 
437 	seq_printf(s, ",uid=%u",
438 		   from_kuid_munged(&init_user_ns, cifs_sb->mnt_uid));
439 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID)
440 		seq_puts(s, ",forceuid");
441 	else
442 		seq_puts(s, ",noforceuid");
443 
444 	seq_printf(s, ",gid=%u",
445 		   from_kgid_munged(&init_user_ns, cifs_sb->mnt_gid));
446 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID)
447 		seq_puts(s, ",forcegid");
448 	else
449 		seq_puts(s, ",noforcegid");
450 
451 	cifs_show_address(s, tcon->ses->server);
452 
453 	if (!tcon->unix_ext)
454 		seq_printf(s, ",file_mode=0%ho,dir_mode=0%ho",
455 					   cifs_sb->mnt_file_mode,
456 					   cifs_sb->mnt_dir_mode);
457 
458 	cifs_show_nls(s, cifs_sb->local_nls);
459 
460 	if (tcon->seal)
461 		seq_puts(s, ",seal");
462 	if (tcon->nocase)
463 		seq_puts(s, ",nocase");
464 	if (tcon->retry)
465 		seq_puts(s, ",hard");
466 	else
467 		seq_puts(s, ",soft");
468 	if (tcon->use_persistent)
469 		seq_puts(s, ",persistenthandles");
470 	else if (tcon->use_resilient)
471 		seq_puts(s, ",resilienthandles");
472 	if (tcon->unix_ext)
473 		seq_puts(s, ",unix");
474 	else
475 		seq_puts(s, ",nounix");
476 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
477 		seq_puts(s, ",posixpaths");
478 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)
479 		seq_puts(s, ",setuids");
480 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UID_FROM_ACL)
481 		seq_puts(s, ",idsfromsid");
482 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)
483 		seq_puts(s, ",serverino");
484 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
485 		seq_puts(s, ",rwpidforward");
486 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL)
487 		seq_puts(s, ",forcemand");
488 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)
489 		seq_puts(s, ",nouser_xattr");
490 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR)
491 		seq_puts(s, ",mapchars");
492 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SFM_CHR)
493 		seq_puts(s, ",mapposix");
494 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)
495 		seq_puts(s, ",sfu");
496 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
497 		seq_puts(s, ",nobrl");
498 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL)
499 		seq_puts(s, ",cifsacl");
500 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)
501 		seq_puts(s, ",dynperm");
502 	if (root->d_sb->s_flags & MS_POSIXACL)
503 		seq_puts(s, ",acl");
504 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MF_SYMLINKS)
505 		seq_puts(s, ",mfsymlinks");
506 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_FSCACHE)
507 		seq_puts(s, ",fsc");
508 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)
509 		seq_puts(s, ",nostrictsync");
510 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM)
511 		seq_puts(s, ",noperm");
512 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_BACKUPUID)
513 		seq_printf(s, ",backupuid=%u",
514 			   from_kuid_munged(&init_user_ns,
515 					    cifs_sb->mnt_backupuid));
516 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_BACKUPGID)
517 		seq_printf(s, ",backupgid=%u",
518 			   from_kgid_munged(&init_user_ns,
519 					    cifs_sb->mnt_backupgid));
520 
521 	seq_printf(s, ",rsize=%u", cifs_sb->rsize);
522 	seq_printf(s, ",wsize=%u", cifs_sb->wsize);
523 	seq_printf(s, ",echo_interval=%lu",
524 			tcon->ses->server->echo_interval / HZ);
525 	/* convert actimeo and display it in seconds */
526 	seq_printf(s, ",actimeo=%lu", cifs_sb->actimeo / HZ);
527 
528 	return 0;
529 }
530 
cifs_umount_begin(struct super_block * sb)531 static void cifs_umount_begin(struct super_block *sb)
532 {
533 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
534 	struct cifs_tcon *tcon;
535 
536 	if (cifs_sb == NULL)
537 		return;
538 
539 	tcon = cifs_sb_master_tcon(cifs_sb);
540 
541 	spin_lock(&cifs_tcp_ses_lock);
542 	if ((tcon->tc_count > 1) || (tcon->tidStatus == CifsExiting)) {
543 		/* we have other mounts to same share or we have
544 		   already tried to force umount this and woken up
545 		   all waiting network requests, nothing to do */
546 		spin_unlock(&cifs_tcp_ses_lock);
547 		return;
548 	} else if (tcon->tc_count == 1)
549 		tcon->tidStatus = CifsExiting;
550 	spin_unlock(&cifs_tcp_ses_lock);
551 
552 	/* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */
553 	/* cancel_notify_requests(tcon); */
554 	if (tcon->ses && tcon->ses->server) {
555 		cifs_dbg(FYI, "wake up tasks now - umount begin not complete\n");
556 		wake_up_all(&tcon->ses->server->request_q);
557 		wake_up_all(&tcon->ses->server->response_q);
558 		msleep(1); /* yield */
559 		/* we have to kick the requests once more */
560 		wake_up_all(&tcon->ses->server->response_q);
561 		msleep(1);
562 	}
563 
564 	return;
565 }
566 
567 #ifdef CONFIG_CIFS_STATS2
cifs_show_stats(struct seq_file * s,struct dentry * root)568 static int cifs_show_stats(struct seq_file *s, struct dentry *root)
569 {
570 	/* BB FIXME */
571 	return 0;
572 }
573 #endif
574 
cifs_remount(struct super_block * sb,int * flags,char * data)575 static int cifs_remount(struct super_block *sb, int *flags, char *data)
576 {
577 	sync_filesystem(sb);
578 	*flags |= MS_NODIRATIME;
579 	return 0;
580 }
581 
cifs_drop_inode(struct inode * inode)582 static int cifs_drop_inode(struct inode *inode)
583 {
584 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
585 
586 	/* no serverino => unconditional eviction */
587 	return !(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) ||
588 		generic_drop_inode(inode);
589 }
590 
591 static const struct super_operations cifs_super_ops = {
592 	.statfs = cifs_statfs,
593 	.alloc_inode = cifs_alloc_inode,
594 	.destroy_inode = cifs_destroy_inode,
595 	.drop_inode	= cifs_drop_inode,
596 	.evict_inode	= cifs_evict_inode,
597 /*	.delete_inode	= cifs_delete_inode,  */  /* Do not need above
598 	function unless later we add lazy close of inodes or unless the
599 	kernel forgets to call us with the same number of releases (closes)
600 	as opens */
601 	.show_options = cifs_show_options,
602 	.umount_begin   = cifs_umount_begin,
603 	.remount_fs = cifs_remount,
604 #ifdef CONFIG_CIFS_STATS2
605 	.show_stats = cifs_show_stats,
606 #endif
607 };
608 
609 /*
610  * Get root dentry from superblock according to prefix path mount option.
611  * Return dentry with refcount + 1 on success and NULL otherwise.
612  */
613 static struct dentry *
cifs_get_root(struct smb_vol * vol,struct super_block * sb)614 cifs_get_root(struct smb_vol *vol, struct super_block *sb)
615 {
616 	struct dentry *dentry;
617 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
618 	char *full_path = NULL;
619 	char *s, *p;
620 	char sep;
621 
622 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH)
623 		return dget(sb->s_root);
624 
625 	full_path = cifs_build_path_to_root(vol, cifs_sb,
626 				cifs_sb_master_tcon(cifs_sb), 0);
627 	if (full_path == NULL)
628 		return ERR_PTR(-ENOMEM);
629 
630 	cifs_dbg(FYI, "Get root dentry for %s\n", full_path);
631 
632 	sep = CIFS_DIR_SEP(cifs_sb);
633 	dentry = dget(sb->s_root);
634 	p = s = full_path;
635 
636 	do {
637 		struct inode *dir = d_inode(dentry);
638 		struct dentry *child;
639 
640 		if (!dir) {
641 			dput(dentry);
642 			dentry = ERR_PTR(-ENOENT);
643 			break;
644 		}
645 		if (!S_ISDIR(dir->i_mode)) {
646 			dput(dentry);
647 			dentry = ERR_PTR(-ENOTDIR);
648 			break;
649 		}
650 
651 		/* skip separators */
652 		while (*s == sep)
653 			s++;
654 		if (!*s)
655 			break;
656 		p = s++;
657 		/* next separator */
658 		while (*s && *s != sep)
659 			s++;
660 
661 		child = lookup_one_len_unlocked(p, dentry, s - p);
662 		dput(dentry);
663 		dentry = child;
664 	} while (!IS_ERR(dentry));
665 	kfree(full_path);
666 	return dentry;
667 }
668 
cifs_set_super(struct super_block * sb,void * data)669 static int cifs_set_super(struct super_block *sb, void *data)
670 {
671 	struct cifs_mnt_data *mnt_data = data;
672 	sb->s_fs_info = mnt_data->cifs_sb;
673 	return set_anon_super(sb, NULL);
674 }
675 
676 static struct dentry *
cifs_do_mount(struct file_system_type * fs_type,int flags,const char * dev_name,void * data)677 cifs_do_mount(struct file_system_type *fs_type,
678 	      int flags, const char *dev_name, void *data)
679 {
680 	int rc;
681 	struct super_block *sb;
682 	struct cifs_sb_info *cifs_sb;
683 	struct smb_vol *volume_info;
684 	struct cifs_mnt_data mnt_data;
685 	struct dentry *root;
686 
687 	cifs_dbg(FYI, "Devname: %s flags: %d\n", dev_name, flags);
688 
689 	volume_info = cifs_get_volume_info((char *)data, dev_name);
690 	if (IS_ERR(volume_info))
691 		return ERR_CAST(volume_info);
692 
693 	cifs_sb = kzalloc(sizeof(struct cifs_sb_info), GFP_KERNEL);
694 	if (cifs_sb == NULL) {
695 		root = ERR_PTR(-ENOMEM);
696 		goto out_nls;
697 	}
698 
699 	cifs_sb->mountdata = kstrndup(data, PAGE_SIZE, GFP_KERNEL);
700 	if (cifs_sb->mountdata == NULL) {
701 		root = ERR_PTR(-ENOMEM);
702 		goto out_free;
703 	}
704 
705 	rc = cifs_setup_cifs_sb(volume_info, cifs_sb);
706 	if (rc) {
707 		root = ERR_PTR(rc);
708 		goto out_free;
709 	}
710 
711 	rc = cifs_mount(cifs_sb, volume_info);
712 	if (rc) {
713 		if (!(flags & MS_SILENT))
714 			cifs_dbg(VFS, "cifs_mount failed w/return code = %d\n",
715 				 rc);
716 		root = ERR_PTR(rc);
717 		goto out_free;
718 	}
719 
720 	mnt_data.vol = volume_info;
721 	mnt_data.cifs_sb = cifs_sb;
722 	mnt_data.flags = flags;
723 
724 	/* BB should we make this contingent on mount parm? */
725 	flags |= MS_NODIRATIME | MS_NOATIME;
726 
727 	sb = sget(fs_type, cifs_match_super, cifs_set_super, flags, &mnt_data);
728 	if (IS_ERR(sb)) {
729 		root = ERR_CAST(sb);
730 		cifs_umount(cifs_sb);
731 		goto out;
732 	}
733 
734 	if (sb->s_root) {
735 		cifs_dbg(FYI, "Use existing superblock\n");
736 		cifs_umount(cifs_sb);
737 	} else {
738 		rc = cifs_read_super(sb);
739 		if (rc) {
740 			root = ERR_PTR(rc);
741 			goto out_super;
742 		}
743 
744 		sb->s_flags |= MS_ACTIVE;
745 	}
746 
747 	root = cifs_get_root(volume_info, sb);
748 	if (IS_ERR(root))
749 		goto out_super;
750 
751 	cifs_dbg(FYI, "dentry root is: %p\n", root);
752 	goto out;
753 
754 out_super:
755 	deactivate_locked_super(sb);
756 out:
757 	cifs_cleanup_volume_info(volume_info);
758 	return root;
759 
760 out_free:
761 	kfree(cifs_sb->prepath);
762 	kfree(cifs_sb->mountdata);
763 	kfree(cifs_sb);
764 out_nls:
765 	unload_nls(volume_info->local_nls);
766 	goto out;
767 }
768 
769 static ssize_t
cifs_loose_read_iter(struct kiocb * iocb,struct iov_iter * iter)770 cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter)
771 {
772 	ssize_t rc;
773 	struct inode *inode = file_inode(iocb->ki_filp);
774 
775 	if (iocb->ki_filp->f_flags & O_DIRECT)
776 		return cifs_user_readv(iocb, iter);
777 
778 	rc = cifs_revalidate_mapping(inode);
779 	if (rc)
780 		return rc;
781 
782 	return generic_file_read_iter(iocb, iter);
783 }
784 
cifs_file_write_iter(struct kiocb * iocb,struct iov_iter * from)785 static ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
786 {
787 	struct inode *inode = file_inode(iocb->ki_filp);
788 	struct cifsInodeInfo *cinode = CIFS_I(inode);
789 	ssize_t written;
790 	int rc;
791 
792 	if (iocb->ki_filp->f_flags & O_DIRECT) {
793 		written = cifs_user_writev(iocb, from);
794 		if (written > 0 && CIFS_CACHE_READ(cinode)) {
795 			cifs_zap_mapping(inode);
796 			cifs_dbg(FYI,
797 				 "Set no oplock for inode=%p after a write operation\n",
798 				 inode);
799 			cinode->oplock = 0;
800 		}
801 		return written;
802 	}
803 
804 	written = cifs_get_writer(cinode);
805 	if (written)
806 		return written;
807 
808 	written = generic_file_write_iter(iocb, from);
809 
810 	if (CIFS_CACHE_WRITE(CIFS_I(inode)))
811 		goto out;
812 
813 	rc = filemap_fdatawrite(inode->i_mapping);
814 	if (rc)
815 		cifs_dbg(FYI, "cifs_file_write_iter: %d rc on %p inode\n",
816 			 rc, inode);
817 
818 out:
819 	cifs_put_writer(cinode);
820 	return written;
821 }
822 
cifs_llseek(struct file * file,loff_t offset,int whence)823 static loff_t cifs_llseek(struct file *file, loff_t offset, int whence)
824 {
825 	/*
826 	 * whence == SEEK_END || SEEK_DATA || SEEK_HOLE => we must revalidate
827 	 * the cached file length
828 	 */
829 	if (whence != SEEK_SET && whence != SEEK_CUR) {
830 		int rc;
831 		struct inode *inode = file_inode(file);
832 
833 		/*
834 		 * We need to be sure that all dirty pages are written and the
835 		 * server has the newest file length.
836 		 */
837 		if (!CIFS_CACHE_READ(CIFS_I(inode)) && inode->i_mapping &&
838 		    inode->i_mapping->nrpages != 0) {
839 			rc = filemap_fdatawait(inode->i_mapping);
840 			if (rc) {
841 				mapping_set_error(inode->i_mapping, rc);
842 				return rc;
843 			}
844 		}
845 		/*
846 		 * Some applications poll for the file length in this strange
847 		 * way so we must seek to end on non-oplocked files by
848 		 * setting the revalidate time to zero.
849 		 */
850 		CIFS_I(inode)->time = 0;
851 
852 		rc = cifs_revalidate_file_attr(file);
853 		if (rc < 0)
854 			return (loff_t)rc;
855 	}
856 	return generic_file_llseek(file, offset, whence);
857 }
858 
859 static int
cifs_setlease(struct file * file,long arg,struct file_lock ** lease,void ** priv)860 cifs_setlease(struct file *file, long arg, struct file_lock **lease, void **priv)
861 {
862 	/*
863 	 * Note that this is called by vfs setlease with i_lock held to
864 	 * protect *lease from going away.
865 	 */
866 	struct inode *inode = file_inode(file);
867 	struct cifsFileInfo *cfile = file->private_data;
868 
869 	if (!(S_ISREG(inode->i_mode)))
870 		return -EINVAL;
871 
872 	/* Check if file is oplocked if this is request for new lease */
873 	if (arg == F_UNLCK ||
874 	    ((arg == F_RDLCK) && CIFS_CACHE_READ(CIFS_I(inode))) ||
875 	    ((arg == F_WRLCK) && CIFS_CACHE_WRITE(CIFS_I(inode))))
876 		return generic_setlease(file, arg, lease, priv);
877 	else if (tlink_tcon(cfile->tlink)->local_lease &&
878 		 !CIFS_CACHE_READ(CIFS_I(inode)))
879 		/*
880 		 * If the server claims to support oplock on this file, then we
881 		 * still need to check oplock even if the local_lease mount
882 		 * option is set, but there are servers which do not support
883 		 * oplock for which this mount option may be useful if the user
884 		 * knows that the file won't be changed on the server by anyone
885 		 * else.
886 		 */
887 		return generic_setlease(file, arg, lease, priv);
888 	else
889 		return -EAGAIN;
890 }
891 
892 struct file_system_type cifs_fs_type = {
893 	.owner = THIS_MODULE,
894 	.name = "cifs",
895 	.mount = cifs_do_mount,
896 	.kill_sb = cifs_kill_sb,
897 	/*  .fs_flags */
898 };
899 MODULE_ALIAS_FS("cifs");
900 const struct inode_operations cifs_dir_inode_ops = {
901 	.create = cifs_create,
902 	.atomic_open = cifs_atomic_open,
903 	.lookup = cifs_lookup,
904 	.getattr = cifs_getattr,
905 	.unlink = cifs_unlink,
906 	.link = cifs_hardlink,
907 	.mkdir = cifs_mkdir,
908 	.rmdir = cifs_rmdir,
909 	.rename = cifs_rename2,
910 	.permission = cifs_permission,
911 	.setattr = cifs_setattr,
912 	.symlink = cifs_symlink,
913 	.mknod   = cifs_mknod,
914 	.listxattr = cifs_listxattr,
915 };
916 
917 const struct inode_operations cifs_file_inode_ops = {
918 	.setattr = cifs_setattr,
919 	.getattr = cifs_getattr,
920 	.permission = cifs_permission,
921 	.listxattr = cifs_listxattr,
922 };
923 
924 const struct inode_operations cifs_symlink_inode_ops = {
925 	.get_link = cifs_get_link,
926 	.permission = cifs_permission,
927 	.listxattr = cifs_listxattr,
928 };
929 
cifs_clone_file_range(struct file * src_file,loff_t off,struct file * dst_file,loff_t destoff,u64 len)930 static int cifs_clone_file_range(struct file *src_file, loff_t off,
931 		struct file *dst_file, loff_t destoff, u64 len)
932 {
933 	struct inode *src_inode = file_inode(src_file);
934 	struct inode *target_inode = file_inode(dst_file);
935 	struct cifsFileInfo *smb_file_src = src_file->private_data;
936 	struct cifsFileInfo *smb_file_target;
937 	struct cifs_tcon *target_tcon;
938 	unsigned int xid;
939 	int rc;
940 
941 	cifs_dbg(FYI, "clone range\n");
942 
943 	xid = get_xid();
944 
945 	if (!src_file->private_data || !dst_file->private_data) {
946 		rc = -EBADF;
947 		cifs_dbg(VFS, "missing cifsFileInfo on copy range src file\n");
948 		goto out;
949 	}
950 
951 	smb_file_target = dst_file->private_data;
952 	target_tcon = tlink_tcon(smb_file_target->tlink);
953 
954 	/*
955 	 * Note: cifs case is easier than btrfs since server responsible for
956 	 * checks for proper open modes and file type and if it wants
957 	 * server could even support copy of range where source = target
958 	 */
959 	lock_two_nondirectories(target_inode, src_inode);
960 
961 	if (len == 0)
962 		len = src_inode->i_size - off;
963 
964 	cifs_dbg(FYI, "about to flush pages\n");
965 	/* should we flush first and last page first */
966 	truncate_inode_pages_range(&target_inode->i_data, destoff,
967 				   PAGE_ALIGN(destoff + len)-1);
968 
969 	if (target_tcon->ses->server->ops->duplicate_extents)
970 		rc = target_tcon->ses->server->ops->duplicate_extents(xid,
971 			smb_file_src, smb_file_target, off, len, destoff);
972 	else
973 		rc = -EOPNOTSUPP;
974 
975 	/* force revalidate of size and timestamps of target file now
976 	   that target is updated on the server */
977 	CIFS_I(target_inode)->time = 0;
978 	/* although unlocking in the reverse order from locking is not
979 	   strictly necessary here it is a little cleaner to be consistent */
980 	unlock_two_nondirectories(src_inode, target_inode);
981 out:
982 	free_xid(xid);
983 	return rc;
984 }
985 
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)986 ssize_t cifs_file_copychunk_range(unsigned int xid,
987 				struct file *src_file, loff_t off,
988 				struct file *dst_file, loff_t destoff,
989 				size_t len, unsigned int flags)
990 {
991 	struct inode *src_inode = file_inode(src_file);
992 	struct inode *target_inode = file_inode(dst_file);
993 	struct cifsFileInfo *smb_file_src;
994 	struct cifsFileInfo *smb_file_target;
995 	struct cifs_tcon *src_tcon;
996 	struct cifs_tcon *target_tcon;
997 	ssize_t rc;
998 
999 	cifs_dbg(FYI, "copychunk range\n");
1000 
1001 	if (src_inode == target_inode) {
1002 		rc = -EINVAL;
1003 		goto out;
1004 	}
1005 
1006 	if (!src_file->private_data || !dst_file->private_data) {
1007 		rc = -EBADF;
1008 		cifs_dbg(VFS, "missing cifsFileInfo on copy range src file\n");
1009 		goto out;
1010 	}
1011 
1012 	rc = -EXDEV;
1013 	smb_file_target = dst_file->private_data;
1014 	smb_file_src = src_file->private_data;
1015 	src_tcon = tlink_tcon(smb_file_src->tlink);
1016 	target_tcon = tlink_tcon(smb_file_target->tlink);
1017 
1018 	if (src_tcon->ses != target_tcon->ses) {
1019 		cifs_dbg(VFS, "source and target of copy not on same server\n");
1020 		goto out;
1021 	}
1022 
1023 	/*
1024 	 * Note: cifs case is easier than btrfs since server responsible for
1025 	 * checks for proper open modes and file type and if it wants
1026 	 * server could even support copy of range where source = target
1027 	 */
1028 	lock_two_nondirectories(target_inode, src_inode);
1029 
1030 	cifs_dbg(FYI, "about to flush pages\n");
1031 	/* should we flush first and last page first */
1032 	truncate_inode_pages(&target_inode->i_data, 0);
1033 
1034 	if (target_tcon->ses->server->ops->copychunk_range)
1035 		rc = target_tcon->ses->server->ops->copychunk_range(xid,
1036 			smb_file_src, smb_file_target, off, len, destoff);
1037 	else
1038 		rc = -EOPNOTSUPP;
1039 
1040 	/* force revalidate of size and timestamps of target file now
1041 	 * that target is updated on the server
1042 	 */
1043 	CIFS_I(target_inode)->time = 0;
1044 	/* although unlocking in the reverse order from locking is not
1045 	 * strictly necessary here it is a little cleaner to be consistent
1046 	 */
1047 	unlock_two_nondirectories(src_inode, target_inode);
1048 
1049 out:
1050 	return rc;
1051 }
1052 
1053 /*
1054  * Directory operations under CIFS/SMB2/SMB3 are synchronous, so fsync()
1055  * is a dummy operation.
1056  */
cifs_dir_fsync(struct file * file,loff_t start,loff_t end,int datasync)1057 static int cifs_dir_fsync(struct file *file, loff_t start, loff_t end, int datasync)
1058 {
1059 	cifs_dbg(FYI, "Sync directory - name: %pD datasync: 0x%x\n",
1060 		 file, datasync);
1061 
1062 	return 0;
1063 }
1064 
cifs_copy_file_range(struct file * src_file,loff_t off,struct file * dst_file,loff_t destoff,size_t len,unsigned int flags)1065 static ssize_t cifs_copy_file_range(struct file *src_file, loff_t off,
1066 				struct file *dst_file, loff_t destoff,
1067 				size_t len, unsigned int flags)
1068 {
1069 	unsigned int xid = get_xid();
1070 	ssize_t rc;
1071 
1072 	rc = cifs_file_copychunk_range(xid, src_file, off, dst_file, destoff,
1073 					len, flags);
1074 	free_xid(xid);
1075 	return rc;
1076 }
1077 
1078 const struct file_operations cifs_file_ops = {
1079 	.read_iter = cifs_loose_read_iter,
1080 	.write_iter = cifs_file_write_iter,
1081 	.open = cifs_open,
1082 	.release = cifs_close,
1083 	.lock = cifs_lock,
1084 	.fsync = cifs_fsync,
1085 	.flush = cifs_flush,
1086 	.mmap  = cifs_file_mmap,
1087 	.splice_read = generic_file_splice_read,
1088 	.llseek = cifs_llseek,
1089 	.unlocked_ioctl	= cifs_ioctl,
1090 	.copy_file_range = cifs_copy_file_range,
1091 	.clone_file_range = cifs_clone_file_range,
1092 	.setlease = cifs_setlease,
1093 	.fallocate = cifs_fallocate,
1094 };
1095 
1096 const struct file_operations cifs_file_strict_ops = {
1097 	.read_iter = cifs_strict_readv,
1098 	.write_iter = cifs_strict_writev,
1099 	.open = cifs_open,
1100 	.release = cifs_close,
1101 	.lock = cifs_lock,
1102 	.fsync = cifs_strict_fsync,
1103 	.flush = cifs_flush,
1104 	.mmap = cifs_file_strict_mmap,
1105 	.splice_read = generic_file_splice_read,
1106 	.llseek = cifs_llseek,
1107 	.unlocked_ioctl	= cifs_ioctl,
1108 	.copy_file_range = cifs_copy_file_range,
1109 	.clone_file_range = cifs_clone_file_range,
1110 	.setlease = cifs_setlease,
1111 	.fallocate = cifs_fallocate,
1112 };
1113 
1114 const struct file_operations cifs_file_direct_ops = {
1115 	/* BB reevaluate whether they can be done with directio, no cache */
1116 	.read_iter = cifs_user_readv,
1117 	.write_iter = cifs_user_writev,
1118 	.open = cifs_open,
1119 	.release = cifs_close,
1120 	.lock = cifs_lock,
1121 	.fsync = cifs_fsync,
1122 	.flush = cifs_flush,
1123 	.mmap = cifs_file_mmap,
1124 	.splice_read = generic_file_splice_read,
1125 	.unlocked_ioctl  = cifs_ioctl,
1126 	.copy_file_range = cifs_copy_file_range,
1127 	.clone_file_range = cifs_clone_file_range,
1128 	.llseek = cifs_llseek,
1129 	.setlease = cifs_setlease,
1130 	.fallocate = cifs_fallocate,
1131 };
1132 
1133 const struct file_operations cifs_file_nobrl_ops = {
1134 	.read_iter = cifs_loose_read_iter,
1135 	.write_iter = cifs_file_write_iter,
1136 	.open = cifs_open,
1137 	.release = cifs_close,
1138 	.fsync = cifs_fsync,
1139 	.flush = cifs_flush,
1140 	.mmap  = cifs_file_mmap,
1141 	.splice_read = generic_file_splice_read,
1142 	.llseek = cifs_llseek,
1143 	.unlocked_ioctl	= cifs_ioctl,
1144 	.copy_file_range = cifs_copy_file_range,
1145 	.clone_file_range = cifs_clone_file_range,
1146 	.setlease = cifs_setlease,
1147 	.fallocate = cifs_fallocate,
1148 };
1149 
1150 const struct file_operations cifs_file_strict_nobrl_ops = {
1151 	.read_iter = cifs_strict_readv,
1152 	.write_iter = cifs_strict_writev,
1153 	.open = cifs_open,
1154 	.release = cifs_close,
1155 	.fsync = cifs_strict_fsync,
1156 	.flush = cifs_flush,
1157 	.mmap = cifs_file_strict_mmap,
1158 	.splice_read = generic_file_splice_read,
1159 	.llseek = cifs_llseek,
1160 	.unlocked_ioctl	= cifs_ioctl,
1161 	.copy_file_range = cifs_copy_file_range,
1162 	.clone_file_range = cifs_clone_file_range,
1163 	.setlease = cifs_setlease,
1164 	.fallocate = cifs_fallocate,
1165 };
1166 
1167 const struct file_operations cifs_file_direct_nobrl_ops = {
1168 	/* BB reevaluate whether they can be done with directio, no cache */
1169 	.read_iter = cifs_user_readv,
1170 	.write_iter = cifs_user_writev,
1171 	.open = cifs_open,
1172 	.release = cifs_close,
1173 	.fsync = cifs_fsync,
1174 	.flush = cifs_flush,
1175 	.mmap = cifs_file_mmap,
1176 	.splice_read = generic_file_splice_read,
1177 	.unlocked_ioctl  = cifs_ioctl,
1178 	.copy_file_range = cifs_copy_file_range,
1179 	.clone_file_range = cifs_clone_file_range,
1180 	.llseek = cifs_llseek,
1181 	.setlease = cifs_setlease,
1182 	.fallocate = cifs_fallocate,
1183 };
1184 
1185 const struct file_operations cifs_dir_ops = {
1186 	.iterate_shared = cifs_readdir,
1187 	.release = cifs_closedir,
1188 	.read    = generic_read_dir,
1189 	.unlocked_ioctl  = cifs_ioctl,
1190 	.copy_file_range = cifs_copy_file_range,
1191 	.clone_file_range = cifs_clone_file_range,
1192 	.llseek = generic_file_llseek,
1193 	.fsync = cifs_dir_fsync,
1194 };
1195 
1196 static void
cifs_init_once(void * inode)1197 cifs_init_once(void *inode)
1198 {
1199 	struct cifsInodeInfo *cifsi = inode;
1200 
1201 	inode_init_once(&cifsi->vfs_inode);
1202 	init_rwsem(&cifsi->lock_sem);
1203 }
1204 
1205 static int __init
cifs_init_inodecache(void)1206 cifs_init_inodecache(void)
1207 {
1208 	cifs_inode_cachep = kmem_cache_create("cifs_inode_cache",
1209 					      sizeof(struct cifsInodeInfo),
1210 					      0, (SLAB_RECLAIM_ACCOUNT|
1211 						SLAB_MEM_SPREAD|SLAB_ACCOUNT),
1212 					      cifs_init_once);
1213 	if (cifs_inode_cachep == NULL)
1214 		return -ENOMEM;
1215 
1216 	return 0;
1217 }
1218 
1219 static void
cifs_destroy_inodecache(void)1220 cifs_destroy_inodecache(void)
1221 {
1222 	/*
1223 	 * Make sure all delayed rcu free inodes are flushed before we
1224 	 * destroy cache.
1225 	 */
1226 	rcu_barrier();
1227 	kmem_cache_destroy(cifs_inode_cachep);
1228 }
1229 
1230 static int
cifs_init_request_bufs(void)1231 cifs_init_request_bufs(void)
1232 {
1233 	/*
1234 	 * SMB2 maximum header size is bigger than CIFS one - no problems to
1235 	 * allocate some more bytes for CIFS.
1236 	 */
1237 	size_t max_hdr_size = MAX_SMB2_HDR_SIZE;
1238 
1239 	if (CIFSMaxBufSize < 8192) {
1240 	/* Buffer size can not be smaller than 2 * PATH_MAX since maximum
1241 	Unicode path name has to fit in any SMB/CIFS path based frames */
1242 		CIFSMaxBufSize = 8192;
1243 	} else if (CIFSMaxBufSize > 1024*127) {
1244 		CIFSMaxBufSize = 1024 * 127;
1245 	} else {
1246 		CIFSMaxBufSize &= 0x1FE00; /* Round size to even 512 byte mult*/
1247 	}
1248 /*
1249 	cifs_dbg(VFS, "CIFSMaxBufSize %d 0x%x\n",
1250 		 CIFSMaxBufSize, CIFSMaxBufSize);
1251 */
1252 	cifs_req_cachep = kmem_cache_create("cifs_request",
1253 					    CIFSMaxBufSize + max_hdr_size, 0,
1254 					    SLAB_HWCACHE_ALIGN, NULL);
1255 	if (cifs_req_cachep == NULL)
1256 		return -ENOMEM;
1257 
1258 	if (cifs_min_rcv < 1)
1259 		cifs_min_rcv = 1;
1260 	else if (cifs_min_rcv > 64) {
1261 		cifs_min_rcv = 64;
1262 		cifs_dbg(VFS, "cifs_min_rcv set to maximum (64)\n");
1263 	}
1264 
1265 	cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
1266 						  cifs_req_cachep);
1267 
1268 	if (cifs_req_poolp == NULL) {
1269 		kmem_cache_destroy(cifs_req_cachep);
1270 		return -ENOMEM;
1271 	}
1272 	/* MAX_CIFS_SMALL_BUFFER_SIZE bytes is enough for most SMB responses and
1273 	almost all handle based requests (but not write response, nor is it
1274 	sufficient for path based requests).  A smaller size would have
1275 	been more efficient (compacting multiple slab items on one 4k page)
1276 	for the case in which debug was on, but this larger size allows
1277 	more SMBs to use small buffer alloc and is still much more
1278 	efficient to alloc 1 per page off the slab compared to 17K (5page)
1279 	alloc of large cifs buffers even when page debugging is on */
1280 	cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq",
1281 			MAX_CIFS_SMALL_BUFFER_SIZE, 0, SLAB_HWCACHE_ALIGN,
1282 			NULL);
1283 	if (cifs_sm_req_cachep == NULL) {
1284 		mempool_destroy(cifs_req_poolp);
1285 		kmem_cache_destroy(cifs_req_cachep);
1286 		return -ENOMEM;
1287 	}
1288 
1289 	if (cifs_min_small < 2)
1290 		cifs_min_small = 2;
1291 	else if (cifs_min_small > 256) {
1292 		cifs_min_small = 256;
1293 		cifs_dbg(FYI, "cifs_min_small set to maximum (256)\n");
1294 	}
1295 
1296 	cifs_sm_req_poolp = mempool_create_slab_pool(cifs_min_small,
1297 						     cifs_sm_req_cachep);
1298 
1299 	if (cifs_sm_req_poolp == NULL) {
1300 		mempool_destroy(cifs_req_poolp);
1301 		kmem_cache_destroy(cifs_req_cachep);
1302 		kmem_cache_destroy(cifs_sm_req_cachep);
1303 		return -ENOMEM;
1304 	}
1305 
1306 	return 0;
1307 }
1308 
1309 static void
cifs_destroy_request_bufs(void)1310 cifs_destroy_request_bufs(void)
1311 {
1312 	mempool_destroy(cifs_req_poolp);
1313 	kmem_cache_destroy(cifs_req_cachep);
1314 	mempool_destroy(cifs_sm_req_poolp);
1315 	kmem_cache_destroy(cifs_sm_req_cachep);
1316 }
1317 
1318 static int
cifs_init_mids(void)1319 cifs_init_mids(void)
1320 {
1321 	cifs_mid_cachep = kmem_cache_create("cifs_mpx_ids",
1322 					    sizeof(struct mid_q_entry), 0,
1323 					    SLAB_HWCACHE_ALIGN, NULL);
1324 	if (cifs_mid_cachep == NULL)
1325 		return -ENOMEM;
1326 
1327 	/* 3 is a reasonable minimum number of simultaneous operations */
1328 	cifs_mid_poolp = mempool_create_slab_pool(3, cifs_mid_cachep);
1329 	if (cifs_mid_poolp == NULL) {
1330 		kmem_cache_destroy(cifs_mid_cachep);
1331 		return -ENOMEM;
1332 	}
1333 
1334 	return 0;
1335 }
1336 
1337 static void
cifs_destroy_mids(void)1338 cifs_destroy_mids(void)
1339 {
1340 	mempool_destroy(cifs_mid_poolp);
1341 	kmem_cache_destroy(cifs_mid_cachep);
1342 }
1343 
1344 static int __init
init_cifs(void)1345 init_cifs(void)
1346 {
1347 	int rc = 0;
1348 	cifs_proc_init();
1349 	INIT_LIST_HEAD(&cifs_tcp_ses_list);
1350 #ifdef CONFIG_CIFS_DNOTIFY_EXPERIMENTAL /* unused temporarily */
1351 	INIT_LIST_HEAD(&GlobalDnotifyReqList);
1352 	INIT_LIST_HEAD(&GlobalDnotifyRsp_Q);
1353 #endif /* was needed for dnotify, and will be needed for inotify when VFS fix */
1354 /*
1355  *  Initialize Global counters
1356  */
1357 	atomic_set(&sesInfoAllocCount, 0);
1358 	atomic_set(&tconInfoAllocCount, 0);
1359 	atomic_set(&tcpSesAllocCount, 0);
1360 	atomic_set(&tcpSesReconnectCount, 0);
1361 	atomic_set(&tconInfoReconnectCount, 0);
1362 
1363 	atomic_set(&bufAllocCount, 0);
1364 	atomic_set(&smBufAllocCount, 0);
1365 #ifdef CONFIG_CIFS_STATS2
1366 	atomic_set(&totBufAllocCount, 0);
1367 	atomic_set(&totSmBufAllocCount, 0);
1368 #endif /* CONFIG_CIFS_STATS2 */
1369 
1370 	atomic_set(&midCount, 0);
1371 	GlobalCurrentXid = 0;
1372 	GlobalTotalActiveXid = 0;
1373 	GlobalMaxActiveXid = 0;
1374 	spin_lock_init(&cifs_tcp_ses_lock);
1375 	spin_lock_init(&GlobalMid_Lock);
1376 
1377 	cifs_lock_secret = get_random_u32();
1378 
1379 	if (cifs_max_pending < 2) {
1380 		cifs_max_pending = 2;
1381 		cifs_dbg(FYI, "cifs_max_pending set to min of 2\n");
1382 	} else if (cifs_max_pending > CIFS_MAX_REQ) {
1383 		cifs_max_pending = CIFS_MAX_REQ;
1384 		cifs_dbg(FYI, "cifs_max_pending set to max of %u\n",
1385 			 CIFS_MAX_REQ);
1386 	}
1387 
1388 	cifsiod_wq = alloc_workqueue("cifsiod", WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1389 	if (!cifsiod_wq) {
1390 		rc = -ENOMEM;
1391 		goto out_clean_proc;
1392 	}
1393 
1394 	cifsoplockd_wq = alloc_workqueue("cifsoplockd",
1395 					 WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1396 	if (!cifsoplockd_wq) {
1397 		rc = -ENOMEM;
1398 		goto out_destroy_cifsiod_wq;
1399 	}
1400 
1401 	rc = cifs_fscache_register();
1402 	if (rc)
1403 		goto out_destroy_cifsoplockd_wq;
1404 
1405 	rc = cifs_init_inodecache();
1406 	if (rc)
1407 		goto out_unreg_fscache;
1408 
1409 	rc = cifs_init_mids();
1410 	if (rc)
1411 		goto out_destroy_inodecache;
1412 
1413 	rc = cifs_init_request_bufs();
1414 	if (rc)
1415 		goto out_destroy_mids;
1416 
1417 #ifdef CONFIG_CIFS_UPCALL
1418 	rc = init_cifs_spnego();
1419 	if (rc)
1420 		goto out_destroy_request_bufs;
1421 #endif /* CONFIG_CIFS_UPCALL */
1422 
1423 #ifdef CONFIG_CIFS_ACL
1424 	rc = init_cifs_idmap();
1425 	if (rc)
1426 		goto out_register_key_type;
1427 #endif /* CONFIG_CIFS_ACL */
1428 
1429 	rc = register_filesystem(&cifs_fs_type);
1430 	if (rc)
1431 		goto out_init_cifs_idmap;
1432 
1433 	return 0;
1434 
1435 out_init_cifs_idmap:
1436 #ifdef CONFIG_CIFS_ACL
1437 	exit_cifs_idmap();
1438 out_register_key_type:
1439 #endif
1440 #ifdef CONFIG_CIFS_UPCALL
1441 	exit_cifs_spnego();
1442 out_destroy_request_bufs:
1443 #endif
1444 	cifs_destroy_request_bufs();
1445 out_destroy_mids:
1446 	cifs_destroy_mids();
1447 out_destroy_inodecache:
1448 	cifs_destroy_inodecache();
1449 out_unreg_fscache:
1450 	cifs_fscache_unregister();
1451 out_destroy_cifsoplockd_wq:
1452 	destroy_workqueue(cifsoplockd_wq);
1453 out_destroy_cifsiod_wq:
1454 	destroy_workqueue(cifsiod_wq);
1455 out_clean_proc:
1456 	cifs_proc_clean();
1457 	return rc;
1458 }
1459 
1460 static void __exit
exit_cifs(void)1461 exit_cifs(void)
1462 {
1463 	cifs_dbg(NOISY, "exit_cifs\n");
1464 	unregister_filesystem(&cifs_fs_type);
1465 	cifs_dfs_release_automount_timer();
1466 #ifdef CONFIG_CIFS_ACL
1467 	exit_cifs_idmap();
1468 #endif
1469 #ifdef CONFIG_CIFS_UPCALL
1470 	exit_cifs_spnego();
1471 #endif
1472 	cifs_destroy_request_bufs();
1473 	cifs_destroy_mids();
1474 	cifs_destroy_inodecache();
1475 	cifs_fscache_unregister();
1476 	destroy_workqueue(cifsoplockd_wq);
1477 	destroy_workqueue(cifsiod_wq);
1478 	cifs_proc_clean();
1479 }
1480 
1481 MODULE_AUTHOR("Steve French <sfrench@us.ibm.com>");
1482 MODULE_LICENSE("GPL");	/* combination of LGPL + GPL source behaves as GPL */
1483 MODULE_DESCRIPTION
1484     ("VFS to access servers complying with the SNIA CIFS Specification "
1485      "e.g. Samba and Windows");
1486 MODULE_VERSION(CIFS_VERSION);
1487 MODULE_SOFTDEP("pre: arc4");
1488 MODULE_SOFTDEP("pre: des");
1489 MODULE_SOFTDEP("pre: ecb");
1490 MODULE_SOFTDEP("pre: hmac");
1491 MODULE_SOFTDEP("pre: md4");
1492 MODULE_SOFTDEP("pre: md5");
1493 MODULE_SOFTDEP("pre: nls");
1494 MODULE_SOFTDEP("pre: aes");
1495 MODULE_SOFTDEP("pre: cmac");
1496 MODULE_SOFTDEP("pre: sha256");
1497 MODULE_SOFTDEP("pre: sha512");
1498 MODULE_SOFTDEP("pre: aead2");
1499 MODULE_SOFTDEP("pre: ccm");
1500 module_init(init_cifs)
1501 module_exit(exit_cifs)
1502