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