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