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