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