GNU Linux-libre 4.14.262-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 out:
757         cifs_cleanup_volume_info(volume_info);
758         return root;
759
760 out_free:
761         kfree(cifs_sb->prepath);
762         kfree(cifs_sb->mountdata);
763         kfree(cifs_sb);
764 out_nls:
765         unload_nls(volume_info->local_nls);
766         goto out;
767 }
768
769 static ssize_t
770 cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter)
771 {
772         ssize_t rc;
773         struct inode *inode = file_inode(iocb->ki_filp);
774
775         if (iocb->ki_filp->f_flags & O_DIRECT)
776                 return cifs_user_readv(iocb, iter);
777
778         rc = cifs_revalidate_mapping(inode);
779         if (rc)
780                 return rc;
781
782         return generic_file_read_iter(iocb, iter);
783 }
784
785 static ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
786 {
787         struct inode *inode = file_inode(iocb->ki_filp);
788         struct cifsInodeInfo *cinode = CIFS_I(inode);
789         ssize_t written;
790         int rc;
791
792         if (iocb->ki_filp->f_flags & O_DIRECT) {
793                 written = cifs_user_writev(iocb, from);
794                 if (written > 0 && CIFS_CACHE_READ(cinode)) {
795                         cifs_zap_mapping(inode);
796                         cifs_dbg(FYI,
797                                  "Set no oplock for inode=%p after a write operation\n",
798                                  inode);
799                         cinode->oplock = 0;
800                 }
801                 return written;
802         }
803
804         written = cifs_get_writer(cinode);
805         if (written)
806                 return written;
807
808         written = generic_file_write_iter(iocb, from);
809
810         if (CIFS_CACHE_WRITE(CIFS_I(inode)))
811                 goto out;
812
813         rc = filemap_fdatawrite(inode->i_mapping);
814         if (rc)
815                 cifs_dbg(FYI, "cifs_file_write_iter: %d rc on %p inode\n",
816                          rc, inode);
817
818 out:
819         cifs_put_writer(cinode);
820         return written;
821 }
822
823 static loff_t cifs_llseek(struct file *file, loff_t offset, int whence)
824 {
825         /*
826          * whence == SEEK_END || SEEK_DATA || SEEK_HOLE => we must revalidate
827          * the cached file length
828          */
829         if (whence != SEEK_SET && whence != SEEK_CUR) {
830                 int rc;
831                 struct inode *inode = file_inode(file);
832
833                 /*
834                  * We need to be sure that all dirty pages are written and the
835                  * server has the newest file length.
836                  */
837                 if (!CIFS_CACHE_READ(CIFS_I(inode)) && inode->i_mapping &&
838                     inode->i_mapping->nrpages != 0) {
839                         rc = filemap_fdatawait(inode->i_mapping);
840                         if (rc) {
841                                 mapping_set_error(inode->i_mapping, rc);
842                                 return rc;
843                         }
844                 }
845                 /*
846                  * Some applications poll for the file length in this strange
847                  * way so we must seek to end on non-oplocked files by
848                  * setting the revalidate time to zero.
849                  */
850                 CIFS_I(inode)->time = 0;
851
852                 rc = cifs_revalidate_file_attr(file);
853                 if (rc < 0)
854                         return (loff_t)rc;
855         }
856         return generic_file_llseek(file, offset, whence);
857 }
858
859 static int
860 cifs_setlease(struct file *file, long arg, struct file_lock **lease, void **priv)
861 {
862         /*
863          * Note that this is called by vfs setlease with i_lock held to
864          * protect *lease from going away.
865          */
866         struct inode *inode = file_inode(file);
867         struct cifsFileInfo *cfile = file->private_data;
868
869         if (!(S_ISREG(inode->i_mode)))
870                 return -EINVAL;
871
872         /* Check if file is oplocked if this is request for new lease */
873         if (arg == F_UNLCK ||
874             ((arg == F_RDLCK) && CIFS_CACHE_READ(CIFS_I(inode))) ||
875             ((arg == F_WRLCK) && CIFS_CACHE_WRITE(CIFS_I(inode))))
876                 return generic_setlease(file, arg, lease, priv);
877         else if (tlink_tcon(cfile->tlink)->local_lease &&
878                  !CIFS_CACHE_READ(CIFS_I(inode)))
879                 /*
880                  * If the server claims to support oplock on this file, then we
881                  * still need to check oplock even if the local_lease mount
882                  * option is set, but there are servers which do not support
883                  * oplock for which this mount option may be useful if the user
884                  * knows that the file won't be changed on the server by anyone
885                  * else.
886                  */
887                 return generic_setlease(file, arg, lease, priv);
888         else
889                 return -EAGAIN;
890 }
891
892 struct file_system_type cifs_fs_type = {
893         .owner = THIS_MODULE,
894         .name = "cifs",
895         .mount = cifs_do_mount,
896         .kill_sb = cifs_kill_sb,
897         /*  .fs_flags */
898 };
899 MODULE_ALIAS_FS("cifs");
900 const struct inode_operations cifs_dir_inode_ops = {
901         .create = cifs_create,
902         .atomic_open = cifs_atomic_open,
903         .lookup = cifs_lookup,
904         .getattr = cifs_getattr,
905         .unlink = cifs_unlink,
906         .link = cifs_hardlink,
907         .mkdir = cifs_mkdir,
908         .rmdir = cifs_rmdir,
909         .rename = cifs_rename2,
910         .permission = cifs_permission,
911         .setattr = cifs_setattr,
912         .symlink = cifs_symlink,
913         .mknod   = cifs_mknod,
914         .listxattr = cifs_listxattr,
915 };
916
917 const struct inode_operations cifs_file_inode_ops = {
918         .setattr = cifs_setattr,
919         .getattr = cifs_getattr,
920         .permission = cifs_permission,
921         .listxattr = cifs_listxattr,
922 };
923
924 const struct inode_operations cifs_symlink_inode_ops = {
925         .get_link = cifs_get_link,
926         .permission = cifs_permission,
927         .listxattr = cifs_listxattr,
928 };
929
930 static int cifs_clone_file_range(struct file *src_file, loff_t off,
931                 struct file *dst_file, loff_t destoff, u64 len)
932 {
933         struct inode *src_inode = file_inode(src_file);
934         struct inode *target_inode = file_inode(dst_file);
935         struct cifsFileInfo *smb_file_src = src_file->private_data;
936         struct cifsFileInfo *smb_file_target;
937         struct cifs_tcon *target_tcon;
938         unsigned int xid;
939         int rc;
940
941         cifs_dbg(FYI, "clone range\n");
942
943         xid = get_xid();
944
945         if (!src_file->private_data || !dst_file->private_data) {
946                 rc = -EBADF;
947                 cifs_dbg(VFS, "missing cifsFileInfo on copy range src file\n");
948                 goto out;
949         }
950
951         smb_file_target = dst_file->private_data;
952         target_tcon = tlink_tcon(smb_file_target->tlink);
953
954         /*
955          * Note: cifs case is easier than btrfs since server responsible for
956          * checks for proper open modes and file type and if it wants
957          * server could even support copy of range where source = target
958          */
959         lock_two_nondirectories(target_inode, src_inode);
960
961         if (len == 0)
962                 len = src_inode->i_size - off;
963
964         cifs_dbg(FYI, "about to flush pages\n");
965         /* should we flush first and last page first */
966         truncate_inode_pages_range(&target_inode->i_data, destoff,
967                                    PAGE_ALIGN(destoff + len)-1);
968
969         if (target_tcon->ses->server->ops->duplicate_extents)
970                 rc = target_tcon->ses->server->ops->duplicate_extents(xid,
971                         smb_file_src, smb_file_target, off, len, destoff);
972         else
973                 rc = -EOPNOTSUPP;
974
975         /* force revalidate of size and timestamps of target file now
976            that target is updated on the server */
977         CIFS_I(target_inode)->time = 0;
978         /* although unlocking in the reverse order from locking is not
979            strictly necessary here it is a little cleaner to be consistent */
980         unlock_two_nondirectories(src_inode, target_inode);
981 out:
982         free_xid(xid);
983         return rc;
984 }
985
986 ssize_t cifs_file_copychunk_range(unsigned int xid,
987                                 struct file *src_file, loff_t off,
988                                 struct file *dst_file, loff_t destoff,
989                                 size_t len, unsigned int flags)
990 {
991         struct inode *src_inode = file_inode(src_file);
992         struct inode *target_inode = file_inode(dst_file);
993         struct cifsFileInfo *smb_file_src;
994         struct cifsFileInfo *smb_file_target;
995         struct cifs_tcon *src_tcon;
996         struct cifs_tcon *target_tcon;
997         ssize_t rc;
998
999         cifs_dbg(FYI, "copychunk range\n");
1000
1001         if (src_inode == target_inode) {
1002                 rc = -EINVAL;
1003                 goto out;
1004         }
1005
1006         if (!src_file->private_data || !dst_file->private_data) {
1007                 rc = -EBADF;
1008                 cifs_dbg(VFS, "missing cifsFileInfo on copy range src file\n");
1009                 goto out;
1010         }
1011
1012         rc = -EXDEV;
1013         smb_file_target = dst_file->private_data;
1014         smb_file_src = src_file->private_data;
1015         src_tcon = tlink_tcon(smb_file_src->tlink);
1016         target_tcon = tlink_tcon(smb_file_target->tlink);
1017
1018         if (src_tcon->ses != target_tcon->ses) {
1019                 cifs_dbg(VFS, "source and target of copy not on same server\n");
1020                 goto out;
1021         }
1022
1023         /*
1024          * Note: cifs case is easier than btrfs since server responsible for
1025          * checks for proper open modes and file type and if it wants
1026          * server could even support copy of range where source = target
1027          */
1028         lock_two_nondirectories(target_inode, src_inode);
1029
1030         cifs_dbg(FYI, "about to flush pages\n");
1031         /* should we flush first and last page first */
1032         truncate_inode_pages(&target_inode->i_data, 0);
1033
1034         if (target_tcon->ses->server->ops->copychunk_range)
1035                 rc = target_tcon->ses->server->ops->copychunk_range(xid,
1036                         smb_file_src, smb_file_target, off, len, destoff);
1037         else
1038                 rc = -EOPNOTSUPP;
1039
1040         /* force revalidate of size and timestamps of target file now
1041          * that target is updated on the server
1042          */
1043         CIFS_I(target_inode)->time = 0;
1044         /* although unlocking in the reverse order from locking is not
1045          * strictly necessary here it is a little cleaner to be consistent
1046          */
1047         unlock_two_nondirectories(src_inode, target_inode);
1048
1049 out:
1050         return rc;
1051 }
1052
1053 /*
1054  * Directory operations under CIFS/SMB2/SMB3 are synchronous, so fsync()
1055  * is a dummy operation.
1056  */
1057 static int cifs_dir_fsync(struct file *file, loff_t start, loff_t end, int datasync)
1058 {
1059         cifs_dbg(FYI, "Sync directory - name: %pD datasync: 0x%x\n",
1060                  file, datasync);
1061
1062         return 0;
1063 }
1064
1065 static ssize_t cifs_copy_file_range(struct file *src_file, loff_t off,
1066                                 struct file *dst_file, loff_t destoff,
1067                                 size_t len, unsigned int flags)
1068 {
1069         unsigned int xid = get_xid();
1070         ssize_t rc;
1071
1072         rc = cifs_file_copychunk_range(xid, src_file, off, dst_file, destoff,
1073                                         len, flags);
1074         free_xid(xid);
1075         return rc;
1076 }
1077
1078 const struct file_operations cifs_file_ops = {
1079         .read_iter = cifs_loose_read_iter,
1080         .write_iter = cifs_file_write_iter,
1081         .open = cifs_open,
1082         .release = cifs_close,
1083         .lock = cifs_lock,
1084         .fsync = cifs_fsync,
1085         .flush = cifs_flush,
1086         .mmap  = cifs_file_mmap,
1087         .splice_read = generic_file_splice_read,
1088         .llseek = cifs_llseek,
1089         .unlocked_ioctl = cifs_ioctl,
1090         .copy_file_range = cifs_copy_file_range,
1091         .clone_file_range = cifs_clone_file_range,
1092         .setlease = cifs_setlease,
1093         .fallocate = cifs_fallocate,
1094 };
1095
1096 const struct file_operations cifs_file_strict_ops = {
1097         .read_iter = cifs_strict_readv,
1098         .write_iter = cifs_strict_writev,
1099         .open = cifs_open,
1100         .release = cifs_close,
1101         .lock = cifs_lock,
1102         .fsync = cifs_strict_fsync,
1103         .flush = cifs_flush,
1104         .mmap = cifs_file_strict_mmap,
1105         .splice_read = generic_file_splice_read,
1106         .llseek = cifs_llseek,
1107         .unlocked_ioctl = cifs_ioctl,
1108         .copy_file_range = cifs_copy_file_range,
1109         .clone_file_range = cifs_clone_file_range,
1110         .setlease = cifs_setlease,
1111         .fallocate = cifs_fallocate,
1112 };
1113
1114 const struct file_operations cifs_file_direct_ops = {
1115         /* BB reevaluate whether they can be done with directio, no cache */
1116         .read_iter = cifs_user_readv,
1117         .write_iter = cifs_user_writev,
1118         .open = cifs_open,
1119         .release = cifs_close,
1120         .lock = cifs_lock,
1121         .fsync = cifs_fsync,
1122         .flush = cifs_flush,
1123         .mmap = cifs_file_mmap,
1124         .splice_read = generic_file_splice_read,
1125         .unlocked_ioctl  = cifs_ioctl,
1126         .copy_file_range = cifs_copy_file_range,
1127         .clone_file_range = cifs_clone_file_range,
1128         .llseek = cifs_llseek,
1129         .setlease = cifs_setlease,
1130         .fallocate = cifs_fallocate,
1131 };
1132
1133 const struct file_operations cifs_file_nobrl_ops = {
1134         .read_iter = cifs_loose_read_iter,
1135         .write_iter = cifs_file_write_iter,
1136         .open = cifs_open,
1137         .release = cifs_close,
1138         .fsync = cifs_fsync,
1139         .flush = cifs_flush,
1140         .mmap  = cifs_file_mmap,
1141         .splice_read = generic_file_splice_read,
1142         .llseek = cifs_llseek,
1143         .unlocked_ioctl = cifs_ioctl,
1144         .copy_file_range = cifs_copy_file_range,
1145         .clone_file_range = cifs_clone_file_range,
1146         .setlease = cifs_setlease,
1147         .fallocate = cifs_fallocate,
1148 };
1149
1150 const struct file_operations cifs_file_strict_nobrl_ops = {
1151         .read_iter = cifs_strict_readv,
1152         .write_iter = cifs_strict_writev,
1153         .open = cifs_open,
1154         .release = cifs_close,
1155         .fsync = cifs_strict_fsync,
1156         .flush = cifs_flush,
1157         .mmap = cifs_file_strict_mmap,
1158         .splice_read = generic_file_splice_read,
1159         .llseek = cifs_llseek,
1160         .unlocked_ioctl = cifs_ioctl,
1161         .copy_file_range = cifs_copy_file_range,
1162         .clone_file_range = cifs_clone_file_range,
1163         .setlease = cifs_setlease,
1164         .fallocate = cifs_fallocate,
1165 };
1166
1167 const struct file_operations cifs_file_direct_nobrl_ops = {
1168         /* BB reevaluate whether they can be done with directio, no cache */
1169         .read_iter = cifs_user_readv,
1170         .write_iter = cifs_user_writev,
1171         .open = cifs_open,
1172         .release = cifs_close,
1173         .fsync = cifs_fsync,
1174         .flush = cifs_flush,
1175         .mmap = cifs_file_mmap,
1176         .splice_read = generic_file_splice_read,
1177         .unlocked_ioctl  = cifs_ioctl,
1178         .copy_file_range = cifs_copy_file_range,
1179         .clone_file_range = cifs_clone_file_range,
1180         .llseek = cifs_llseek,
1181         .setlease = cifs_setlease,
1182         .fallocate = cifs_fallocate,
1183 };
1184
1185 const struct file_operations cifs_dir_ops = {
1186         .iterate_shared = cifs_readdir,
1187         .release = cifs_closedir,
1188         .read    = generic_read_dir,
1189         .unlocked_ioctl  = cifs_ioctl,
1190         .copy_file_range = cifs_copy_file_range,
1191         .clone_file_range = cifs_clone_file_range,
1192         .llseek = generic_file_llseek,
1193         .fsync = cifs_dir_fsync,
1194 };
1195
1196 static void
1197 cifs_init_once(void *inode)
1198 {
1199         struct cifsInodeInfo *cifsi = inode;
1200
1201         inode_init_once(&cifsi->vfs_inode);
1202         init_rwsem(&cifsi->lock_sem);
1203 }
1204
1205 static int __init
1206 cifs_init_inodecache(void)
1207 {
1208         cifs_inode_cachep = kmem_cache_create("cifs_inode_cache",
1209                                               sizeof(struct cifsInodeInfo),
1210                                               0, (SLAB_RECLAIM_ACCOUNT|
1211                                                 SLAB_MEM_SPREAD|SLAB_ACCOUNT),
1212                                               cifs_init_once);
1213         if (cifs_inode_cachep == NULL)
1214                 return -ENOMEM;
1215
1216         return 0;
1217 }
1218
1219 static void
1220 cifs_destroy_inodecache(void)
1221 {
1222         /*
1223          * Make sure all delayed rcu free inodes are flushed before we
1224          * destroy cache.
1225          */
1226         rcu_barrier();
1227         kmem_cache_destroy(cifs_inode_cachep);
1228 }
1229
1230 static int
1231 cifs_init_request_bufs(void)
1232 {
1233         /*
1234          * SMB2 maximum header size is bigger than CIFS one - no problems to
1235          * allocate some more bytes for CIFS.
1236          */
1237         size_t max_hdr_size = MAX_SMB2_HDR_SIZE;
1238
1239         if (CIFSMaxBufSize < 8192) {
1240         /* Buffer size can not be smaller than 2 * PATH_MAX since maximum
1241         Unicode path name has to fit in any SMB/CIFS path based frames */
1242                 CIFSMaxBufSize = 8192;
1243         } else if (CIFSMaxBufSize > 1024*127) {
1244                 CIFSMaxBufSize = 1024 * 127;
1245         } else {
1246                 CIFSMaxBufSize &= 0x1FE00; /* Round size to even 512 byte mult*/
1247         }
1248 /*
1249         cifs_dbg(VFS, "CIFSMaxBufSize %d 0x%x\n",
1250                  CIFSMaxBufSize, CIFSMaxBufSize);
1251 */
1252         cifs_req_cachep = kmem_cache_create("cifs_request",
1253                                             CIFSMaxBufSize + max_hdr_size, 0,
1254                                             SLAB_HWCACHE_ALIGN, NULL);
1255         if (cifs_req_cachep == NULL)
1256                 return -ENOMEM;
1257
1258         if (cifs_min_rcv < 1)
1259                 cifs_min_rcv = 1;
1260         else if (cifs_min_rcv > 64) {
1261                 cifs_min_rcv = 64;
1262                 cifs_dbg(VFS, "cifs_min_rcv set to maximum (64)\n");
1263         }
1264
1265         cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
1266                                                   cifs_req_cachep);
1267
1268         if (cifs_req_poolp == NULL) {
1269                 kmem_cache_destroy(cifs_req_cachep);
1270                 return -ENOMEM;
1271         }
1272         /* MAX_CIFS_SMALL_BUFFER_SIZE bytes is enough for most SMB responses and
1273         almost all handle based requests (but not write response, nor is it
1274         sufficient for path based requests).  A smaller size would have
1275         been more efficient (compacting multiple slab items on one 4k page)
1276         for the case in which debug was on, but this larger size allows
1277         more SMBs to use small buffer alloc and is still much more
1278         efficient to alloc 1 per page off the slab compared to 17K (5page)
1279         alloc of large cifs buffers even when page debugging is on */
1280         cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq",
1281                         MAX_CIFS_SMALL_BUFFER_SIZE, 0, SLAB_HWCACHE_ALIGN,
1282                         NULL);
1283         if (cifs_sm_req_cachep == NULL) {
1284                 mempool_destroy(cifs_req_poolp);
1285                 kmem_cache_destroy(cifs_req_cachep);
1286                 return -ENOMEM;
1287         }
1288
1289         if (cifs_min_small < 2)
1290                 cifs_min_small = 2;
1291         else if (cifs_min_small > 256) {
1292                 cifs_min_small = 256;
1293                 cifs_dbg(FYI, "cifs_min_small set to maximum (256)\n");
1294         }
1295
1296         cifs_sm_req_poolp = mempool_create_slab_pool(cifs_min_small,
1297                                                      cifs_sm_req_cachep);
1298
1299         if (cifs_sm_req_poolp == NULL) {
1300                 mempool_destroy(cifs_req_poolp);
1301                 kmem_cache_destroy(cifs_req_cachep);
1302                 kmem_cache_destroy(cifs_sm_req_cachep);
1303                 return -ENOMEM;
1304         }
1305
1306         return 0;
1307 }
1308
1309 static void
1310 cifs_destroy_request_bufs(void)
1311 {
1312         mempool_destroy(cifs_req_poolp);
1313         kmem_cache_destroy(cifs_req_cachep);
1314         mempool_destroy(cifs_sm_req_poolp);
1315         kmem_cache_destroy(cifs_sm_req_cachep);
1316 }
1317
1318 static int
1319 cifs_init_mids(void)
1320 {
1321         cifs_mid_cachep = kmem_cache_create("cifs_mpx_ids",
1322                                             sizeof(struct mid_q_entry), 0,
1323                                             SLAB_HWCACHE_ALIGN, NULL);
1324         if (cifs_mid_cachep == NULL)
1325                 return -ENOMEM;
1326
1327         /* 3 is a reasonable minimum number of simultaneous operations */
1328         cifs_mid_poolp = mempool_create_slab_pool(3, cifs_mid_cachep);
1329         if (cifs_mid_poolp == NULL) {
1330                 kmem_cache_destroy(cifs_mid_cachep);
1331                 return -ENOMEM;
1332         }
1333
1334         return 0;
1335 }
1336
1337 static void
1338 cifs_destroy_mids(void)
1339 {
1340         mempool_destroy(cifs_mid_poolp);
1341         kmem_cache_destroy(cifs_mid_cachep);
1342 }
1343
1344 static int __init
1345 init_cifs(void)
1346 {
1347         int rc = 0;
1348         cifs_proc_init();
1349         INIT_LIST_HEAD(&cifs_tcp_ses_list);
1350 #ifdef CONFIG_CIFS_DNOTIFY_EXPERIMENTAL /* unused temporarily */
1351         INIT_LIST_HEAD(&GlobalDnotifyReqList);
1352         INIT_LIST_HEAD(&GlobalDnotifyRsp_Q);
1353 #endif /* was needed for dnotify, and will be needed for inotify when VFS fix */
1354 /*
1355  *  Initialize Global counters
1356  */
1357         atomic_set(&sesInfoAllocCount, 0);
1358         atomic_set(&tconInfoAllocCount, 0);
1359         atomic_set(&tcpSesAllocCount, 0);
1360         atomic_set(&tcpSesReconnectCount, 0);
1361         atomic_set(&tconInfoReconnectCount, 0);
1362
1363         atomic_set(&bufAllocCount, 0);
1364         atomic_set(&smBufAllocCount, 0);
1365 #ifdef CONFIG_CIFS_STATS2
1366         atomic_set(&totBufAllocCount, 0);
1367         atomic_set(&totSmBufAllocCount, 0);
1368 #endif /* CONFIG_CIFS_STATS2 */
1369
1370         atomic_set(&midCount, 0);
1371         GlobalCurrentXid = 0;
1372         GlobalTotalActiveXid = 0;
1373         GlobalMaxActiveXid = 0;
1374         spin_lock_init(&cifs_tcp_ses_lock);
1375         spin_lock_init(&GlobalMid_Lock);
1376
1377         cifs_lock_secret = get_random_u32();
1378
1379         if (cifs_max_pending < 2) {
1380                 cifs_max_pending = 2;
1381                 cifs_dbg(FYI, "cifs_max_pending set to min of 2\n");
1382         } else if (cifs_max_pending > CIFS_MAX_REQ) {
1383                 cifs_max_pending = CIFS_MAX_REQ;
1384                 cifs_dbg(FYI, "cifs_max_pending set to max of %u\n",
1385                          CIFS_MAX_REQ);
1386         }
1387
1388         cifsiod_wq = alloc_workqueue("cifsiod", WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1389         if (!cifsiod_wq) {
1390                 rc = -ENOMEM;
1391                 goto out_clean_proc;
1392         }
1393
1394         cifsoplockd_wq = alloc_workqueue("cifsoplockd",
1395                                          WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1396         if (!cifsoplockd_wq) {
1397                 rc = -ENOMEM;
1398                 goto out_destroy_cifsiod_wq;
1399         }
1400
1401         rc = cifs_fscache_register();
1402         if (rc)
1403                 goto out_destroy_cifsoplockd_wq;
1404
1405         rc = cifs_init_inodecache();
1406         if (rc)
1407                 goto out_unreg_fscache;
1408
1409         rc = cifs_init_mids();
1410         if (rc)
1411                 goto out_destroy_inodecache;
1412
1413         rc = cifs_init_request_bufs();
1414         if (rc)
1415                 goto out_destroy_mids;
1416
1417 #ifdef CONFIG_CIFS_UPCALL
1418         rc = init_cifs_spnego();
1419         if (rc)
1420                 goto out_destroy_request_bufs;
1421 #endif /* CONFIG_CIFS_UPCALL */
1422
1423 #ifdef CONFIG_CIFS_ACL
1424         rc = init_cifs_idmap();
1425         if (rc)
1426                 goto out_register_key_type;
1427 #endif /* CONFIG_CIFS_ACL */
1428
1429         rc = register_filesystem(&cifs_fs_type);
1430         if (rc)
1431                 goto out_init_cifs_idmap;
1432
1433         return 0;
1434
1435 out_init_cifs_idmap:
1436 #ifdef CONFIG_CIFS_ACL
1437         exit_cifs_idmap();
1438 out_register_key_type:
1439 #endif
1440 #ifdef CONFIG_CIFS_UPCALL
1441         exit_cifs_spnego();
1442 out_destroy_request_bufs:
1443 #endif
1444         cifs_destroy_request_bufs();
1445 out_destroy_mids:
1446         cifs_destroy_mids();
1447 out_destroy_inodecache:
1448         cifs_destroy_inodecache();
1449 out_unreg_fscache:
1450         cifs_fscache_unregister();
1451 out_destroy_cifsoplockd_wq:
1452         destroy_workqueue(cifsoplockd_wq);
1453 out_destroy_cifsiod_wq:
1454         destroy_workqueue(cifsiod_wq);
1455 out_clean_proc:
1456         cifs_proc_clean();
1457         return rc;
1458 }
1459
1460 static void __exit
1461 exit_cifs(void)
1462 {
1463         cifs_dbg(NOISY, "exit_cifs\n");
1464         unregister_filesystem(&cifs_fs_type);
1465         cifs_dfs_release_automount_timer();
1466 #ifdef CONFIG_CIFS_ACL
1467         exit_cifs_idmap();
1468 #endif
1469 #ifdef CONFIG_CIFS_UPCALL
1470         exit_cifs_spnego();
1471 #endif
1472         cifs_destroy_request_bufs();
1473         cifs_destroy_mids();
1474         cifs_destroy_inodecache();
1475         cifs_fscache_unregister();
1476         destroy_workqueue(cifsoplockd_wq);
1477         destroy_workqueue(cifsiod_wq);
1478         cifs_proc_clean();
1479 }
1480
1481 MODULE_AUTHOR("Steve French <sfrench@us.ibm.com>");
1482 MODULE_LICENSE("GPL");  /* combination of LGPL + GPL source behaves as GPL */
1483 MODULE_DESCRIPTION
1484     ("VFS to access servers complying with the SNIA CIFS Specification "
1485      "e.g. Samba and Windows");
1486 MODULE_VERSION(CIFS_VERSION);
1487 MODULE_SOFTDEP("pre: arc4");
1488 MODULE_SOFTDEP("pre: des");
1489 MODULE_SOFTDEP("pre: ecb");
1490 MODULE_SOFTDEP("pre: hmac");
1491 MODULE_SOFTDEP("pre: md4");
1492 MODULE_SOFTDEP("pre: md5");
1493 MODULE_SOFTDEP("pre: nls");
1494 MODULE_SOFTDEP("pre: aes");
1495 MODULE_SOFTDEP("pre: cmac");
1496 MODULE_SOFTDEP("pre: sha256");
1497 MODULE_SOFTDEP("pre: sha512");
1498 MODULE_SOFTDEP("pre: aead2");
1499 MODULE_SOFTDEP("pre: ccm");
1500 module_init(init_cifs)
1501 module_exit(exit_cifs)