Linux Audio

Check our new training course

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