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