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