Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-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/smp_lock.h>
39 #include "cifsfs.h"
40 #include "cifspdu.h"
41 #define DECLARE_GLOBALS_HERE
42 #include "cifsglob.h"
43 #include "cifsproto.h"
44 #include "cifs_debug.h"
45 #include "cifs_fs_sb.h"
46 #include <linux/mm.h>
47 #include <linux/key-type.h>
48 #include "dns_resolve.h"
49 #include "cifs_spnego.h"
50 #define CIFS_MAGIC_NUMBER 0xFF534D42    /* the first four bytes of SMB PDUs */
51
52 #ifdef CONFIG_CIFS_QUOTA
53 static const struct quotactl_ops cifs_quotactl_ops;
54 #endif /* QUOTA */
55
56 int cifsFYI = 0;
57 int cifsERROR = 1;
58 int traceSMB = 0;
59 unsigned int oplockEnabled = 1;
60 unsigned int experimEnabled = 0;
61 unsigned int linuxExtEnabled = 1;
62 unsigned int lookupCacheEnabled = 1;
63 unsigned int multiuser_mount = 0;
64 unsigned int extended_security = CIFSSEC_DEF;
65 /* unsigned int ntlmv2_support = 0; */
66 unsigned int sign_CIFS_PDUs = 1;
67 extern struct task_struct *oplockThread; /* remove sparse warning */
68 struct task_struct *oplockThread = NULL;
69 /* extern struct task_struct * dnotifyThread; remove sparse warning */
70 static const struct super_operations cifs_super_ops;
71 unsigned int CIFSMaxBufSize = CIFS_MAX_MSGSIZE;
72 module_param(CIFSMaxBufSize, int, 0);
73 MODULE_PARM_DESC(CIFSMaxBufSize, "Network buffer size (not including header). "
74                                  "Default: 16384 Range: 8192 to 130048");
75 unsigned int cifs_min_rcv = CIFS_MIN_RCV_POOL;
76 module_param(cifs_min_rcv, int, 0);
77 MODULE_PARM_DESC(cifs_min_rcv, "Network buffers in pool. Default: 4 Range: "
78                                 "1 to 64");
79 unsigned int cifs_min_small = 30;
80 module_param(cifs_min_small, int, 0);
81 MODULE_PARM_DESC(cifs_min_small, "Small network buffers in pool. Default: 30 "
82                                  "Range: 2 to 256");
83 unsigned int cifs_max_pending = CIFS_MAX_REQ;
84 module_param(cifs_max_pending, int, 0);
85 MODULE_PARM_DESC(cifs_max_pending, "Simultaneous requests to server. "
86                                    "Default: 50 Range: 2 to 256");
87
88 extern mempool_t *cifs_sm_req_poolp;
89 extern mempool_t *cifs_req_poolp;
90 extern mempool_t *cifs_mid_poolp;
91
92 extern struct kmem_cache *cifs_oplock_cachep;
93
94 static int
95 cifs_read_super(struct super_block *sb, void *data,
96                 const char *devname, int silent)
97 {
98         struct inode *inode;
99         struct cifs_sb_info *cifs_sb;
100         int rc = 0;
101
102         /* BB should we make this contingent on mount parm? */
103         sb->s_flags |= MS_NODIRATIME | MS_NOATIME;
104         sb->s_fs_info = kzalloc(sizeof(struct cifs_sb_info), GFP_KERNEL);
105         cifs_sb = CIFS_SB(sb);
106         if (cifs_sb == NULL)
107                 return -ENOMEM;
108
109 #ifdef CONFIG_CIFS_DFS_UPCALL
110         /* copy mount params to sb for use in submounts */
111         /* BB: should we move this after the mount so we
112          * do not have to do the copy on failed mounts?
113          * BB: May be it is better to do simple copy before
114          * complex operation (mount), and in case of fail
115          * just exit instead of doing mount and attempting
116          * undo it if this copy fails?*/
117         if (data) {
118                 int len = strlen(data);
119                 cifs_sb->mountdata = kzalloc(len + 1, GFP_KERNEL);
120                 if (cifs_sb->mountdata == NULL) {
121                         kfree(sb->s_fs_info);
122                         sb->s_fs_info = NULL;
123                         return -ENOMEM;
124                 }
125                 strncpy(cifs_sb->mountdata, data, len + 1);
126                 cifs_sb->mountdata[len] = '\0';
127         }
128 #endif
129
130         rc = cifs_mount(sb, cifs_sb, data, devname);
131
132         if (rc) {
133                 if (!silent)
134                         cERROR(1,
135                                ("cifs_mount failed w/return code = %d", rc));
136                 goto out_mount_failed;
137         }
138
139         sb->s_magic = CIFS_MAGIC_NUMBER;
140         sb->s_op = &cifs_super_ops;
141 /*      if (cifs_sb->tcon->ses->server->maxBuf > MAX_CIFS_HDR_SIZE + 512)
142             sb->s_blocksize =
143                 cifs_sb->tcon->ses->server->maxBuf - MAX_CIFS_HDR_SIZE; */
144 #ifdef CONFIG_CIFS_QUOTA
145         sb->s_qcop = &cifs_quotactl_ops;
146 #endif
147         sb->s_blocksize = CIFS_MAX_MSGSIZE;
148         sb->s_blocksize_bits = 14;      /* default 2**14 = CIFS_MAX_MSGSIZE */
149         inode = cifs_root_iget(sb, ROOT_I);
150
151         if (IS_ERR(inode)) {
152                 rc = PTR_ERR(inode);
153                 inode = NULL;
154                 goto out_no_root;
155         }
156
157         sb->s_root = d_alloc_root(inode);
158
159         if (!sb->s_root) {
160                 rc = -ENOMEM;
161                 goto out_no_root;
162         }
163
164 #ifdef CONFIG_CIFS_EXPERIMENTAL
165         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
166                 cFYI(1, ("export ops supported"));
167                 sb->s_export_op = &cifs_export_ops;
168         }
169 #endif /* EXPERIMENTAL */
170
171         return 0;
172
173 out_no_root:
174         cERROR(1, ("cifs_read_super: get root inode failed"));
175         if (inode)
176                 iput(inode);
177
178         cifs_umount(sb, cifs_sb);
179
180 out_mount_failed:
181         if (cifs_sb) {
182 #ifdef CONFIG_CIFS_DFS_UPCALL
183                 if (cifs_sb->mountdata) {
184                         kfree(cifs_sb->mountdata);
185                         cifs_sb->mountdata = NULL;
186                 }
187 #endif
188                 if (cifs_sb->local_nls)
189                         unload_nls(cifs_sb->local_nls);
190                 kfree(cifs_sb);
191         }
192         return rc;
193 }
194
195 static void
196 cifs_put_super(struct super_block *sb)
197 {
198         int rc = 0;
199         struct cifs_sb_info *cifs_sb;
200
201         cFYI(1, ("In cifs_put_super"));
202         cifs_sb = CIFS_SB(sb);
203         if (cifs_sb == NULL) {
204                 cFYI(1, ("Empty cifs superblock info passed to unmount"));
205                 return;
206         }
207
208         lock_kernel();
209
210         rc = cifs_umount(sb, cifs_sb);
211         if (rc)
212                 cERROR(1, ("cifs_umount failed with return code %d", rc));
213 #ifdef CONFIG_CIFS_DFS_UPCALL
214         if (cifs_sb->mountdata) {
215                 kfree(cifs_sb->mountdata);
216                 cifs_sb->mountdata = NULL;
217         }
218 #endif
219
220         unload_nls(cifs_sb->local_nls);
221         kfree(cifs_sb);
222
223         unlock_kernel();
224 }
225
226 static int
227 cifs_statfs(struct dentry *dentry, struct kstatfs *buf)
228 {
229         struct super_block *sb = dentry->d_sb;
230         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
231         struct cifsTconInfo *tcon = cifs_sb->tcon;
232         int rc = -EOPNOTSUPP;
233         int xid;
234
235         xid = GetXid();
236
237         buf->f_type = CIFS_MAGIC_NUMBER;
238
239         /*
240          * PATH_MAX may be too long - it would presumably be total path,
241          * but note that some servers (includinng Samba 3) have a shorter
242          * maximum path.
243          *
244          * Instead could get the real value via SMB_QUERY_FS_ATTRIBUTE_INFO.
245          */
246         buf->f_namelen = PATH_MAX;
247         buf->f_files = 0;       /* undefined */
248         buf->f_ffree = 0;       /* unlimited */
249
250         /*
251          * We could add a second check for a QFS Unix capability bit
252          */
253         if ((tcon->ses->capabilities & CAP_UNIX) &&
254             (CIFS_POSIX_EXTENSIONS & le64_to_cpu(tcon->fsUnixInfo.Capability)))
255                 rc = CIFSSMBQFSPosixInfo(xid, tcon, buf);
256
257         /*
258          * Only need to call the old QFSInfo if failed on newer one,
259          * e.g. by OS/2.
260          **/
261         if (rc && (tcon->ses->capabilities & CAP_NT_SMBS))
262                 rc = CIFSSMBQFSInfo(xid, tcon, buf);
263
264         /*
265          * Some old Windows servers also do not support level 103, retry with
266          * older level one if old server failed the previous call or we
267          * bypassed it because we detected that this was an older LANMAN sess
268          */
269         if (rc)
270                 rc = SMBOldQFSInfo(xid, tcon, buf);
271
272         FreeXid(xid);
273         return 0;
274 }
275
276 static int cifs_permission(struct inode *inode, int mask)
277 {
278         struct cifs_sb_info *cifs_sb;
279
280         cifs_sb = CIFS_SB(inode->i_sb);
281
282         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) {
283                 if ((mask & MAY_EXEC) && !execute_ok(inode))
284                         return -EACCES;
285                 else
286                         return 0;
287         } else /* file mode might have been restricted at mount time
288                 on the client (above and beyond ACL on servers) for
289                 servers which do not support setting and viewing mode bits,
290                 so allowing client to check permissions is useful */
291                 return generic_permission(inode, mask, NULL);
292 }
293
294 static struct kmem_cache *cifs_inode_cachep;
295 static struct kmem_cache *cifs_req_cachep;
296 static struct kmem_cache *cifs_mid_cachep;
297 struct kmem_cache *cifs_oplock_cachep;
298 static struct kmem_cache *cifs_sm_req_cachep;
299 mempool_t *cifs_sm_req_poolp;
300 mempool_t *cifs_req_poolp;
301 mempool_t *cifs_mid_poolp;
302
303 static struct inode *
304 cifs_alloc_inode(struct super_block *sb)
305 {
306         struct cifsInodeInfo *cifs_inode;
307         cifs_inode = kmem_cache_alloc(cifs_inode_cachep, GFP_KERNEL);
308         if (!cifs_inode)
309                 return NULL;
310         cifs_inode->cifsAttrs = 0x20;   /* default */
311         cifs_inode->time = 0;
312         cifs_inode->write_behind_rc = 0;
313         /* Until the file is open and we have gotten oplock
314         info back from the server, can not assume caching of
315         file data or metadata */
316         cifs_inode->clientCanCacheRead = false;
317         cifs_inode->clientCanCacheAll = false;
318         cifs_inode->delete_pending = false;
319         cifs_inode->vfs_inode.i_blkbits = 14;  /* 2**14 = CIFS_MAX_MSGSIZE */
320         cifs_inode->server_eof = 0;
321
322         /* Can not set i_flags here - they get immediately overwritten
323            to zero by the VFS */
324 /*      cifs_inode->vfs_inode.i_flags = S_NOATIME | S_NOCMTIME;*/
325         INIT_LIST_HEAD(&cifs_inode->openFileList);
326         return &cifs_inode->vfs_inode;
327 }
328
329 static void
330 cifs_destroy_inode(struct inode *inode)
331 {
332         kmem_cache_free(cifs_inode_cachep, CIFS_I(inode));
333 }
334
335 static void
336 cifs_show_address(struct seq_file *s, struct TCP_Server_Info *server)
337 {
338         seq_printf(s, ",addr=");
339
340         switch (server->addr.sockAddr.sin_family) {
341         case AF_INET:
342                 seq_printf(s, "%pI4", &server->addr.sockAddr.sin_addr.s_addr);
343                 break;
344         case AF_INET6:
345                 seq_printf(s, "%pI6",
346                            &server->addr.sockAddr6.sin6_addr.s6_addr);
347                 if (server->addr.sockAddr6.sin6_scope_id)
348                         seq_printf(s, "%%%u",
349                                    server->addr.sockAddr6.sin6_scope_id);
350                 break;
351         default:
352                 seq_printf(s, "(unknown)");
353         }
354 }
355
356 /*
357  * cifs_show_options() is for displaying mount options in /proc/mounts.
358  * Not all settable options are displayed but most of the important
359  * ones are.
360  */
361 static int
362 cifs_show_options(struct seq_file *s, struct vfsmount *m)
363 {
364         struct cifs_sb_info *cifs_sb = CIFS_SB(m->mnt_sb);
365         struct cifsTconInfo *tcon = cifs_sb->tcon;
366
367         seq_printf(s, ",unc=%s", tcon->treeName);
368         if (tcon->ses->userName)
369                 seq_printf(s, ",username=%s", tcon->ses->userName);
370         if (tcon->ses->domainName)
371                 seq_printf(s, ",domain=%s", tcon->ses->domainName);
372
373         seq_printf(s, ",uid=%d", cifs_sb->mnt_uid);
374         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID)
375                 seq_printf(s, ",forceuid");
376         else
377                 seq_printf(s, ",noforceuid");
378
379         seq_printf(s, ",gid=%d", cifs_sb->mnt_gid);
380         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID)
381                 seq_printf(s, ",forcegid");
382         else
383                 seq_printf(s, ",noforcegid");
384
385         cifs_show_address(s, tcon->ses->server);
386
387         if (!tcon->unix_ext)
388                 seq_printf(s, ",file_mode=0%o,dir_mode=0%o",
389                                            cifs_sb->mnt_file_mode,
390                                            cifs_sb->mnt_dir_mode);
391         if (tcon->seal)
392                 seq_printf(s, ",seal");
393         if (tcon->nocase)
394                 seq_printf(s, ",nocase");
395         if (tcon->retry)
396                 seq_printf(s, ",hard");
397         if (cifs_sb->prepath)
398                 seq_printf(s, ",prepath=%s", cifs_sb->prepath);
399         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
400                 seq_printf(s, ",posixpaths");
401         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)
402                 seq_printf(s, ",setuids");
403         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)
404                 seq_printf(s, ",serverino");
405         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
406                 seq_printf(s, ",directio");
407         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)
408                 seq_printf(s, ",nouser_xattr");
409         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR)
410                 seq_printf(s, ",mapchars");
411         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)
412                 seq_printf(s, ",sfu");
413         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
414                 seq_printf(s, ",nobrl");
415         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL)
416                 seq_printf(s, ",cifsacl");
417         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)
418                 seq_printf(s, ",dynperm");
419         if (m->mnt_sb->s_flags & MS_POSIXACL)
420                 seq_printf(s, ",acl");
421
422         seq_printf(s, ",rsize=%d", cifs_sb->rsize);
423         seq_printf(s, ",wsize=%d", cifs_sb->wsize);
424
425         return 0;
426 }
427
428 #ifdef CONFIG_CIFS_QUOTA
429 int cifs_xquota_set(struct super_block *sb, int quota_type, qid_t qid,
430                 struct fs_disk_quota *pdquota)
431 {
432         int xid;
433         int rc = 0;
434         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
435         struct cifsTconInfo *pTcon;
436
437         if (cifs_sb)
438                 pTcon = cifs_sb->tcon;
439         else
440                 return -EIO;
441
442
443         xid = GetXid();
444         if (pTcon) {
445                 cFYI(1, ("set type: 0x%x id: %d", quota_type, qid));
446         } else
447                 rc = -EIO;
448
449         FreeXid(xid);
450         return rc;
451 }
452
453 int cifs_xquota_get(struct super_block *sb, int quota_type, qid_t qid,
454                     struct fs_disk_quota *pdquota)
455 {
456         int xid;
457         int rc = 0;
458         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
459         struct cifsTconInfo *pTcon;
460
461         if (cifs_sb)
462                 pTcon = cifs_sb->tcon;
463         else
464                 return -EIO;
465
466         xid = GetXid();
467         if (pTcon) {
468                 cFYI(1, ("set type: 0x%x id: %d", quota_type, qid));
469         } else
470                 rc = -EIO;
471
472         FreeXid(xid);
473         return rc;
474 }
475
476 int cifs_xstate_set(struct super_block *sb, unsigned int flags, int operation)
477 {
478         int xid;
479         int rc = 0;
480         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
481         struct cifsTconInfo *pTcon;
482
483         if (cifs_sb)
484                 pTcon = cifs_sb->tcon;
485         else
486                 return -EIO;
487
488         xid = GetXid();
489         if (pTcon) {
490                 cFYI(1, ("flags: 0x%x operation: 0x%x", flags, operation));
491         } else
492                 rc = -EIO;
493
494         FreeXid(xid);
495         return rc;
496 }
497
498 int cifs_xstate_get(struct super_block *sb, struct fs_quota_stat *qstats)
499 {
500         int xid;
501         int rc = 0;
502         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
503         struct cifsTconInfo *pTcon;
504
505         if (cifs_sb)
506                 pTcon = cifs_sb->tcon;
507         else
508                 return -EIO;
509
510         xid = GetXid();
511         if (pTcon) {
512                 cFYI(1, ("pqstats %p", qstats));
513         } else
514                 rc = -EIO;
515
516         FreeXid(xid);
517         return rc;
518 }
519
520 static const struct quotactl_ops cifs_quotactl_ops = {
521         .set_xquota     = cifs_xquota_set,
522         .get_xquota     = cifs_xquota_get,
523         .set_xstate     = cifs_xstate_set,
524         .get_xstate     = cifs_xstate_get,
525 };
526 #endif
527
528 static void cifs_umount_begin(struct super_block *sb)
529 {
530         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
531         struct cifsTconInfo *tcon;
532
533         if (cifs_sb == NULL)
534                 return;
535
536         tcon = cifs_sb->tcon;
537         if (tcon == NULL)
538                 return;
539
540         read_lock(&cifs_tcp_ses_lock);
541         if ((tcon->tc_count > 1) || (tcon->tidStatus == CifsExiting)) {
542                 /* we have other mounts to same share or we have
543                    already tried to force umount this and woken up
544                    all waiting network requests, nothing to do */
545                 read_unlock(&cifs_tcp_ses_lock);
546                 return;
547         } else if (tcon->tc_count == 1)
548                 tcon->tidStatus = CifsExiting;
549         read_unlock(&cifs_tcp_ses_lock);
550
551         /* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */
552         /* cancel_notify_requests(tcon); */
553         if (tcon->ses && tcon->ses->server) {
554                 cFYI(1, ("wake up tasks now - umount begin not complete"));
555                 wake_up_all(&tcon->ses->server->request_q);
556                 wake_up_all(&tcon->ses->server->response_q);
557                 msleep(1); /* yield */
558                 /* we have to kick the requests once more */
559                 wake_up_all(&tcon->ses->server->response_q);
560                 msleep(1);
561         }
562
563         return;
564 }
565
566 #ifdef CONFIG_CIFS_STATS2
567 static int cifs_show_stats(struct seq_file *s, struct vfsmount *mnt)
568 {
569         /* BB FIXME */
570         return 0;
571 }
572 #endif
573
574 static int cifs_remount(struct super_block *sb, int *flags, char *data)
575 {
576         *flags |= MS_NODIRATIME;
577         return 0;
578 }
579
580 static const struct super_operations cifs_super_ops = {
581         .put_super = cifs_put_super,
582         .statfs = cifs_statfs,
583         .alloc_inode = cifs_alloc_inode,
584         .destroy_inode = cifs_destroy_inode,
585 /*      .drop_inode         = generic_delete_inode,
586         .delete_inode   = cifs_delete_inode,  */  /* Do not need above two
587         functions unless later we add lazy close of inodes or unless the
588         kernel forgets to call us with the same number of releases (closes)
589         as opens */
590         .show_options = cifs_show_options,
591         .umount_begin   = cifs_umount_begin,
592         .remount_fs = cifs_remount,
593 #ifdef CONFIG_CIFS_STATS2
594         .show_stats = cifs_show_stats,
595 #endif
596 };
597
598 static int
599 cifs_get_sb(struct file_system_type *fs_type,
600             int flags, const char *dev_name, void *data, struct vfsmount *mnt)
601 {
602         int rc;
603         struct super_block *sb = sget(fs_type, NULL, set_anon_super, NULL);
604
605         cFYI(1, ("Devname: %s flags: %d ", dev_name, flags));
606
607         if (IS_ERR(sb))
608                 return PTR_ERR(sb);
609
610         sb->s_flags = flags;
611
612         rc = cifs_read_super(sb, data, dev_name, flags & MS_SILENT ? 1 : 0);
613         if (rc) {
614                 deactivate_locked_super(sb);
615                 return rc;
616         }
617         sb->s_flags |= MS_ACTIVE;
618         simple_set_mnt(mnt, sb);
619         return 0;
620 }
621
622 static ssize_t cifs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
623                                    unsigned long nr_segs, loff_t pos)
624 {
625         struct inode *inode = iocb->ki_filp->f_path.dentry->d_inode;
626         ssize_t written;
627
628         written = generic_file_aio_write(iocb, iov, nr_segs, pos);
629         if (!CIFS_I(inode)->clientCanCacheAll)
630                 filemap_fdatawrite(inode->i_mapping);
631         return written;
632 }
633
634 static loff_t cifs_llseek(struct file *file, loff_t offset, int origin)
635 {
636         /* origin == SEEK_END => we must revalidate the cached file length */
637         if (origin == SEEK_END) {
638                 int retval;
639
640                 /* some applications poll for the file length in this strange
641                    way so we must seek to end on non-oplocked files by
642                    setting the revalidate time to zero */
643                 CIFS_I(file->f_path.dentry->d_inode)->time = 0;
644
645                 retval = cifs_revalidate(file->f_path.dentry);
646                 if (retval < 0)
647                         return (loff_t)retval;
648         }
649         return generic_file_llseek_unlocked(file, offset, origin);
650 }
651
652 #ifdef CONFIG_CIFS_EXPERIMENTAL
653 static int cifs_setlease(struct file *file, long arg, struct file_lock **lease)
654 {
655         /* note that this is called by vfs setlease with the BKL held
656            although I doubt that BKL is needed here in cifs */
657         struct inode *inode = file->f_path.dentry->d_inode;
658
659         if (!(S_ISREG(inode->i_mode)))
660                 return -EINVAL;
661
662         /* check if file is oplocked */
663         if (((arg == F_RDLCK) &&
664                 (CIFS_I(inode)->clientCanCacheRead)) ||
665             ((arg == F_WRLCK) &&
666                 (CIFS_I(inode)->clientCanCacheAll)))
667                 return generic_setlease(file, arg, lease);
668         else if (CIFS_SB(inode->i_sb)->tcon->local_lease &&
669                         !CIFS_I(inode)->clientCanCacheRead)
670                 /* If the server claims to support oplock on this
671                    file, then we still need to check oplock even
672                    if the local_lease mount option is set, but there
673                    are servers which do not support oplock for which
674                    this mount option may be useful if the user
675                    knows that the file won't be changed on the server
676                    by anyone else */
677                 return generic_setlease(file, arg, lease);
678         else
679                 return -EAGAIN;
680 }
681 #endif
682
683 struct file_system_type cifs_fs_type = {
684         .owner = THIS_MODULE,
685         .name = "cifs",
686         .get_sb = cifs_get_sb,
687         .kill_sb = kill_anon_super,
688         /*  .fs_flags */
689 };
690 const struct inode_operations cifs_dir_inode_ops = {
691         .create = cifs_create,
692         .lookup = cifs_lookup,
693         .getattr = cifs_getattr,
694         .unlink = cifs_unlink,
695         .link = cifs_hardlink,
696         .mkdir = cifs_mkdir,
697         .rmdir = cifs_rmdir,
698         .rename = cifs_rename,
699         .permission = cifs_permission,
700 /*      revalidate:cifs_revalidate,   */
701         .setattr = cifs_setattr,
702         .symlink = cifs_symlink,
703         .mknod   = cifs_mknod,
704 #ifdef CONFIG_CIFS_XATTR
705         .setxattr = cifs_setxattr,
706         .getxattr = cifs_getxattr,
707         .listxattr = cifs_listxattr,
708         .removexattr = cifs_removexattr,
709 #endif
710 };
711
712 const struct inode_operations cifs_file_inode_ops = {
713 /*      revalidate:cifs_revalidate, */
714         .setattr = cifs_setattr,
715         .getattr = cifs_getattr, /* do we need this anymore? */
716         .rename = cifs_rename,
717         .permission = cifs_permission,
718 #ifdef CONFIG_CIFS_XATTR
719         .setxattr = cifs_setxattr,
720         .getxattr = cifs_getxattr,
721         .listxattr = cifs_listxattr,
722         .removexattr = cifs_removexattr,
723 #endif
724 };
725
726 const struct inode_operations cifs_symlink_inode_ops = {
727         .readlink = generic_readlink,
728         .follow_link = cifs_follow_link,
729         .put_link = cifs_put_link,
730         .permission = cifs_permission,
731         /* BB add the following two eventually */
732         /* revalidate: cifs_revalidate,
733            setattr:    cifs_notify_change, *//* BB do we need notify change */
734 #ifdef CONFIG_CIFS_XATTR
735         .setxattr = cifs_setxattr,
736         .getxattr = cifs_getxattr,
737         .listxattr = cifs_listxattr,
738         .removexattr = cifs_removexattr,
739 #endif
740 };
741
742 const struct file_operations cifs_file_ops = {
743         .read = do_sync_read,
744         .write = do_sync_write,
745         .aio_read = generic_file_aio_read,
746         .aio_write = cifs_file_aio_write,
747         .open = cifs_open,
748         .release = cifs_close,
749         .lock = cifs_lock,
750         .fsync = cifs_fsync,
751         .flush = cifs_flush,
752         .mmap  = cifs_file_mmap,
753         .splice_read = generic_file_splice_read,
754         .llseek = cifs_llseek,
755 #ifdef CONFIG_CIFS_POSIX
756         .unlocked_ioctl = cifs_ioctl,
757 #endif /* CONFIG_CIFS_POSIX */
758
759 #ifdef CONFIG_CIFS_EXPERIMENTAL
760         .setlease = cifs_setlease,
761 #endif /* CONFIG_CIFS_EXPERIMENTAL */
762 };
763
764 const struct file_operations cifs_file_direct_ops = {
765         /* no mmap, no aio, no readv -
766            BB reevaluate whether they can be done with directio, no cache */
767         .read = cifs_user_read,
768         .write = cifs_user_write,
769         .open = cifs_open,
770         .release = cifs_close,
771         .lock = cifs_lock,
772         .fsync = cifs_fsync,
773         .flush = cifs_flush,
774         .splice_read = generic_file_splice_read,
775 #ifdef CONFIG_CIFS_POSIX
776         .unlocked_ioctl  = cifs_ioctl,
777 #endif /* CONFIG_CIFS_POSIX */
778         .llseek = cifs_llseek,
779 #ifdef CONFIG_CIFS_EXPERIMENTAL
780         .setlease = cifs_setlease,
781 #endif /* CONFIG_CIFS_EXPERIMENTAL */
782 };
783 const struct file_operations cifs_file_nobrl_ops = {
784         .read = do_sync_read,
785         .write = do_sync_write,
786         .aio_read = generic_file_aio_read,
787         .aio_write = cifs_file_aio_write,
788         .open = cifs_open,
789         .release = cifs_close,
790         .fsync = cifs_fsync,
791         .flush = cifs_flush,
792         .mmap  = cifs_file_mmap,
793         .splice_read = generic_file_splice_read,
794         .llseek = cifs_llseek,
795 #ifdef CONFIG_CIFS_POSIX
796         .unlocked_ioctl = cifs_ioctl,
797 #endif /* CONFIG_CIFS_POSIX */
798
799 #ifdef CONFIG_CIFS_EXPERIMENTAL
800         .setlease = cifs_setlease,
801 #endif /* CONFIG_CIFS_EXPERIMENTAL */
802 };
803
804 const struct file_operations cifs_file_direct_nobrl_ops = {
805         /* no mmap, no aio, no readv -
806            BB reevaluate whether they can be done with directio, no cache */
807         .read = cifs_user_read,
808         .write = cifs_user_write,
809         .open = cifs_open,
810         .release = cifs_close,
811         .fsync = cifs_fsync,
812         .flush = cifs_flush,
813         .splice_read = generic_file_splice_read,
814 #ifdef CONFIG_CIFS_POSIX
815         .unlocked_ioctl  = cifs_ioctl,
816 #endif /* CONFIG_CIFS_POSIX */
817         .llseek = cifs_llseek,
818 #ifdef CONFIG_CIFS_EXPERIMENTAL
819         .setlease = cifs_setlease,
820 #endif /* CONFIG_CIFS_EXPERIMENTAL */
821 };
822
823 const struct file_operations cifs_dir_ops = {
824         .readdir = cifs_readdir,
825         .release = cifs_closedir,
826         .read    = generic_read_dir,
827         .unlocked_ioctl  = cifs_ioctl,
828         .llseek = generic_file_llseek,
829 };
830
831 static void
832 cifs_init_once(void *inode)
833 {
834         struct cifsInodeInfo *cifsi = inode;
835
836         inode_init_once(&cifsi->vfs_inode);
837         INIT_LIST_HEAD(&cifsi->lockList);
838 }
839
840 static int
841 cifs_init_inodecache(void)
842 {
843         cifs_inode_cachep = kmem_cache_create("cifs_inode_cache",
844                                               sizeof(struct cifsInodeInfo),
845                                               0, (SLAB_RECLAIM_ACCOUNT|
846                                                 SLAB_MEM_SPREAD),
847                                               cifs_init_once);
848         if (cifs_inode_cachep == NULL)
849                 return -ENOMEM;
850
851         return 0;
852 }
853
854 static void
855 cifs_destroy_inodecache(void)
856 {
857         kmem_cache_destroy(cifs_inode_cachep);
858 }
859
860 static int
861 cifs_init_request_bufs(void)
862 {
863         if (CIFSMaxBufSize < 8192) {
864         /* Buffer size can not be smaller than 2 * PATH_MAX since maximum
865         Unicode path name has to fit in any SMB/CIFS path based frames */
866                 CIFSMaxBufSize = 8192;
867         } else if (CIFSMaxBufSize > 1024*127) {
868                 CIFSMaxBufSize = 1024 * 127;
869         } else {
870                 CIFSMaxBufSize &= 0x1FE00; /* Round size to even 512 byte mult*/
871         }
872 /*      cERROR(1,("CIFSMaxBufSize %d 0x%x",CIFSMaxBufSize,CIFSMaxBufSize)); */
873         cifs_req_cachep = kmem_cache_create("cifs_request",
874                                             CIFSMaxBufSize +
875                                             MAX_CIFS_HDR_SIZE, 0,
876                                             SLAB_HWCACHE_ALIGN, NULL);
877         if (cifs_req_cachep == NULL)
878                 return -ENOMEM;
879
880         if (cifs_min_rcv < 1)
881                 cifs_min_rcv = 1;
882         else if (cifs_min_rcv > 64) {
883                 cifs_min_rcv = 64;
884                 cERROR(1, ("cifs_min_rcv set to maximum (64)"));
885         }
886
887         cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
888                                                   cifs_req_cachep);
889
890         if (cifs_req_poolp == NULL) {
891                 kmem_cache_destroy(cifs_req_cachep);
892                 return -ENOMEM;
893         }
894         /* MAX_CIFS_SMALL_BUFFER_SIZE bytes is enough for most SMB responses and
895         almost all handle based requests (but not write response, nor is it
896         sufficient for path based requests).  A smaller size would have
897         been more efficient (compacting multiple slab items on one 4k page)
898         for the case in which debug was on, but this larger size allows
899         more SMBs to use small buffer alloc and is still much more
900         efficient to alloc 1 per page off the slab compared to 17K (5page)
901         alloc of large cifs buffers even when page debugging is on */
902         cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq",
903                         MAX_CIFS_SMALL_BUFFER_SIZE, 0, SLAB_HWCACHE_ALIGN,
904                         NULL);
905         if (cifs_sm_req_cachep == NULL) {
906                 mempool_destroy(cifs_req_poolp);
907                 kmem_cache_destroy(cifs_req_cachep);
908                 return -ENOMEM;
909         }
910
911         if (cifs_min_small < 2)
912                 cifs_min_small = 2;
913         else if (cifs_min_small > 256) {
914                 cifs_min_small = 256;
915                 cFYI(1, ("cifs_min_small set to maximum (256)"));
916         }
917
918         cifs_sm_req_poolp = mempool_create_slab_pool(cifs_min_small,
919                                                      cifs_sm_req_cachep);
920
921         if (cifs_sm_req_poolp == NULL) {
922                 mempool_destroy(cifs_req_poolp);
923                 kmem_cache_destroy(cifs_req_cachep);
924                 kmem_cache_destroy(cifs_sm_req_cachep);
925                 return -ENOMEM;
926         }
927
928         return 0;
929 }
930
931 static void
932 cifs_destroy_request_bufs(void)
933 {
934         mempool_destroy(cifs_req_poolp);
935         kmem_cache_destroy(cifs_req_cachep);
936         mempool_destroy(cifs_sm_req_poolp);
937         kmem_cache_destroy(cifs_sm_req_cachep);
938 }
939
940 static int
941 cifs_init_mids(void)
942 {
943         cifs_mid_cachep = kmem_cache_create("cifs_mpx_ids",
944                                             sizeof(struct mid_q_entry), 0,
945                                             SLAB_HWCACHE_ALIGN, NULL);
946         if (cifs_mid_cachep == NULL)
947                 return -ENOMEM;
948
949         /* 3 is a reasonable minimum number of simultaneous operations */
950         cifs_mid_poolp = mempool_create_slab_pool(3, cifs_mid_cachep);
951         if (cifs_mid_poolp == NULL) {
952                 kmem_cache_destroy(cifs_mid_cachep);
953                 return -ENOMEM;
954         }
955
956         cifs_oplock_cachep = kmem_cache_create("cifs_oplock_structs",
957                                         sizeof(struct oplock_q_entry), 0,
958                                         SLAB_HWCACHE_ALIGN, NULL);
959         if (cifs_oplock_cachep == NULL) {
960                 mempool_destroy(cifs_mid_poolp);
961                 kmem_cache_destroy(cifs_mid_cachep);
962                 return -ENOMEM;
963         }
964
965         return 0;
966 }
967
968 static void
969 cifs_destroy_mids(void)
970 {
971         mempool_destroy(cifs_mid_poolp);
972         kmem_cache_destroy(cifs_mid_cachep);
973         kmem_cache_destroy(cifs_oplock_cachep);
974 }
975
976 static int cifs_oplock_thread(void *dummyarg)
977 {
978         struct oplock_q_entry *oplock_item;
979         struct cifsTconInfo *pTcon;
980         struct inode *inode;
981         __u16  netfid;
982         int rc, waitrc = 0;
983
984         set_freezable();
985         do {
986                 if (try_to_freeze())
987                         continue;
988
989                 spin_lock(&cifs_oplock_lock);
990                 if (list_empty(&cifs_oplock_list)) {
991                         spin_unlock(&cifs_oplock_lock);
992                         set_current_state(TASK_INTERRUPTIBLE);
993                         schedule_timeout(39*HZ);
994                 } else {
995                         oplock_item = list_entry(cifs_oplock_list.next,
996                                                 struct oplock_q_entry, qhead);
997                         cFYI(1, ("found oplock item to write out"));
998                         pTcon = oplock_item->tcon;
999                         inode = oplock_item->pinode;
1000                         netfid = oplock_item->netfid;
1001                         spin_unlock(&cifs_oplock_lock);
1002                         DeleteOplockQEntry(oplock_item);
1003                         /* can not grab inode sem here since it would
1004                                 deadlock when oplock received on delete
1005                                 since vfs_unlink holds the i_mutex across
1006                                 the call */
1007                         /* mutex_lock(&inode->i_mutex);*/
1008                         if (S_ISREG(inode->i_mode)) {
1009 #ifdef CONFIG_CIFS_EXPERIMENTAL
1010                                 if (CIFS_I(inode)->clientCanCacheAll == 0)
1011                                         break_lease(inode, FMODE_READ);
1012                                 else if (CIFS_I(inode)->clientCanCacheRead == 0)
1013                                         break_lease(inode, FMODE_WRITE);
1014 #endif
1015                                 rc = filemap_fdatawrite(inode->i_mapping);
1016                                 if (CIFS_I(inode)->clientCanCacheRead == 0) {
1017                                         waitrc = filemap_fdatawait(
1018                                                               inode->i_mapping);
1019                                         invalidate_remote_inode(inode);
1020                                 }
1021                                 if (rc == 0)
1022                                         rc = waitrc;
1023                         } else
1024                                 rc = 0;
1025                         /* mutex_unlock(&inode->i_mutex);*/
1026                         if (rc)
1027                                 CIFS_I(inode)->write_behind_rc = rc;
1028                         cFYI(1, ("Oplock flush inode %p rc %d",
1029                                 inode, rc));
1030
1031                                 /* releasing stale oplock after recent reconnect
1032                                 of smb session using a now incorrect file
1033                                 handle is not a data integrity issue but do
1034                                 not bother sending an oplock release if session
1035                                 to server still is disconnected since oplock
1036                                 already released by the server in that case */
1037                         if (!pTcon->need_reconnect) {
1038                                 rc = CIFSSMBLock(0, pTcon, netfid,
1039                                                 0 /* len */ , 0 /* offset */, 0,
1040                                                 0, LOCKING_ANDX_OPLOCK_RELEASE,
1041                                                 false /* wait flag */);
1042                                 cFYI(1, ("Oplock release rc = %d", rc));
1043                         }
1044                         set_current_state(TASK_INTERRUPTIBLE);
1045                         schedule_timeout(1);  /* yield in case q were corrupt */
1046                 }
1047         } while (!kthread_should_stop());
1048
1049         return 0;
1050 }
1051
1052 static int __init
1053 init_cifs(void)
1054 {
1055         int rc = 0;
1056         cifs_proc_init();
1057         INIT_LIST_HEAD(&cifs_tcp_ses_list);
1058         INIT_LIST_HEAD(&cifs_oplock_list);
1059 #ifdef CONFIG_CIFS_EXPERIMENTAL
1060         INIT_LIST_HEAD(&GlobalDnotifyReqList);
1061         INIT_LIST_HEAD(&GlobalDnotifyRsp_Q);
1062 #endif
1063 /*
1064  *  Initialize Global counters
1065  */
1066         atomic_set(&sesInfoAllocCount, 0);
1067         atomic_set(&tconInfoAllocCount, 0);
1068         atomic_set(&tcpSesAllocCount, 0);
1069         atomic_set(&tcpSesReconnectCount, 0);
1070         atomic_set(&tconInfoReconnectCount, 0);
1071
1072         atomic_set(&bufAllocCount, 0);
1073         atomic_set(&smBufAllocCount, 0);
1074 #ifdef CONFIG_CIFS_STATS2
1075         atomic_set(&totBufAllocCount, 0);
1076         atomic_set(&totSmBufAllocCount, 0);
1077 #endif /* CONFIG_CIFS_STATS2 */
1078
1079         atomic_set(&midCount, 0);
1080         GlobalCurrentXid = 0;
1081         GlobalTotalActiveXid = 0;
1082         GlobalMaxActiveXid = 0;
1083         memset(Local_System_Name, 0, 15);
1084         rwlock_init(&GlobalSMBSeslock);
1085         rwlock_init(&cifs_tcp_ses_lock);
1086         spin_lock_init(&GlobalMid_Lock);
1087         spin_lock_init(&cifs_oplock_lock);
1088
1089         if (cifs_max_pending < 2) {
1090                 cifs_max_pending = 2;
1091                 cFYI(1, ("cifs_max_pending set to min of 2"));
1092         } else if (cifs_max_pending > 256) {
1093                 cifs_max_pending = 256;
1094                 cFYI(1, ("cifs_max_pending set to max of 256"));
1095         }
1096
1097         rc = cifs_init_inodecache();
1098         if (rc)
1099                 goto out_clean_proc;
1100
1101         rc = cifs_init_mids();
1102         if (rc)
1103                 goto out_destroy_inodecache;
1104
1105         rc = cifs_init_request_bufs();
1106         if (rc)
1107                 goto out_destroy_mids;
1108
1109         rc = register_filesystem(&cifs_fs_type);
1110         if (rc)
1111                 goto out_destroy_request_bufs;
1112 #ifdef CONFIG_CIFS_UPCALL
1113         rc = register_key_type(&cifs_spnego_key_type);
1114         if (rc)
1115                 goto out_unregister_filesystem;
1116 #endif
1117 #ifdef CONFIG_CIFS_DFS_UPCALL
1118         rc = register_key_type(&key_type_dns_resolver);
1119         if (rc)
1120                 goto out_unregister_key_type;
1121 #endif
1122         oplockThread = kthread_run(cifs_oplock_thread, NULL, "cifsoplockd");
1123         if (IS_ERR(oplockThread)) {
1124                 rc = PTR_ERR(oplockThread);
1125                 cERROR(1, ("error %d create oplock thread", rc));
1126                 goto out_unregister_dfs_key_type;
1127         }
1128
1129         return 0;
1130
1131  out_unregister_dfs_key_type:
1132 #ifdef CONFIG_CIFS_DFS_UPCALL
1133         unregister_key_type(&key_type_dns_resolver);
1134  out_unregister_key_type:
1135 #endif
1136 #ifdef CONFIG_CIFS_UPCALL
1137         unregister_key_type(&cifs_spnego_key_type);
1138  out_unregister_filesystem:
1139 #endif
1140         unregister_filesystem(&cifs_fs_type);
1141  out_destroy_request_bufs:
1142         cifs_destroy_request_bufs();
1143  out_destroy_mids:
1144         cifs_destroy_mids();
1145  out_destroy_inodecache:
1146         cifs_destroy_inodecache();
1147  out_clean_proc:
1148         cifs_proc_clean();
1149         return rc;
1150 }
1151
1152 static void __exit
1153 exit_cifs(void)
1154 {
1155         cFYI(DBG2, ("exit_cifs"));
1156         cifs_proc_clean();
1157 #ifdef CONFIG_CIFS_DFS_UPCALL
1158         cifs_dfs_release_automount_timer();
1159         unregister_key_type(&key_type_dns_resolver);
1160 #endif
1161 #ifdef CONFIG_CIFS_UPCALL
1162         unregister_key_type(&cifs_spnego_key_type);
1163 #endif
1164         unregister_filesystem(&cifs_fs_type);
1165         cifs_destroy_inodecache();
1166         cifs_destroy_mids();
1167         cifs_destroy_request_bufs();
1168         kthread_stop(oplockThread);
1169 }
1170
1171 MODULE_AUTHOR("Steve French <sfrench@us.ibm.com>");
1172 MODULE_LICENSE("GPL");  /* combination of LGPL + GPL source behaves as GPL */
1173 MODULE_DESCRIPTION
1174     ("VFS to access servers complying with the SNIA CIFS Specification "
1175      "e.g. Samba and Windows");
1176 MODULE_VERSION(CIFS_VERSION);
1177 module_init(init_cifs)
1178 module_exit(exit_cifs)