Merge branch 'for-2.6.30' into for-2.6.31
[pandora-kernel.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 "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         simple_set_mnt(mnt, sb);
610         return 0;
611 }
612
613 static ssize_t cifs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
614                                    unsigned long nr_segs, loff_t pos)
615 {
616         struct inode *inode = iocb->ki_filp->f_path.dentry->d_inode;
617         ssize_t written;
618
619         written = generic_file_aio_write(iocb, iov, nr_segs, pos);
620         if (!CIFS_I(inode)->clientCanCacheAll)
621                 filemap_fdatawrite(inode->i_mapping);
622         return written;
623 }
624
625 static loff_t cifs_llseek(struct file *file, loff_t offset, int origin)
626 {
627         /* origin == SEEK_END => we must revalidate the cached file length */
628         if (origin == SEEK_END) {
629                 int retval;
630
631                 /* some applications poll for the file length in this strange
632                    way so we must seek to end on non-oplocked files by
633                    setting the revalidate time to zero */
634                 CIFS_I(file->f_path.dentry->d_inode)->time = 0;
635
636                 retval = cifs_revalidate(file->f_path.dentry);
637                 if (retval < 0)
638                         return (loff_t)retval;
639         }
640         return generic_file_llseek_unlocked(file, offset, origin);
641 }
642
643 #ifdef CONFIG_CIFS_EXPERIMENTAL
644 static int cifs_setlease(struct file *file, long arg, struct file_lock **lease)
645 {
646         /* note that this is called by vfs setlease with the BKL held
647            although I doubt that BKL is needed here in cifs */
648         struct inode *inode = file->f_path.dentry->d_inode;
649
650         if (!(S_ISREG(inode->i_mode)))
651                 return -EINVAL;
652
653         /* check if file is oplocked */
654         if (((arg == F_RDLCK) &&
655                 (CIFS_I(inode)->clientCanCacheRead)) ||
656             ((arg == F_WRLCK) &&
657                 (CIFS_I(inode)->clientCanCacheAll)))
658                 return generic_setlease(file, arg, lease);
659         else if (CIFS_SB(inode->i_sb)->tcon->local_lease &&
660                         !CIFS_I(inode)->clientCanCacheRead)
661                 /* If the server claims to support oplock on this
662                    file, then we still need to check oplock even
663                    if the local_lease mount option is set, but there
664                    are servers which do not support oplock for which
665                    this mount option may be useful if the user
666                    knows that the file won't be changed on the server
667                    by anyone else */
668                 return generic_setlease(file, arg, lease);
669         else
670                 return -EAGAIN;
671 }
672 #endif
673
674 struct file_system_type cifs_fs_type = {
675         .owner = THIS_MODULE,
676         .name = "cifs",
677         .get_sb = cifs_get_sb,
678         .kill_sb = kill_anon_super,
679         /*  .fs_flags */
680 };
681 const struct inode_operations cifs_dir_inode_ops = {
682         .create = cifs_create,
683         .lookup = cifs_lookup,
684         .getattr = cifs_getattr,
685         .unlink = cifs_unlink,
686         .link = cifs_hardlink,
687         .mkdir = cifs_mkdir,
688         .rmdir = cifs_rmdir,
689         .rename = cifs_rename,
690         .permission = cifs_permission,
691 /*      revalidate:cifs_revalidate,   */
692         .setattr = cifs_setattr,
693         .symlink = cifs_symlink,
694         .mknod   = cifs_mknod,
695 #ifdef CONFIG_CIFS_XATTR
696         .setxattr = cifs_setxattr,
697         .getxattr = cifs_getxattr,
698         .listxattr = cifs_listxattr,
699         .removexattr = cifs_removexattr,
700 #endif
701 };
702
703 const struct inode_operations cifs_file_inode_ops = {
704 /*      revalidate:cifs_revalidate, */
705         .setattr = cifs_setattr,
706         .getattr = cifs_getattr, /* do we need this anymore? */
707         .rename = cifs_rename,
708         .permission = cifs_permission,
709 #ifdef CONFIG_CIFS_XATTR
710         .setxattr = cifs_setxattr,
711         .getxattr = cifs_getxattr,
712         .listxattr = cifs_listxattr,
713         .removexattr = cifs_removexattr,
714 #endif
715 };
716
717 const struct inode_operations cifs_symlink_inode_ops = {
718         .readlink = generic_readlink,
719         .follow_link = cifs_follow_link,
720         .put_link = cifs_put_link,
721         .permission = cifs_permission,
722         /* BB add the following two eventually */
723         /* revalidate: cifs_revalidate,
724            setattr:    cifs_notify_change, *//* BB do we need notify change */
725 #ifdef CONFIG_CIFS_XATTR
726         .setxattr = cifs_setxattr,
727         .getxattr = cifs_getxattr,
728         .listxattr = cifs_listxattr,
729         .removexattr = cifs_removexattr,
730 #endif
731 };
732
733 const struct file_operations cifs_file_ops = {
734         .read = do_sync_read,
735         .write = do_sync_write,
736         .aio_read = generic_file_aio_read,
737         .aio_write = cifs_file_aio_write,
738         .open = cifs_open,
739         .release = cifs_close,
740         .lock = cifs_lock,
741         .fsync = cifs_fsync,
742         .flush = cifs_flush,
743         .mmap  = cifs_file_mmap,
744         .splice_read = generic_file_splice_read,
745         .llseek = cifs_llseek,
746 #ifdef CONFIG_CIFS_POSIX
747         .unlocked_ioctl = cifs_ioctl,
748 #endif /* CONFIG_CIFS_POSIX */
749
750 #ifdef CONFIG_CIFS_EXPERIMENTAL
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         .setlease = cifs_setlease,
772 #endif /* CONFIG_CIFS_EXPERIMENTAL */
773 };
774 const struct file_operations cifs_file_nobrl_ops = {
775         .read = do_sync_read,
776         .write = do_sync_write,
777         .aio_read = generic_file_aio_read,
778         .aio_write = cifs_file_aio_write,
779         .open = cifs_open,
780         .release = cifs_close,
781         .fsync = cifs_fsync,
782         .flush = cifs_flush,
783         .mmap  = cifs_file_mmap,
784         .splice_read = generic_file_splice_read,
785         .llseek = cifs_llseek,
786 #ifdef CONFIG_CIFS_POSIX
787         .unlocked_ioctl = cifs_ioctl,
788 #endif /* CONFIG_CIFS_POSIX */
789
790 #ifdef CONFIG_CIFS_EXPERIMENTAL
791         .setlease = cifs_setlease,
792 #endif /* CONFIG_CIFS_EXPERIMENTAL */
793 };
794
795 const struct file_operations cifs_file_direct_nobrl_ops = {
796         /* no mmap, no aio, no readv -
797            BB reevaluate whether they can be done with directio, no cache */
798         .read = cifs_user_read,
799         .write = cifs_user_write,
800         .open = cifs_open,
801         .release = cifs_close,
802         .fsync = cifs_fsync,
803         .flush = cifs_flush,
804         .splice_read = generic_file_splice_read,
805 #ifdef CONFIG_CIFS_POSIX
806         .unlocked_ioctl  = cifs_ioctl,
807 #endif /* CONFIG_CIFS_POSIX */
808         .llseek = cifs_llseek,
809 #ifdef CONFIG_CIFS_EXPERIMENTAL
810         .setlease = cifs_setlease,
811 #endif /* CONFIG_CIFS_EXPERIMENTAL */
812 };
813
814 const struct file_operations cifs_dir_ops = {
815         .readdir = cifs_readdir,
816         .release = cifs_closedir,
817         .read    = generic_read_dir,
818         .unlocked_ioctl  = cifs_ioctl,
819         .llseek = generic_file_llseek,
820 };
821
822 static void
823 cifs_init_once(void *inode)
824 {
825         struct cifsInodeInfo *cifsi = inode;
826
827         inode_init_once(&cifsi->vfs_inode);
828         INIT_LIST_HEAD(&cifsi->lockList);
829 }
830
831 static int
832 cifs_init_inodecache(void)
833 {
834         cifs_inode_cachep = kmem_cache_create("cifs_inode_cache",
835                                               sizeof(struct cifsInodeInfo),
836                                               0, (SLAB_RECLAIM_ACCOUNT|
837                                                 SLAB_MEM_SPREAD),
838                                               cifs_init_once);
839         if (cifs_inode_cachep == NULL)
840                 return -ENOMEM;
841
842         return 0;
843 }
844
845 static void
846 cifs_destroy_inodecache(void)
847 {
848         kmem_cache_destroy(cifs_inode_cachep);
849 }
850
851 static int
852 cifs_init_request_bufs(void)
853 {
854         if (CIFSMaxBufSize < 8192) {
855         /* Buffer size can not be smaller than 2 * PATH_MAX since maximum
856         Unicode path name has to fit in any SMB/CIFS path based frames */
857                 CIFSMaxBufSize = 8192;
858         } else if (CIFSMaxBufSize > 1024*127) {
859                 CIFSMaxBufSize = 1024 * 127;
860         } else {
861                 CIFSMaxBufSize &= 0x1FE00; /* Round size to even 512 byte mult*/
862         }
863 /*      cERROR(1,("CIFSMaxBufSize %d 0x%x",CIFSMaxBufSize,CIFSMaxBufSize)); */
864         cifs_req_cachep = kmem_cache_create("cifs_request",
865                                             CIFSMaxBufSize +
866                                             MAX_CIFS_HDR_SIZE, 0,
867                                             SLAB_HWCACHE_ALIGN, NULL);
868         if (cifs_req_cachep == NULL)
869                 return -ENOMEM;
870
871         if (cifs_min_rcv < 1)
872                 cifs_min_rcv = 1;
873         else if (cifs_min_rcv > 64) {
874                 cifs_min_rcv = 64;
875                 cERROR(1, ("cifs_min_rcv set to maximum (64)"));
876         }
877
878         cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
879                                                   cifs_req_cachep);
880
881         if (cifs_req_poolp == NULL) {
882                 kmem_cache_destroy(cifs_req_cachep);
883                 return -ENOMEM;
884         }
885         /* MAX_CIFS_SMALL_BUFFER_SIZE bytes is enough for most SMB responses and
886         almost all handle based requests (but not write response, nor is it
887         sufficient for path based requests).  A smaller size would have
888         been more efficient (compacting multiple slab items on one 4k page)
889         for the case in which debug was on, but this larger size allows
890         more SMBs to use small buffer alloc and is still much more
891         efficient to alloc 1 per page off the slab compared to 17K (5page)
892         alloc of large cifs buffers even when page debugging is on */
893         cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq",
894                         MAX_CIFS_SMALL_BUFFER_SIZE, 0, SLAB_HWCACHE_ALIGN,
895                         NULL);
896         if (cifs_sm_req_cachep == NULL) {
897                 mempool_destroy(cifs_req_poolp);
898                 kmem_cache_destroy(cifs_req_cachep);
899                 return -ENOMEM;
900         }
901
902         if (cifs_min_small < 2)
903                 cifs_min_small = 2;
904         else if (cifs_min_small > 256) {
905                 cifs_min_small = 256;
906                 cFYI(1, ("cifs_min_small set to maximum (256)"));
907         }
908
909         cifs_sm_req_poolp = mempool_create_slab_pool(cifs_min_small,
910                                                      cifs_sm_req_cachep);
911
912         if (cifs_sm_req_poolp == NULL) {
913                 mempool_destroy(cifs_req_poolp);
914                 kmem_cache_destroy(cifs_req_cachep);
915                 kmem_cache_destroy(cifs_sm_req_cachep);
916                 return -ENOMEM;
917         }
918
919         return 0;
920 }
921
922 static void
923 cifs_destroy_request_bufs(void)
924 {
925         mempool_destroy(cifs_req_poolp);
926         kmem_cache_destroy(cifs_req_cachep);
927         mempool_destroy(cifs_sm_req_poolp);
928         kmem_cache_destroy(cifs_sm_req_cachep);
929 }
930
931 static int
932 cifs_init_mids(void)
933 {
934         cifs_mid_cachep = kmem_cache_create("cifs_mpx_ids",
935                                             sizeof(struct mid_q_entry), 0,
936                                             SLAB_HWCACHE_ALIGN, NULL);
937         if (cifs_mid_cachep == NULL)
938                 return -ENOMEM;
939
940         /* 3 is a reasonable minimum number of simultaneous operations */
941         cifs_mid_poolp = mempool_create_slab_pool(3, cifs_mid_cachep);
942         if (cifs_mid_poolp == NULL) {
943                 kmem_cache_destroy(cifs_mid_cachep);
944                 return -ENOMEM;
945         }
946
947         cifs_oplock_cachep = kmem_cache_create("cifs_oplock_structs",
948                                         sizeof(struct oplock_q_entry), 0,
949                                         SLAB_HWCACHE_ALIGN, NULL);
950         if (cifs_oplock_cachep == NULL) {
951                 mempool_destroy(cifs_mid_poolp);
952                 kmem_cache_destroy(cifs_mid_cachep);
953                 return -ENOMEM;
954         }
955
956         return 0;
957 }
958
959 static void
960 cifs_destroy_mids(void)
961 {
962         mempool_destroy(cifs_mid_poolp);
963         kmem_cache_destroy(cifs_mid_cachep);
964         kmem_cache_destroy(cifs_oplock_cachep);
965 }
966
967 static int cifs_oplock_thread(void *dummyarg)
968 {
969         struct oplock_q_entry *oplock_item;
970         struct cifsTconInfo *pTcon;
971         struct inode *inode;
972         __u16  netfid;
973         int rc, waitrc = 0;
974
975         set_freezable();
976         do {
977                 if (try_to_freeze())
978                         continue;
979
980                 spin_lock(&GlobalMid_Lock);
981                 if (list_empty(&GlobalOplock_Q)) {
982                         spin_unlock(&GlobalMid_Lock);
983                         set_current_state(TASK_INTERRUPTIBLE);
984                         schedule_timeout(39*HZ);
985                 } else {
986                         oplock_item = list_entry(GlobalOplock_Q.next,
987                                                 struct oplock_q_entry, qhead);
988                         cFYI(1, ("found oplock item to write out"));
989                         pTcon = oplock_item->tcon;
990                         inode = oplock_item->pinode;
991                         netfid = oplock_item->netfid;
992                         spin_unlock(&GlobalMid_Lock);
993                         DeleteOplockQEntry(oplock_item);
994                         /* can not grab inode sem here since it would
995                                 deadlock when oplock received on delete
996                                 since vfs_unlink holds the i_mutex across
997                                 the call */
998                         /* mutex_lock(&inode->i_mutex);*/
999                         if (S_ISREG(inode->i_mode)) {
1000 #ifdef CONFIG_CIFS_EXPERIMENTAL
1001                                 if (CIFS_I(inode)->clientCanCacheAll == 0)
1002                                         break_lease(inode, FMODE_READ);
1003                                 else if (CIFS_I(inode)->clientCanCacheRead == 0)
1004                                         break_lease(inode, FMODE_WRITE);
1005 #endif
1006                                 rc = filemap_fdatawrite(inode->i_mapping);
1007                                 if (CIFS_I(inode)->clientCanCacheRead == 0) {
1008                                         waitrc = filemap_fdatawait(
1009                                                               inode->i_mapping);
1010                                         invalidate_remote_inode(inode);
1011                                 }
1012                                 if (rc == 0)
1013                                         rc = waitrc;
1014                         } else
1015                                 rc = 0;
1016                         /* mutex_unlock(&inode->i_mutex);*/
1017                         if (rc)
1018                                 CIFS_I(inode)->write_behind_rc = rc;
1019                         cFYI(1, ("Oplock flush inode %p rc %d",
1020                                 inode, rc));
1021
1022                                 /* releasing stale oplock after recent reconnect
1023                                 of smb session using a now incorrect file
1024                                 handle is not a data integrity issue but do
1025                                 not bother sending an oplock release if session
1026                                 to server still is disconnected since oplock
1027                                 already released by the server in that case */
1028                         if (!pTcon->need_reconnect) {
1029                                 rc = CIFSSMBLock(0, pTcon, netfid,
1030                                                 0 /* len */ , 0 /* offset */, 0,
1031                                                 0, LOCKING_ANDX_OPLOCK_RELEASE,
1032                                                 false /* wait flag */);
1033                                 cFYI(1, ("Oplock release rc = %d", rc));
1034                         }
1035                         set_current_state(TASK_INTERRUPTIBLE);
1036                         schedule_timeout(1);  /* yield in case q were corrupt */
1037                 }
1038         } while (!kthread_should_stop());
1039
1040         return 0;
1041 }
1042
1043 #ifdef CONFIG_CIFS_EXPERIMENTAL
1044 static int cifs_dnotify_thread(void *dummyarg)
1045 {
1046         struct list_head *tmp;
1047         struct TCP_Server_Info *server;
1048
1049         do {
1050                 if (try_to_freeze())
1051                         continue;
1052                 set_current_state(TASK_INTERRUPTIBLE);
1053                 schedule_timeout(15*HZ);
1054                 /* check if any stuck requests that need
1055                    to be woken up and wakeq so the
1056                    thread can wake up and error out */
1057                 read_lock(&cifs_tcp_ses_lock);
1058                 list_for_each(tmp, &cifs_tcp_ses_list) {
1059                         server = list_entry(tmp, struct TCP_Server_Info,
1060                                          tcp_ses_list);
1061                         if (atomic_read(&server->inFlight))
1062                                 wake_up_all(&server->response_q);
1063                 }
1064                 read_unlock(&cifs_tcp_ses_lock);
1065         } while (!kthread_should_stop());
1066
1067         return 0;
1068 }
1069 #endif
1070
1071 static int __init
1072 init_cifs(void)
1073 {
1074         int rc = 0;
1075         cifs_proc_init();
1076         INIT_LIST_HEAD(&cifs_tcp_ses_list);
1077         INIT_LIST_HEAD(&GlobalOplock_Q);
1078 #ifdef CONFIG_CIFS_EXPERIMENTAL
1079         INIT_LIST_HEAD(&GlobalDnotifyReqList);
1080         INIT_LIST_HEAD(&GlobalDnotifyRsp_Q);
1081 #endif
1082 /*
1083  *  Initialize Global counters
1084  */
1085         atomic_set(&sesInfoAllocCount, 0);
1086         atomic_set(&tconInfoAllocCount, 0);
1087         atomic_set(&tcpSesAllocCount, 0);
1088         atomic_set(&tcpSesReconnectCount, 0);
1089         atomic_set(&tconInfoReconnectCount, 0);
1090
1091         atomic_set(&bufAllocCount, 0);
1092         atomic_set(&smBufAllocCount, 0);
1093 #ifdef CONFIG_CIFS_STATS2
1094         atomic_set(&totBufAllocCount, 0);
1095         atomic_set(&totSmBufAllocCount, 0);
1096 #endif /* CONFIG_CIFS_STATS2 */
1097
1098         atomic_set(&midCount, 0);
1099         GlobalCurrentXid = 0;
1100         GlobalTotalActiveXid = 0;
1101         GlobalMaxActiveXid = 0;
1102         memset(Local_System_Name, 0, 15);
1103         rwlock_init(&GlobalSMBSeslock);
1104         rwlock_init(&cifs_tcp_ses_lock);
1105         spin_lock_init(&GlobalMid_Lock);
1106
1107         if (cifs_max_pending < 2) {
1108                 cifs_max_pending = 2;
1109                 cFYI(1, ("cifs_max_pending set to min of 2"));
1110         } else if (cifs_max_pending > 256) {
1111                 cifs_max_pending = 256;
1112                 cFYI(1, ("cifs_max_pending set to max of 256"));
1113         }
1114
1115         rc = cifs_init_inodecache();
1116         if (rc)
1117                 goto out_clean_proc;
1118
1119         rc = cifs_init_mids();
1120         if (rc)
1121                 goto out_destroy_inodecache;
1122
1123         rc = cifs_init_request_bufs();
1124         if (rc)
1125                 goto out_destroy_mids;
1126
1127         rc = register_filesystem(&cifs_fs_type);
1128         if (rc)
1129                 goto out_destroy_request_bufs;
1130 #ifdef CONFIG_CIFS_UPCALL
1131         rc = register_key_type(&cifs_spnego_key_type);
1132         if (rc)
1133                 goto out_unregister_filesystem;
1134 #endif
1135 #ifdef CONFIG_CIFS_DFS_UPCALL
1136         rc = register_key_type(&key_type_dns_resolver);
1137         if (rc)
1138                 goto out_unregister_key_type;
1139 #endif
1140         oplockThread = kthread_run(cifs_oplock_thread, NULL, "cifsoplockd");
1141         if (IS_ERR(oplockThread)) {
1142                 rc = PTR_ERR(oplockThread);
1143                 cERROR(1, ("error %d create oplock thread", rc));
1144                 goto out_unregister_dfs_key_type;
1145         }
1146
1147 #ifdef CONFIG_CIFS_EXPERIMENTAL
1148         dnotifyThread = kthread_run(cifs_dnotify_thread, NULL, "cifsdnotifyd");
1149         if (IS_ERR(dnotifyThread)) {
1150                 rc = PTR_ERR(dnotifyThread);
1151                 cERROR(1, ("error %d create dnotify thread", rc));
1152                 goto out_stop_oplock_thread;
1153         }
1154 #endif
1155
1156         return 0;
1157
1158 #ifdef CONFIG_CIFS_EXPERIMENTAL
1159  out_stop_oplock_thread:
1160 #endif
1161         kthread_stop(oplockThread);
1162  out_unregister_dfs_key_type:
1163 #ifdef CONFIG_CIFS_DFS_UPCALL
1164         unregister_key_type(&key_type_dns_resolver);
1165  out_unregister_key_type:
1166 #endif
1167 #ifdef CONFIG_CIFS_UPCALL
1168         unregister_key_type(&cifs_spnego_key_type);
1169  out_unregister_filesystem:
1170 #endif
1171         unregister_filesystem(&cifs_fs_type);
1172  out_destroy_request_bufs:
1173         cifs_destroy_request_bufs();
1174  out_destroy_mids:
1175         cifs_destroy_mids();
1176  out_destroy_inodecache:
1177         cifs_destroy_inodecache();
1178  out_clean_proc:
1179         cifs_proc_clean();
1180         return rc;
1181 }
1182
1183 static void __exit
1184 exit_cifs(void)
1185 {
1186         cFYI(DBG2, ("exit_cifs"));
1187         cifs_proc_clean();
1188 #ifdef CONFIG_CIFS_DFS_UPCALL
1189         cifs_dfs_release_automount_timer();
1190         unregister_key_type(&key_type_dns_resolver);
1191 #endif
1192 #ifdef CONFIG_CIFS_UPCALL
1193         unregister_key_type(&cifs_spnego_key_type);
1194 #endif
1195         unregister_filesystem(&cifs_fs_type);
1196         cifs_destroy_inodecache();
1197         cifs_destroy_mids();
1198         cifs_destroy_request_bufs();
1199 #ifdef CONFIG_CIFS_EXPERIMENTAL
1200         kthread_stop(dnotifyThread);
1201 #endif
1202         kthread_stop(oplockThread);
1203 }
1204
1205 MODULE_AUTHOR("Steve French <sfrench@us.ibm.com>");
1206 MODULE_LICENSE("GPL");  /* combination of LGPL + GPL source behaves as GPL */
1207 MODULE_DESCRIPTION
1208     ("VFS to access servers complying with the SNIA CIFS Specification "
1209      "e.g. Samba and Windows");
1210 MODULE_VERSION(CIFS_VERSION);
1211 module_init(init_cifs)
1212 module_exit(exit_cifs)