Merge branch 'topic/asoc' into for-linus
[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 <linux/smp_lock.h>
39 #include "cifsfs.h"
40 #include "cifspdu.h"
41 #define DECLARE_GLOBALS_HERE
42 #include "cifsglob.h"
43 #include "cifsproto.h"
44 #include "cifs_debug.h"
45 #include "cifs_fs_sb.h"
46 #include <linux/mm.h>
47 #include <linux/key-type.h>
48 #include "dns_resolve.h"
49 #include "cifs_spnego.h"
50 #define CIFS_MAGIC_NUMBER 0xFF534D42    /* the first four bytes of SMB PDUs */
51
52 #ifdef CONFIG_CIFS_QUOTA
53 static struct quotactl_ops cifs_quotactl_ops;
54 #endif /* QUOTA */
55
56 int cifsFYI = 0;
57 int cifsERROR = 1;
58 int traceSMB = 0;
59 unsigned int oplockEnabled = 1;
60 unsigned int experimEnabled = 0;
61 unsigned int linuxExtEnabled = 1;
62 unsigned int lookupCacheEnabled = 1;
63 unsigned int multiuser_mount = 0;
64 unsigned int extended_security = CIFSSEC_DEF;
65 /* unsigned int ntlmv2_support = 0; */
66 unsigned int sign_CIFS_PDUs = 1;
67 extern struct task_struct *oplockThread; /* remove sparse warning */
68 struct task_struct *oplockThread = NULL;
69 /* extern struct task_struct * dnotifyThread; remove sparse warning */
70 static const struct super_operations cifs_super_ops;
71 unsigned int CIFSMaxBufSize = CIFS_MAX_MSGSIZE;
72 module_param(CIFSMaxBufSize, int, 0);
73 MODULE_PARM_DESC(CIFSMaxBufSize, "Network buffer size (not including header). "
74                                  "Default: 16384 Range: 8192 to 130048");
75 unsigned int cifs_min_rcv = CIFS_MIN_RCV_POOL;
76 module_param(cifs_min_rcv, int, 0);
77 MODULE_PARM_DESC(cifs_min_rcv, "Network buffers in pool. Default: 4 Range: "
78                                 "1 to 64");
79 unsigned int cifs_min_small = 30;
80 module_param(cifs_min_small, int, 0);
81 MODULE_PARM_DESC(cifs_min_small, "Small network buffers in pool. Default: 30 "
82                                  "Range: 2 to 256");
83 unsigned int cifs_max_pending = CIFS_MAX_REQ;
84 module_param(cifs_max_pending, int, 0);
85 MODULE_PARM_DESC(cifs_max_pending, "Simultaneous requests to server. "
86                                    "Default: 50 Range: 2 to 256");
87
88 extern mempool_t *cifs_sm_req_poolp;
89 extern mempool_t *cifs_req_poolp;
90 extern mempool_t *cifs_mid_poolp;
91
92 extern struct kmem_cache *cifs_oplock_cachep;
93
94 static int
95 cifs_read_super(struct super_block *sb, void *data,
96                 const char *devname, int silent)
97 {
98         struct inode *inode;
99         struct cifs_sb_info *cifs_sb;
100         int rc = 0;
101
102         /* BB should we make this contingent on mount parm? */
103         sb->s_flags |= MS_NODIRATIME | MS_NOATIME;
104         sb->s_fs_info = kzalloc(sizeof(struct cifs_sb_info), GFP_KERNEL);
105         cifs_sb = CIFS_SB(sb);
106         if (cifs_sb == NULL)
107                 return -ENOMEM;
108
109 #ifdef CONFIG_CIFS_DFS_UPCALL
110         /* copy mount params to sb for use in submounts */
111         /* BB: should we move this after the mount so we
112          * do not have to do the copy on failed mounts?
113          * BB: May be it is better to do simple copy before
114          * complex operation (mount), and in case of fail
115          * just exit instead of doing mount and attempting
116          * undo it if this copy fails?*/
117         if (data) {
118                 int len = strlen(data);
119                 cifs_sb->mountdata = kzalloc(len + 1, GFP_KERNEL);
120                 if (cifs_sb->mountdata == NULL) {
121                         kfree(sb->s_fs_info);
122                         sb->s_fs_info = NULL;
123                         return -ENOMEM;
124                 }
125                 strncpy(cifs_sb->mountdata, data, len + 1);
126                 cifs_sb->mountdata[len] = '\0';
127         }
128 #endif
129
130         rc = cifs_mount(sb, cifs_sb, data, devname);
131
132         if (rc) {
133                 if (!silent)
134                         cERROR(1,
135                                ("cifs_mount failed w/return code = %d", rc));
136                 goto out_mount_failed;
137         }
138
139         sb->s_magic = CIFS_MAGIC_NUMBER;
140         sb->s_op = &cifs_super_ops;
141 /*      if (cifs_sb->tcon->ses->server->maxBuf > MAX_CIFS_HDR_SIZE + 512)
142             sb->s_blocksize =
143                 cifs_sb->tcon->ses->server->maxBuf - MAX_CIFS_HDR_SIZE; */
144 #ifdef CONFIG_CIFS_QUOTA
145         sb->s_qcop = &cifs_quotactl_ops;
146 #endif
147         sb->s_blocksize = CIFS_MAX_MSGSIZE;
148         sb->s_blocksize_bits = 14;      /* default 2**14 = CIFS_MAX_MSGSIZE */
149         inode = cifs_iget(sb, ROOT_I);
150
151         if (IS_ERR(inode)) {
152                 rc = PTR_ERR(inode);
153                 inode = NULL;
154                 goto out_no_root;
155         }
156
157         sb->s_root = d_alloc_root(inode);
158
159         if (!sb->s_root) {
160                 rc = -ENOMEM;
161                 goto out_no_root;
162         }
163
164 #ifdef CONFIG_CIFS_EXPERIMENTAL
165         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
166                 cFYI(1, ("export ops supported"));
167                 sb->s_export_op = &cifs_export_ops;
168         }
169 #endif /* EXPERIMENTAL */
170
171         return 0;
172
173 out_no_root:
174         cERROR(1, ("cifs_read_super: get root inode failed"));
175         if (inode)
176                 iput(inode);
177
178         cifs_umount(sb, cifs_sb);
179
180 out_mount_failed:
181         if (cifs_sb) {
182 #ifdef CONFIG_CIFS_DFS_UPCALL
183                 if (cifs_sb->mountdata) {
184                         kfree(cifs_sb->mountdata);
185                         cifs_sb->mountdata = NULL;
186                 }
187 #endif
188                 if (cifs_sb->local_nls)
189                         unload_nls(cifs_sb->local_nls);
190                 kfree(cifs_sb);
191         }
192         return rc;
193 }
194
195 static void
196 cifs_put_super(struct super_block *sb)
197 {
198         int rc = 0;
199         struct cifs_sb_info *cifs_sb;
200
201         cFYI(1, ("In cifs_put_super"));
202         cifs_sb = CIFS_SB(sb);
203         if (cifs_sb == NULL) {
204                 cFYI(1, ("Empty cifs superblock info passed to unmount"));
205                 return;
206         }
207         rc = cifs_umount(sb, cifs_sb);
208         if (rc)
209                 cERROR(1, ("cifs_umount failed with return code %d", rc));
210 #ifdef CONFIG_CIFS_DFS_UPCALL
211         if (cifs_sb->mountdata) {
212                 kfree(cifs_sb->mountdata);
213                 cifs_sb->mountdata = NULL;
214         }
215 #endif
216
217         unload_nls(cifs_sb->local_nls);
218         kfree(cifs_sb);
219         return;
220 }
221
222 static int
223 cifs_statfs(struct dentry *dentry, struct kstatfs *buf)
224 {
225         struct super_block *sb = dentry->d_sb;
226         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
227         struct cifsTconInfo *tcon = cifs_sb->tcon;
228         int rc = -EOPNOTSUPP;
229         int xid;
230
231         xid = GetXid();
232
233         buf->f_type = CIFS_MAGIC_NUMBER;
234
235         /*
236          * PATH_MAX may be too long - it would presumably be total path,
237          * but note that some servers (includinng Samba 3) have a shorter
238          * maximum path.
239          *
240          * Instead could get the real value via SMB_QUERY_FS_ATTRIBUTE_INFO.
241          */
242         buf->f_namelen = PATH_MAX;
243         buf->f_files = 0;       /* undefined */
244         buf->f_ffree = 0;       /* unlimited */
245
246         /*
247          * We could add a second check for a QFS Unix capability bit
248          */
249         if ((tcon->ses->capabilities & CAP_UNIX) &&
250             (CIFS_POSIX_EXTENSIONS & le64_to_cpu(tcon->fsUnixInfo.Capability)))
251                 rc = CIFSSMBQFSPosixInfo(xid, tcon, buf);
252
253         /*
254          * Only need to call the old QFSInfo if failed on newer one,
255          * e.g. by OS/2.
256          **/
257         if (rc && (tcon->ses->capabilities & CAP_NT_SMBS))
258                 rc = CIFSSMBQFSInfo(xid, tcon, buf);
259
260         /*
261          * Some old Windows servers also do not support level 103, retry with
262          * older level one if old server failed the previous call or we
263          * bypassed it because we detected that this was an older LANMAN sess
264          */
265         if (rc)
266                 rc = SMBOldQFSInfo(xid, tcon, buf);
267
268         FreeXid(xid);
269         return 0;
270 }
271
272 static int cifs_permission(struct inode *inode, int mask)
273 {
274         struct cifs_sb_info *cifs_sb;
275
276         cifs_sb = CIFS_SB(inode->i_sb);
277
278         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) {
279                 if ((mask & MAY_EXEC) && !execute_ok(inode))
280                         return -EACCES;
281                 else
282                         return 0;
283         } else /* file mode might have been restricted at mount time
284                 on the client (above and beyond ACL on servers) for
285                 servers which do not support setting and viewing mode bits,
286                 so allowing client to check permissions is useful */
287                 return generic_permission(inode, mask, NULL);
288 }
289
290 static struct kmem_cache *cifs_inode_cachep;
291 static struct kmem_cache *cifs_req_cachep;
292 static struct kmem_cache *cifs_mid_cachep;
293 struct kmem_cache *cifs_oplock_cachep;
294 static struct kmem_cache *cifs_sm_req_cachep;
295 mempool_t *cifs_sm_req_poolp;
296 mempool_t *cifs_req_poolp;
297 mempool_t *cifs_mid_poolp;
298
299 static struct inode *
300 cifs_alloc_inode(struct super_block *sb)
301 {
302         struct cifsInodeInfo *cifs_inode;
303         cifs_inode = kmem_cache_alloc(cifs_inode_cachep, GFP_KERNEL);
304         if (!cifs_inode)
305                 return NULL;
306         cifs_inode->cifsAttrs = 0x20;   /* default */
307         atomic_set(&cifs_inode->inUse, 0);
308         cifs_inode->time = 0;
309         cifs_inode->write_behind_rc = 0;
310         /* Until the file is open and we have gotten oplock
311         info back from the server, can not assume caching of
312         file data or metadata */
313         cifs_inode->clientCanCacheRead = false;
314         cifs_inode->clientCanCacheAll = false;
315         cifs_inode->delete_pending = false;
316         cifs_inode->vfs_inode.i_blkbits = 14;  /* 2**14 = CIFS_MAX_MSGSIZE */
317         cifs_inode->server_eof = 0;
318
319         /* Can not set i_flags here - they get immediately overwritten
320            to zero by the VFS */
321 /*      cifs_inode->vfs_inode.i_flags = S_NOATIME | S_NOCMTIME;*/
322         INIT_LIST_HEAD(&cifs_inode->openFileList);
323         return &cifs_inode->vfs_inode;
324 }
325
326 static void
327 cifs_destroy_inode(struct inode *inode)
328 {
329         kmem_cache_free(cifs_inode_cachep, CIFS_I(inode));
330 }
331
332 /*
333  * cifs_show_options() is for displaying mount options in /proc/mounts.
334  * Not all settable options are displayed but most of the important
335  * ones are.
336  */
337 static int
338 cifs_show_options(struct seq_file *s, struct vfsmount *m)
339 {
340         struct cifs_sb_info *cifs_sb;
341         struct cifsTconInfo *tcon;
342         struct TCP_Server_Info *server;
343
344         cifs_sb = CIFS_SB(m->mnt_sb);
345
346         if (cifs_sb) {
347                 tcon = cifs_sb->tcon;
348                 if (tcon) {
349                         seq_printf(s, ",unc=%s", cifs_sb->tcon->treeName);
350                         if (tcon->ses) {
351                                 if (tcon->ses->userName)
352                                         seq_printf(s, ",username=%s",
353                                            tcon->ses->userName);
354                                 if (tcon->ses->domainName)
355                                         seq_printf(s, ",domain=%s",
356                                            tcon->ses->domainName);
357                                 server = tcon->ses->server;
358                                 if (server) {
359                                         seq_printf(s, ",addr=");
360                                         switch (server->addr.sockAddr6.
361                                                 sin6_family) {
362                                         case AF_INET6:
363                                                 seq_printf(s, "%pI6",
364                                                            &server->addr.sockAddr6.sin6_addr);
365                                                 break;
366                                         case AF_INET:
367                                                 seq_printf(s, "%pI4",
368                                                            &server->addr.sockAddr.sin_addr.s_addr);
369                                                 break;
370                                         }
371                                 }
372                         }
373                         if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID) ||
374                            !(tcon->unix_ext))
375                                 seq_printf(s, ",uid=%d", cifs_sb->mnt_uid);
376                         if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID) ||
377                            !(tcon->unix_ext))
378                                 seq_printf(s, ",gid=%d", cifs_sb->mnt_gid);
379                         if (!tcon->unix_ext) {
380                                 seq_printf(s, ",file_mode=0%o,dir_mode=0%o",
381                                            cifs_sb->mnt_file_mode,
382                                            cifs_sb->mnt_dir_mode);
383                         }
384                         if (tcon->seal)
385                                 seq_printf(s, ",seal");
386                         if (tcon->nocase)
387                                 seq_printf(s, ",nocase");
388                         if (tcon->retry)
389                                 seq_printf(s, ",hard");
390                 }
391                 if (cifs_sb->prepath)
392                         seq_printf(s, ",prepath=%s", cifs_sb->prepath);
393                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
394                         seq_printf(s, ",posixpaths");
395                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)
396                         seq_printf(s, ",setuids");
397                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)
398                         seq_printf(s, ",serverino");
399                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
400                         seq_printf(s, ",directio");
401                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)
402                         seq_printf(s, ",nouser_xattr");
403                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR)
404                         seq_printf(s, ",mapchars");
405                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)
406                         seq_printf(s, ",sfu");
407                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
408                         seq_printf(s, ",nobrl");
409                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL)
410                         seq_printf(s, ",cifsacl");
411                 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)
412                         seq_printf(s, ",dynperm");
413                 if (m->mnt_sb->s_flags & MS_POSIXACL)
414                         seq_printf(s, ",acl");
415
416                 seq_printf(s, ",rsize=%d", cifs_sb->rsize);
417                 seq_printf(s, ",wsize=%d", cifs_sb->wsize);
418         }
419         return 0;
420 }
421
422 #ifdef CONFIG_CIFS_QUOTA
423 int cifs_xquota_set(struct super_block *sb, int quota_type, qid_t qid,
424                 struct fs_disk_quota *pdquota)
425 {
426         int xid;
427         int rc = 0;
428         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
429         struct cifsTconInfo *pTcon;
430
431         if (cifs_sb)
432                 pTcon = cifs_sb->tcon;
433         else
434                 return -EIO;
435
436
437         xid = GetXid();
438         if (pTcon) {
439                 cFYI(1, ("set type: 0x%x id: %d", quota_type, qid));
440         } else
441                 rc = -EIO;
442
443         FreeXid(xid);
444         return rc;
445 }
446
447 int cifs_xquota_get(struct super_block *sb, int quota_type, qid_t qid,
448                     struct fs_disk_quota *pdquota)
449 {
450         int xid;
451         int rc = 0;
452         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
453         struct cifsTconInfo *pTcon;
454
455         if (cifs_sb)
456                 pTcon = cifs_sb->tcon;
457         else
458                 return -EIO;
459
460         xid = GetXid();
461         if (pTcon) {
462                 cFYI(1, ("set type: 0x%x id: %d", quota_type, qid));
463         } else
464                 rc = -EIO;
465
466         FreeXid(xid);
467         return rc;
468 }
469
470 int cifs_xstate_set(struct super_block *sb, unsigned int flags, int operation)
471 {
472         int xid;
473         int rc = 0;
474         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
475         struct cifsTconInfo *pTcon;
476
477         if (cifs_sb)
478                 pTcon = cifs_sb->tcon;
479         else
480                 return -EIO;
481
482         xid = GetXid();
483         if (pTcon) {
484                 cFYI(1, ("flags: 0x%x operation: 0x%x", flags, operation));
485         } else
486                 rc = -EIO;
487
488         FreeXid(xid);
489         return rc;
490 }
491
492 int cifs_xstate_get(struct super_block *sb, struct fs_quota_stat *qstats)
493 {
494         int xid;
495         int rc = 0;
496         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
497         struct cifsTconInfo *pTcon;
498
499         if (cifs_sb)
500                 pTcon = cifs_sb->tcon;
501         else
502                 return -EIO;
503
504         xid = GetXid();
505         if (pTcon) {
506                 cFYI(1, ("pqstats %p", qstats));
507         } else
508                 rc = -EIO;
509
510         FreeXid(xid);
511         return rc;
512 }
513
514 static struct quotactl_ops cifs_quotactl_ops = {
515         .set_xquota     = cifs_xquota_set,
516         .get_xquota     = cifs_xquota_get,
517         .set_xstate     = cifs_xstate_set,
518         .get_xstate     = cifs_xstate_get,
519 };
520 #endif
521
522 static void cifs_umount_begin(struct super_block *sb)
523 {
524         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
525         struct cifsTconInfo *tcon;
526
527         if (cifs_sb == NULL)
528                 return;
529
530         tcon = cifs_sb->tcon;
531         if (tcon == NULL)
532                 return;
533
534         lock_kernel();
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         unlock_kernel();
554         return;
555 }
556
557 #ifdef CONFIG_CIFS_STATS2
558 static int cifs_show_stats(struct seq_file *s, struct vfsmount *mnt)
559 {
560         /* BB FIXME */
561         return 0;
562 }
563 #endif
564
565 static int cifs_remount(struct super_block *sb, int *flags, char *data)
566 {
567         *flags |= MS_NODIRATIME;
568         return 0;
569 }
570
571 static const struct super_operations cifs_super_ops = {
572         .put_super = cifs_put_super,
573         .statfs = cifs_statfs,
574         .alloc_inode = cifs_alloc_inode,
575         .destroy_inode = cifs_destroy_inode,
576 /*      .drop_inode         = generic_delete_inode,
577         .delete_inode   = cifs_delete_inode,  */  /* Do not need above two
578         functions unless later we add lazy close of inodes or unless the
579         kernel forgets to call us with the same number of releases (closes)
580         as opens */
581         .show_options = cifs_show_options,
582         .umount_begin   = cifs_umount_begin,
583         .remount_fs = cifs_remount,
584 #ifdef CONFIG_CIFS_STATS2
585         .show_stats = cifs_show_stats,
586 #endif
587 };
588
589 static int
590 cifs_get_sb(struct file_system_type *fs_type,
591             int flags, const char *dev_name, void *data, struct vfsmount *mnt)
592 {
593         int rc;
594         struct super_block *sb = sget(fs_type, NULL, set_anon_super, NULL);
595
596         cFYI(1, ("Devname: %s flags: %d ", dev_name, flags));
597
598         if (IS_ERR(sb))
599                 return PTR_ERR(sb);
600
601         sb->s_flags = flags;
602
603         rc = cifs_read_super(sb, data, dev_name, flags & MS_SILENT ? 1 : 0);
604         if (rc) {
605                 deactivate_locked_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 static int __init
1044 init_cifs(void)
1045 {
1046         int rc = 0;
1047         cifs_proc_init();
1048         INIT_LIST_HEAD(&cifs_tcp_ses_list);
1049         INIT_LIST_HEAD(&GlobalOplock_Q);
1050 #ifdef CONFIG_CIFS_EXPERIMENTAL
1051         INIT_LIST_HEAD(&GlobalDnotifyReqList);
1052         INIT_LIST_HEAD(&GlobalDnotifyRsp_Q);
1053 #endif
1054 /*
1055  *  Initialize Global counters
1056  */
1057         atomic_set(&sesInfoAllocCount, 0);
1058         atomic_set(&tconInfoAllocCount, 0);
1059         atomic_set(&tcpSesAllocCount, 0);
1060         atomic_set(&tcpSesReconnectCount, 0);
1061         atomic_set(&tconInfoReconnectCount, 0);
1062
1063         atomic_set(&bufAllocCount, 0);
1064         atomic_set(&smBufAllocCount, 0);
1065 #ifdef CONFIG_CIFS_STATS2
1066         atomic_set(&totBufAllocCount, 0);
1067         atomic_set(&totSmBufAllocCount, 0);
1068 #endif /* CONFIG_CIFS_STATS2 */
1069
1070         atomic_set(&midCount, 0);
1071         GlobalCurrentXid = 0;
1072         GlobalTotalActiveXid = 0;
1073         GlobalMaxActiveXid = 0;
1074         memset(Local_System_Name, 0, 15);
1075         rwlock_init(&GlobalSMBSeslock);
1076         rwlock_init(&cifs_tcp_ses_lock);
1077         spin_lock_init(&GlobalMid_Lock);
1078
1079         if (cifs_max_pending < 2) {
1080                 cifs_max_pending = 2;
1081                 cFYI(1, ("cifs_max_pending set to min of 2"));
1082         } else if (cifs_max_pending > 256) {
1083                 cifs_max_pending = 256;
1084                 cFYI(1, ("cifs_max_pending set to max of 256"));
1085         }
1086
1087         rc = cifs_init_inodecache();
1088         if (rc)
1089                 goto out_clean_proc;
1090
1091         rc = cifs_init_mids();
1092         if (rc)
1093                 goto out_destroy_inodecache;
1094
1095         rc = cifs_init_request_bufs();
1096         if (rc)
1097                 goto out_destroy_mids;
1098
1099         rc = register_filesystem(&cifs_fs_type);
1100         if (rc)
1101                 goto out_destroy_request_bufs;
1102 #ifdef CONFIG_CIFS_UPCALL
1103         rc = register_key_type(&cifs_spnego_key_type);
1104         if (rc)
1105                 goto out_unregister_filesystem;
1106 #endif
1107 #ifdef CONFIG_CIFS_DFS_UPCALL
1108         rc = register_key_type(&key_type_dns_resolver);
1109         if (rc)
1110                 goto out_unregister_key_type;
1111 #endif
1112         oplockThread = kthread_run(cifs_oplock_thread, NULL, "cifsoplockd");
1113         if (IS_ERR(oplockThread)) {
1114                 rc = PTR_ERR(oplockThread);
1115                 cERROR(1, ("error %d create oplock thread", rc));
1116                 goto out_unregister_dfs_key_type;
1117         }
1118
1119         return 0;
1120
1121  out_unregister_dfs_key_type:
1122 #ifdef CONFIG_CIFS_DFS_UPCALL
1123         unregister_key_type(&key_type_dns_resolver);
1124  out_unregister_key_type:
1125 #endif
1126 #ifdef CONFIG_CIFS_UPCALL
1127         unregister_key_type(&cifs_spnego_key_type);
1128  out_unregister_filesystem:
1129 #endif
1130         unregister_filesystem(&cifs_fs_type);
1131  out_destroy_request_bufs:
1132         cifs_destroy_request_bufs();
1133  out_destroy_mids:
1134         cifs_destroy_mids();
1135  out_destroy_inodecache:
1136         cifs_destroy_inodecache();
1137  out_clean_proc:
1138         cifs_proc_clean();
1139         return rc;
1140 }
1141
1142 static void __exit
1143 exit_cifs(void)
1144 {
1145         cFYI(DBG2, ("exit_cifs"));
1146         cifs_proc_clean();
1147 #ifdef CONFIG_CIFS_DFS_UPCALL
1148         cifs_dfs_release_automount_timer();
1149         unregister_key_type(&key_type_dns_resolver);
1150 #endif
1151 #ifdef CONFIG_CIFS_UPCALL
1152         unregister_key_type(&cifs_spnego_key_type);
1153 #endif
1154         unregister_filesystem(&cifs_fs_type);
1155         cifs_destroy_inodecache();
1156         cifs_destroy_mids();
1157         cifs_destroy_request_bufs();
1158         kthread_stop(oplockThread);
1159 }
1160
1161 MODULE_AUTHOR("Steve French <sfrench@us.ibm.com>");
1162 MODULE_LICENSE("GPL");  /* combination of LGPL + GPL source behaves as GPL */
1163 MODULE_DESCRIPTION
1164     ("VFS to access servers complying with the SNIA CIFS Specification "
1165      "e.g. Samba and Windows");
1166 MODULE_VERSION(CIFS_VERSION);
1167 module_init(init_cifs)
1168 module_exit(exit_cifs)