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