]> Pileus Git - ~andy/linux/blob - fs/cifs/cifsfs.c
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
[~andy/linux] / 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 /*
337  * cifs_show_options() is for displaying mount options in /proc/mounts.
338  * Not all settable options are displayed but most of the important
339  * ones are.
340  */
341 static int
342 cifs_show_options(struct seq_file *s, struct vfsmount *m)
343 {
344         struct cifs_sb_info *cifs_sb;
345         struct cifsTconInfo *tcon;
346         struct TCP_Server_Info *server;
347
348         cifs_sb = CIFS_SB(m->mnt_sb);
349         tcon = cifs_sb->tcon;
350
351         seq_printf(s, ",unc=%s", cifs_sb->tcon->treeName);
352         if (tcon->ses->userName)
353                 seq_printf(s, ",username=%s", tcon->ses->userName);
354         if (tcon->ses->domainName)
355                 seq_printf(s, ",domain=%s", tcon->ses->domainName);
356
357         cifs_show_address(s, tcon->ses->server);
358
359         seq_printf(s, ",uid=%d", cifs_sb->mnt_uid);
360         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID)
361                 seq_printf(s, ",forceuid");
362
363         seq_printf(s, ",gid=%d", cifs_sb->mnt_gid);
364         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID)
365                 seq_printf(s, ",forcegid");
366
367         server = tcon->ses->server;
368         seq_printf(s, ",addr=");
369         switch (server->addr.sockAddr6.sin6_family) {
370         case AF_INET6:
371                 seq_printf(s, "%pI6", &server->addr.sockAddr6.sin6_addr);
372                 break;
373         case AF_INET:
374                 seq_printf(s, "%pI4", &server->addr.sockAddr.sin_addr.s_addr);
375                 break;
376         }
377
378         if (!tcon->unix_ext)
379                 seq_printf(s, ",file_mode=0%o,dir_mode=0%o",
380                                            cifs_sb->mnt_file_mode,
381                                            cifs_sb->mnt_dir_mode);
382         if (tcon->seal)
383                 seq_printf(s, ",seal");
384         if (tcon->nocase)
385                 seq_printf(s, ",nocase");
386         if (tcon->retry)
387                 seq_printf(s, ",hard");
388         if (cifs_sb->prepath)
389                 seq_printf(s, ",prepath=%s", cifs_sb->prepath);
390         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
391                 seq_printf(s, ",posixpaths");
392         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)
393                 seq_printf(s, ",setuids");
394         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)
395                 seq_printf(s, ",serverino");
396         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
397                 seq_printf(s, ",directio");
398         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)
399                 seq_printf(s, ",nouser_xattr");
400         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR)
401                 seq_printf(s, ",mapchars");
402         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)
403                 seq_printf(s, ",sfu");
404         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
405                 seq_printf(s, ",nobrl");
406         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL)
407                 seq_printf(s, ",cifsacl");
408         if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)
409                 seq_printf(s, ",dynperm");
410         if (m->mnt_sb->s_flags & MS_POSIXACL)
411                 seq_printf(s, ",acl");
412
413         seq_printf(s, ",rsize=%d", cifs_sb->rsize);
414         seq_printf(s, ",wsize=%d", cifs_sb->wsize);
415
416         return 0;
417 }
418
419 #ifdef CONFIG_CIFS_QUOTA
420 int cifs_xquota_set(struct super_block *sb, int quota_type, qid_t qid,
421                 struct fs_disk_quota *pdquota)
422 {
423         int xid;
424         int rc = 0;
425         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
426         struct cifsTconInfo *pTcon;
427
428         if (cifs_sb)
429                 pTcon = cifs_sb->tcon;
430         else
431                 return -EIO;
432
433
434         xid = GetXid();
435         if (pTcon) {
436                 cFYI(1, ("set type: 0x%x id: %d", quota_type, qid));
437         } else
438                 rc = -EIO;
439
440         FreeXid(xid);
441         return rc;
442 }
443
444 int cifs_xquota_get(struct super_block *sb, int quota_type, qid_t qid,
445                     struct fs_disk_quota *pdquota)
446 {
447         int xid;
448         int rc = 0;
449         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
450         struct cifsTconInfo *pTcon;
451
452         if (cifs_sb)
453                 pTcon = cifs_sb->tcon;
454         else
455                 return -EIO;
456
457         xid = GetXid();
458         if (pTcon) {
459                 cFYI(1, ("set type: 0x%x id: %d", quota_type, qid));
460         } else
461                 rc = -EIO;
462
463         FreeXid(xid);
464         return rc;
465 }
466
467 int cifs_xstate_set(struct super_block *sb, unsigned int flags, int operation)
468 {
469         int xid;
470         int rc = 0;
471         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
472         struct cifsTconInfo *pTcon;
473
474         if (cifs_sb)
475                 pTcon = cifs_sb->tcon;
476         else
477                 return -EIO;
478
479         xid = GetXid();
480         if (pTcon) {
481                 cFYI(1, ("flags: 0x%x operation: 0x%x", flags, operation));
482         } else
483                 rc = -EIO;
484
485         FreeXid(xid);
486         return rc;
487 }
488
489 int cifs_xstate_get(struct super_block *sb, struct fs_quota_stat *qstats)
490 {
491         int xid;
492         int rc = 0;
493         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
494         struct cifsTconInfo *pTcon;
495
496         if (cifs_sb)
497                 pTcon = cifs_sb->tcon;
498         else
499                 return -EIO;
500
501         xid = GetXid();
502         if (pTcon) {
503                 cFYI(1, ("pqstats %p", qstats));
504         } else
505                 rc = -EIO;
506
507         FreeXid(xid);
508         return rc;
509 }
510
511 static struct quotactl_ops cifs_quotactl_ops = {
512         .set_xquota     = cifs_xquota_set,
513         .get_xquota     = cifs_xquota_get,
514         .set_xstate     = cifs_xstate_set,
515         .get_xstate     = cifs_xstate_get,
516 };
517 #endif
518
519 static void cifs_umount_begin(struct super_block *sb)
520 {
521         struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
522         struct cifsTconInfo *tcon;
523
524         if (cifs_sb == NULL)
525                 return;
526
527         tcon = cifs_sb->tcon;
528         if (tcon == NULL)
529                 return;
530
531         lock_kernel();
532         read_lock(&cifs_tcp_ses_lock);
533         if (tcon->tc_count == 1)
534                 tcon->tidStatus = CifsExiting;
535         read_unlock(&cifs_tcp_ses_lock);
536
537         /* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */
538         /* cancel_notify_requests(tcon); */
539         if (tcon->ses && tcon->ses->server) {
540                 cFYI(1, ("wake up tasks now - umount begin not complete"));
541                 wake_up_all(&tcon->ses->server->request_q);
542                 wake_up_all(&tcon->ses->server->response_q);
543                 msleep(1); /* yield */
544                 /* we have to kick the requests once more */
545                 wake_up_all(&tcon->ses->server->response_q);
546                 msleep(1);
547         }
548 /* BB FIXME - finish add checks for tidStatus BB */
549
550         unlock_kernel();
551         return;
552 }
553
554 #ifdef CONFIG_CIFS_STATS2
555 static int cifs_show_stats(struct seq_file *s, struct vfsmount *mnt)
556 {
557         /* BB FIXME */
558         return 0;
559 }
560 #endif
561
562 static int cifs_remount(struct super_block *sb, int *flags, char *data)
563 {
564         *flags |= MS_NODIRATIME;
565         return 0;
566 }
567
568 static const struct super_operations cifs_super_ops = {
569         .put_super = cifs_put_super,
570         .statfs = cifs_statfs,
571         .alloc_inode = cifs_alloc_inode,
572         .destroy_inode = cifs_destroy_inode,
573 /*      .drop_inode         = generic_delete_inode,
574         .delete_inode   = cifs_delete_inode,  */  /* Do not need above two
575         functions unless later we add lazy close of inodes or unless the
576         kernel forgets to call us with the same number of releases (closes)
577         as opens */
578         .show_options = cifs_show_options,
579         .umount_begin   = cifs_umount_begin,
580         .remount_fs = cifs_remount,
581 #ifdef CONFIG_CIFS_STATS2
582         .show_stats = cifs_show_stats,
583 #endif
584 };
585
586 static int
587 cifs_get_sb(struct file_system_type *fs_type,
588             int flags, const char *dev_name, void *data, struct vfsmount *mnt)
589 {
590         int rc;
591         struct super_block *sb = sget(fs_type, NULL, set_anon_super, NULL);
592
593         cFYI(1, ("Devname: %s flags: %d ", dev_name, flags));
594
595         if (IS_ERR(sb))
596                 return PTR_ERR(sb);
597
598         sb->s_flags = flags;
599
600         rc = cifs_read_super(sb, data, dev_name, flags & MS_SILENT ? 1 : 0);
601         if (rc) {
602                 deactivate_locked_super(sb);
603                 return rc;
604         }
605         sb->s_flags |= MS_ACTIVE;
606         simple_set_mnt(mnt, sb);
607         return 0;
608 }
609
610 static ssize_t cifs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
611                                    unsigned long nr_segs, loff_t pos)
612 {
613         struct inode *inode = iocb->ki_filp->f_path.dentry->d_inode;
614         ssize_t written;
615
616         written = generic_file_aio_write(iocb, iov, nr_segs, pos);
617         if (!CIFS_I(inode)->clientCanCacheAll)
618                 filemap_fdatawrite(inode->i_mapping);
619         return written;
620 }
621
622 static loff_t cifs_llseek(struct file *file, loff_t offset, int origin)
623 {
624         /* origin == SEEK_END => we must revalidate the cached file length */
625         if (origin == SEEK_END) {
626                 int retval;
627
628                 /* some applications poll for the file length in this strange
629                    way so we must seek to end on non-oplocked files by
630                    setting the revalidate time to zero */
631                 CIFS_I(file->f_path.dentry->d_inode)->time = 0;
632
633                 retval = cifs_revalidate(file->f_path.dentry);
634                 if (retval < 0)
635                         return (loff_t)retval;
636         }
637         return generic_file_llseek_unlocked(file, offset, origin);
638 }
639
640 #ifdef CONFIG_CIFS_EXPERIMENTAL
641 static int cifs_setlease(struct file *file, long arg, struct file_lock **lease)
642 {
643         /* note that this is called by vfs setlease with the BKL held
644            although I doubt that BKL is needed here in cifs */
645         struct inode *inode = file->f_path.dentry->d_inode;
646
647         if (!(S_ISREG(inode->i_mode)))
648                 return -EINVAL;
649
650         /* check if file is oplocked */
651         if (((arg == F_RDLCK) &&
652                 (CIFS_I(inode)->clientCanCacheRead)) ||
653             ((arg == F_WRLCK) &&
654                 (CIFS_I(inode)->clientCanCacheAll)))
655                 return generic_setlease(file, arg, lease);
656         else if (CIFS_SB(inode->i_sb)->tcon->local_lease &&
657                         !CIFS_I(inode)->clientCanCacheRead)
658                 /* If the server claims to support oplock on this
659                    file, then we still need to check oplock even
660                    if the local_lease mount option is set, but there
661                    are servers which do not support oplock for which
662                    this mount option may be useful if the user
663                    knows that the file won't be changed on the server
664                    by anyone else */
665                 return generic_setlease(file, arg, lease);
666         else
667                 return -EAGAIN;
668 }
669 #endif
670
671 struct file_system_type cifs_fs_type = {
672         .owner = THIS_MODULE,
673         .name = "cifs",
674         .get_sb = cifs_get_sb,
675         .kill_sb = kill_anon_super,
676         /*  .fs_flags */
677 };
678 const struct inode_operations cifs_dir_inode_ops = {
679         .create = cifs_create,
680         .lookup = cifs_lookup,
681         .getattr = cifs_getattr,
682         .unlink = cifs_unlink,
683         .link = cifs_hardlink,
684         .mkdir = cifs_mkdir,
685         .rmdir = cifs_rmdir,
686         .rename = cifs_rename,
687         .permission = cifs_permission,
688 /*      revalidate:cifs_revalidate,   */
689         .setattr = cifs_setattr,
690         .symlink = cifs_symlink,
691         .mknod   = cifs_mknod,
692 #ifdef CONFIG_CIFS_XATTR
693         .setxattr = cifs_setxattr,
694         .getxattr = cifs_getxattr,
695         .listxattr = cifs_listxattr,
696         .removexattr = cifs_removexattr,
697 #endif
698 };
699
700 const struct inode_operations cifs_file_inode_ops = {
701 /*      revalidate:cifs_revalidate, */
702         .setattr = cifs_setattr,
703         .getattr = cifs_getattr, /* do we need this anymore? */
704         .rename = cifs_rename,
705         .permission = cifs_permission,
706 #ifdef CONFIG_CIFS_XATTR
707         .setxattr = cifs_setxattr,
708         .getxattr = cifs_getxattr,
709         .listxattr = cifs_listxattr,
710         .removexattr = cifs_removexattr,
711 #endif
712 };
713
714 const struct inode_operations cifs_symlink_inode_ops = {
715         .readlink = generic_readlink,
716         .follow_link = cifs_follow_link,
717         .put_link = cifs_put_link,
718         .permission = cifs_permission,
719         /* BB add the following two eventually */
720         /* revalidate: cifs_revalidate,
721            setattr:    cifs_notify_change, *//* BB do we need notify change */
722 #ifdef CONFIG_CIFS_XATTR
723         .setxattr = cifs_setxattr,
724         .getxattr = cifs_getxattr,
725         .listxattr = cifs_listxattr,
726         .removexattr = cifs_removexattr,
727 #endif
728 };
729
730 const struct file_operations cifs_file_ops = {
731         .read = do_sync_read,
732         .write = do_sync_write,
733         .aio_read = generic_file_aio_read,
734         .aio_write = cifs_file_aio_write,
735         .open = cifs_open,
736         .release = cifs_close,
737         .lock = cifs_lock,
738         .fsync = cifs_fsync,
739         .flush = cifs_flush,
740         .mmap  = cifs_file_mmap,
741         .splice_read = generic_file_splice_read,
742         .llseek = cifs_llseek,
743 #ifdef CONFIG_CIFS_POSIX
744         .unlocked_ioctl = cifs_ioctl,
745 #endif /* CONFIG_CIFS_POSIX */
746
747 #ifdef CONFIG_CIFS_EXPERIMENTAL
748         .setlease = cifs_setlease,
749 #endif /* CONFIG_CIFS_EXPERIMENTAL */
750 };
751
752 const struct file_operations cifs_file_direct_ops = {
753         /* no mmap, no aio, no readv -
754            BB reevaluate whether they can be done with directio, no cache */
755         .read = cifs_user_read,
756         .write = cifs_user_write,
757         .open = cifs_open,
758         .release = cifs_close,
759         .lock = cifs_lock,
760         .fsync = cifs_fsync,
761         .flush = cifs_flush,
762         .splice_read = generic_file_splice_read,
763 #ifdef CONFIG_CIFS_POSIX
764         .unlocked_ioctl  = cifs_ioctl,
765 #endif /* CONFIG_CIFS_POSIX */
766         .llseek = cifs_llseek,
767 #ifdef CONFIG_CIFS_EXPERIMENTAL
768         .setlease = cifs_setlease,
769 #endif /* CONFIG_CIFS_EXPERIMENTAL */
770 };
771 const struct file_operations cifs_file_nobrl_ops = {
772         .read = do_sync_read,
773         .write = do_sync_write,
774         .aio_read = generic_file_aio_read,
775         .aio_write = cifs_file_aio_write,
776         .open = cifs_open,
777         .release = cifs_close,
778         .fsync = cifs_fsync,
779         .flush = cifs_flush,
780         .mmap  = cifs_file_mmap,
781         .splice_read = generic_file_splice_read,
782         .llseek = cifs_llseek,
783 #ifdef CONFIG_CIFS_POSIX
784         .unlocked_ioctl = cifs_ioctl,
785 #endif /* CONFIG_CIFS_POSIX */
786
787 #ifdef CONFIG_CIFS_EXPERIMENTAL
788         .setlease = cifs_setlease,
789 #endif /* CONFIG_CIFS_EXPERIMENTAL */
790 };
791
792 const struct file_operations cifs_file_direct_nobrl_ops = {
793         /* no mmap, no aio, no readv -
794            BB reevaluate whether they can be done with directio, no cache */
795         .read = cifs_user_read,
796         .write = cifs_user_write,
797         .open = cifs_open,
798         .release = cifs_close,
799         .fsync = cifs_fsync,
800         .flush = cifs_flush,
801         .splice_read = generic_file_splice_read,
802 #ifdef CONFIG_CIFS_POSIX
803         .unlocked_ioctl  = cifs_ioctl,
804 #endif /* CONFIG_CIFS_POSIX */
805         .llseek = cifs_llseek,
806 #ifdef CONFIG_CIFS_EXPERIMENTAL
807         .setlease = cifs_setlease,
808 #endif /* CONFIG_CIFS_EXPERIMENTAL */
809 };
810
811 const struct file_operations cifs_dir_ops = {
812         .readdir = cifs_readdir,
813         .release = cifs_closedir,
814         .read    = generic_read_dir,
815         .unlocked_ioctl  = cifs_ioctl,
816         .llseek = generic_file_llseek,
817 };
818
819 static void
820 cifs_init_once(void *inode)
821 {
822         struct cifsInodeInfo *cifsi = inode;
823
824         inode_init_once(&cifsi->vfs_inode);
825         INIT_LIST_HEAD(&cifsi->lockList);
826 }
827
828 static int
829 cifs_init_inodecache(void)
830 {
831         cifs_inode_cachep = kmem_cache_create("cifs_inode_cache",
832                                               sizeof(struct cifsInodeInfo),
833                                               0, (SLAB_RECLAIM_ACCOUNT|
834                                                 SLAB_MEM_SPREAD),
835                                               cifs_init_once);
836         if (cifs_inode_cachep == NULL)
837                 return -ENOMEM;
838
839         return 0;
840 }
841
842 static void
843 cifs_destroy_inodecache(void)
844 {
845         kmem_cache_destroy(cifs_inode_cachep);
846 }
847
848 static int
849 cifs_init_request_bufs(void)
850 {
851         if (CIFSMaxBufSize < 8192) {
852         /* Buffer size can not be smaller than 2 * PATH_MAX since maximum
853         Unicode path name has to fit in any SMB/CIFS path based frames */
854                 CIFSMaxBufSize = 8192;
855         } else if (CIFSMaxBufSize > 1024*127) {
856                 CIFSMaxBufSize = 1024 * 127;
857         } else {
858                 CIFSMaxBufSize &= 0x1FE00; /* Round size to even 512 byte mult*/
859         }
860 /*      cERROR(1,("CIFSMaxBufSize %d 0x%x",CIFSMaxBufSize,CIFSMaxBufSize)); */
861         cifs_req_cachep = kmem_cache_create("cifs_request",
862                                             CIFSMaxBufSize +
863                                             MAX_CIFS_HDR_SIZE, 0,
864                                             SLAB_HWCACHE_ALIGN, NULL);
865         if (cifs_req_cachep == NULL)
866                 return -ENOMEM;
867
868         if (cifs_min_rcv < 1)
869                 cifs_min_rcv = 1;
870         else if (cifs_min_rcv > 64) {
871                 cifs_min_rcv = 64;
872                 cERROR(1, ("cifs_min_rcv set to maximum (64)"));
873         }
874
875         cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
876                                                   cifs_req_cachep);
877
878         if (cifs_req_poolp == NULL) {
879                 kmem_cache_destroy(cifs_req_cachep);
880                 return -ENOMEM;
881         }
882         /* MAX_CIFS_SMALL_BUFFER_SIZE bytes is enough for most SMB responses and
883         almost all handle based requests (but not write response, nor is it
884         sufficient for path based requests).  A smaller size would have
885         been more efficient (compacting multiple slab items on one 4k page)
886         for the case in which debug was on, but this larger size allows
887         more SMBs to use small buffer alloc and is still much more
888         efficient to alloc 1 per page off the slab compared to 17K (5page)
889         alloc of large cifs buffers even when page debugging is on */
890         cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq",
891                         MAX_CIFS_SMALL_BUFFER_SIZE, 0, SLAB_HWCACHE_ALIGN,
892                         NULL);
893         if (cifs_sm_req_cachep == NULL) {
894                 mempool_destroy(cifs_req_poolp);
895                 kmem_cache_destroy(cifs_req_cachep);
896                 return -ENOMEM;
897         }
898
899         if (cifs_min_small < 2)
900                 cifs_min_small = 2;
901         else if (cifs_min_small > 256) {
902                 cifs_min_small = 256;
903                 cFYI(1, ("cifs_min_small set to maximum (256)"));
904         }
905
906         cifs_sm_req_poolp = mempool_create_slab_pool(cifs_min_small,
907                                                      cifs_sm_req_cachep);
908
909         if (cifs_sm_req_poolp == NULL) {
910                 mempool_destroy(cifs_req_poolp);
911                 kmem_cache_destroy(cifs_req_cachep);
912                 kmem_cache_destroy(cifs_sm_req_cachep);
913                 return -ENOMEM;
914         }
915
916         return 0;
917 }
918
919 static void
920 cifs_destroy_request_bufs(void)
921 {
922         mempool_destroy(cifs_req_poolp);
923         kmem_cache_destroy(cifs_req_cachep);
924         mempool_destroy(cifs_sm_req_poolp);
925         kmem_cache_destroy(cifs_sm_req_cachep);
926 }
927
928 static int
929 cifs_init_mids(void)
930 {
931         cifs_mid_cachep = kmem_cache_create("cifs_mpx_ids",
932                                             sizeof(struct mid_q_entry), 0,
933                                             SLAB_HWCACHE_ALIGN, NULL);
934         if (cifs_mid_cachep == NULL)
935                 return -ENOMEM;
936
937         /* 3 is a reasonable minimum number of simultaneous operations */
938         cifs_mid_poolp = mempool_create_slab_pool(3, cifs_mid_cachep);
939         if (cifs_mid_poolp == NULL) {
940                 kmem_cache_destroy(cifs_mid_cachep);
941                 return -ENOMEM;
942         }
943
944         cifs_oplock_cachep = kmem_cache_create("cifs_oplock_structs",
945                                         sizeof(struct oplock_q_entry), 0,
946                                         SLAB_HWCACHE_ALIGN, NULL);
947         if (cifs_oplock_cachep == NULL) {
948                 mempool_destroy(cifs_mid_poolp);
949                 kmem_cache_destroy(cifs_mid_cachep);
950                 return -ENOMEM;
951         }
952
953         return 0;
954 }
955
956 static void
957 cifs_destroy_mids(void)
958 {
959         mempool_destroy(cifs_mid_poolp);
960         kmem_cache_destroy(cifs_mid_cachep);
961         kmem_cache_destroy(cifs_oplock_cachep);
962 }
963
964 static int cifs_oplock_thread(void *dummyarg)
965 {
966         struct oplock_q_entry *oplock_item;
967         struct cifsTconInfo *pTcon;
968         struct inode *inode;
969         __u16  netfid;
970         int rc, waitrc = 0;
971
972         set_freezable();
973         do {
974                 if (try_to_freeze())
975                         continue;
976
977                 spin_lock(&GlobalMid_Lock);
978                 if (list_empty(&GlobalOplock_Q)) {
979                         spin_unlock(&GlobalMid_Lock);
980                         set_current_state(TASK_INTERRUPTIBLE);
981                         schedule_timeout(39*HZ);
982                 } else {
983                         oplock_item = list_entry(GlobalOplock_Q.next,
984                                                 struct oplock_q_entry, qhead);
985                         cFYI(1, ("found oplock item to write out"));
986                         pTcon = oplock_item->tcon;
987                         inode = oplock_item->pinode;
988                         netfid = oplock_item->netfid;
989                         spin_unlock(&GlobalMid_Lock);
990                         DeleteOplockQEntry(oplock_item);
991                         /* can not grab inode sem here since it would
992                                 deadlock when oplock received on delete
993                                 since vfs_unlink holds the i_mutex across
994                                 the call */
995                         /* mutex_lock(&inode->i_mutex);*/
996                         if (S_ISREG(inode->i_mode)) {
997 #ifdef CONFIG_CIFS_EXPERIMENTAL
998                                 if (CIFS_I(inode)->clientCanCacheAll == 0)
999                                         break_lease(inode, FMODE_READ);
1000                                 else if (CIFS_I(inode)->clientCanCacheRead == 0)
1001                                         break_lease(inode, FMODE_WRITE);
1002 #endif
1003                                 rc = filemap_fdatawrite(inode->i_mapping);
1004                                 if (CIFS_I(inode)->clientCanCacheRead == 0) {
1005                                         waitrc = filemap_fdatawait(
1006                                                               inode->i_mapping);
1007                                         invalidate_remote_inode(inode);
1008                                 }
1009                                 if (rc == 0)
1010                                         rc = waitrc;
1011                         } else
1012                                 rc = 0;
1013                         /* mutex_unlock(&inode->i_mutex);*/
1014                         if (rc)
1015                                 CIFS_I(inode)->write_behind_rc = rc;
1016                         cFYI(1, ("Oplock flush inode %p rc %d",
1017                                 inode, rc));
1018
1019                                 /* releasing stale oplock after recent reconnect
1020                                 of smb session using a now incorrect file
1021                                 handle is not a data integrity issue but do
1022                                 not bother sending an oplock release if session
1023                                 to server still is disconnected since oplock
1024                                 already released by the server in that case */
1025                         if (!pTcon->need_reconnect) {
1026                                 rc = CIFSSMBLock(0, pTcon, netfid,
1027                                                 0 /* len */ , 0 /* offset */, 0,
1028                                                 0, LOCKING_ANDX_OPLOCK_RELEASE,
1029                                                 false /* wait flag */);
1030                                 cFYI(1, ("Oplock release rc = %d", rc));
1031                         }
1032                         set_current_state(TASK_INTERRUPTIBLE);
1033                         schedule_timeout(1);  /* yield in case q were corrupt */
1034                 }
1035         } while (!kthread_should_stop());
1036
1037         return 0;
1038 }
1039
1040 static int __init
1041 init_cifs(void)
1042 {
1043         int rc = 0;
1044         cifs_proc_init();
1045         INIT_LIST_HEAD(&cifs_tcp_ses_list);
1046         INIT_LIST_HEAD(&GlobalOplock_Q);
1047 #ifdef CONFIG_CIFS_EXPERIMENTAL
1048         INIT_LIST_HEAD(&GlobalDnotifyReqList);
1049         INIT_LIST_HEAD(&GlobalDnotifyRsp_Q);
1050 #endif
1051 /*
1052  *  Initialize Global counters
1053  */
1054         atomic_set(&sesInfoAllocCount, 0);
1055         atomic_set(&tconInfoAllocCount, 0);
1056         atomic_set(&tcpSesAllocCount, 0);
1057         atomic_set(&tcpSesReconnectCount, 0);
1058         atomic_set(&tconInfoReconnectCount, 0);
1059
1060         atomic_set(&bufAllocCount, 0);
1061         atomic_set(&smBufAllocCount, 0);
1062 #ifdef CONFIG_CIFS_STATS2
1063         atomic_set(&totBufAllocCount, 0);
1064         atomic_set(&totSmBufAllocCount, 0);
1065 #endif /* CONFIG_CIFS_STATS2 */
1066
1067         atomic_set(&midCount, 0);
1068         GlobalCurrentXid = 0;
1069         GlobalTotalActiveXid = 0;
1070         GlobalMaxActiveXid = 0;
1071         memset(Local_System_Name, 0, 15);
1072         rwlock_init(&GlobalSMBSeslock);
1073         rwlock_init(&cifs_tcp_ses_lock);
1074         spin_lock_init(&GlobalMid_Lock);
1075
1076         if (cifs_max_pending < 2) {
1077                 cifs_max_pending = 2;
1078                 cFYI(1, ("cifs_max_pending set to min of 2"));
1079         } else if (cifs_max_pending > 256) {
1080                 cifs_max_pending = 256;
1081                 cFYI(1, ("cifs_max_pending set to max of 256"));
1082         }
1083
1084         rc = cifs_init_inodecache();
1085         if (rc)
1086                 goto out_clean_proc;
1087
1088         rc = cifs_init_mids();
1089         if (rc)
1090                 goto out_destroy_inodecache;
1091
1092         rc = cifs_init_request_bufs();
1093         if (rc)
1094                 goto out_destroy_mids;
1095
1096         rc = register_filesystem(&cifs_fs_type);
1097         if (rc)
1098                 goto out_destroy_request_bufs;
1099 #ifdef CONFIG_CIFS_UPCALL
1100         rc = register_key_type(&cifs_spnego_key_type);
1101         if (rc)
1102                 goto out_unregister_filesystem;
1103 #endif
1104 #ifdef CONFIG_CIFS_DFS_UPCALL
1105         rc = register_key_type(&key_type_dns_resolver);
1106         if (rc)
1107                 goto out_unregister_key_type;
1108 #endif
1109         oplockThread = kthread_run(cifs_oplock_thread, NULL, "cifsoplockd");
1110         if (IS_ERR(oplockThread)) {
1111                 rc = PTR_ERR(oplockThread);
1112                 cERROR(1, ("error %d create oplock thread", rc));
1113                 goto out_unregister_dfs_key_type;
1114         }
1115
1116         return 0;
1117
1118  out_unregister_dfs_key_type:
1119 #ifdef CONFIG_CIFS_DFS_UPCALL
1120         unregister_key_type(&key_type_dns_resolver);
1121  out_unregister_key_type:
1122 #endif
1123 #ifdef CONFIG_CIFS_UPCALL
1124         unregister_key_type(&cifs_spnego_key_type);
1125  out_unregister_filesystem:
1126 #endif
1127         unregister_filesystem(&cifs_fs_type);
1128  out_destroy_request_bufs:
1129         cifs_destroy_request_bufs();
1130  out_destroy_mids:
1131         cifs_destroy_mids();
1132  out_destroy_inodecache:
1133         cifs_destroy_inodecache();
1134  out_clean_proc:
1135         cifs_proc_clean();
1136         return rc;
1137 }
1138
1139 static void __exit
1140 exit_cifs(void)
1141 {
1142         cFYI(DBG2, ("exit_cifs"));
1143         cifs_proc_clean();
1144 #ifdef CONFIG_CIFS_DFS_UPCALL
1145         cifs_dfs_release_automount_timer();
1146         unregister_key_type(&key_type_dns_resolver);
1147 #endif
1148 #ifdef CONFIG_CIFS_UPCALL
1149         unregister_key_type(&cifs_spnego_key_type);
1150 #endif
1151         unregister_filesystem(&cifs_fs_type);
1152         cifs_destroy_inodecache();
1153         cifs_destroy_mids();
1154         cifs_destroy_request_bufs();
1155         kthread_stop(oplockThread);
1156 }
1157
1158 MODULE_AUTHOR("Steve French <sfrench@us.ibm.com>");
1159 MODULE_LICENSE("GPL");  /* combination of LGPL + GPL source behaves as GPL */
1160 MODULE_DESCRIPTION
1161     ("VFS to access servers complying with the SNIA CIFS Specification "
1162      "e.g. Samba and Windows");
1163 MODULE_VERSION(CIFS_VERSION);
1164 module_init(init_cifs)
1165 module_exit(exit_cifs)