Input: wacom - revert "Cintiq 21UX2 does not have menu strips"
[linux-btrfs-devel.git] / fs / cifs / cifsfs.c
blob2f0c58646c10506ed180484cb80b6869babcfd0b
1 /*
2 * fs/cifs/cifsfs.c
4 * Copyright (C) International Business Machines Corp., 2002,2008
5 * Author(s): Steve French (sfrench@us.ibm.com)
7 * Common Internet FileSystem (CIFS) client
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.
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.
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
24 /* Note that BB means BUGBUG (ie something to fix eventually) */
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 <net/ipv6.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 "cifs_spnego.h"
49 #include "fscache.h"
50 #define CIFS_MAGIC_NUMBER 0xFF534D42 /* the first four bytes of SMB PDUs */
52 int cifsFYI = 0;
53 int cifsERROR = 1;
54 int traceSMB = 0;
55 unsigned int oplockEnabled = 1;
56 unsigned int linuxExtEnabled = 1;
57 unsigned int lookupCacheEnabled = 1;
58 unsigned int multiuser_mount = 0;
59 unsigned int global_secflags = CIFSSEC_DEF;
60 /* unsigned int ntlmv2_support = 0; */
61 unsigned int sign_CIFS_PDUs = 1;
62 static const struct super_operations cifs_super_ops;
63 unsigned int CIFSMaxBufSize = CIFS_MAX_MSGSIZE;
64 module_param(CIFSMaxBufSize, int, 0);
65 MODULE_PARM_DESC(CIFSMaxBufSize, "Network buffer size (not including header). "
66 "Default: 16384 Range: 8192 to 130048");
67 unsigned int cifs_min_rcv = CIFS_MIN_RCV_POOL;
68 module_param(cifs_min_rcv, int, 0);
69 MODULE_PARM_DESC(cifs_min_rcv, "Network buffers in pool. Default: 4 Range: "
70 "1 to 64");
71 unsigned int cifs_min_small = 30;
72 module_param(cifs_min_small, int, 0);
73 MODULE_PARM_DESC(cifs_min_small, "Small network buffers in pool. Default: 30 "
74 "Range: 2 to 256");
75 unsigned int cifs_max_pending = CIFS_MAX_REQ;
76 module_param(cifs_max_pending, int, 0);
77 MODULE_PARM_DESC(cifs_max_pending, "Simultaneous requests to server. "
78 "Default: 50 Range: 2 to 256");
79 unsigned short echo_retries = 5;
80 module_param(echo_retries, ushort, 0644);
81 MODULE_PARM_DESC(echo_retries, "Number of echo attempts before giving up and "
82 "reconnecting server. Default: 5. 0 means "
83 "never reconnect.");
84 extern mempool_t *cifs_sm_req_poolp;
85 extern mempool_t *cifs_req_poolp;
86 extern mempool_t *cifs_mid_poolp;
88 void
89 cifs_sb_active(struct super_block *sb)
91 struct cifs_sb_info *server = CIFS_SB(sb);
93 if (atomic_inc_return(&server->active) == 1)
94 atomic_inc(&sb->s_active);
97 void
98 cifs_sb_deactive(struct super_block *sb)
100 struct cifs_sb_info *server = CIFS_SB(sb);
102 if (atomic_dec_and_test(&server->active))
103 deactivate_super(sb);
106 static int
107 cifs_read_super(struct super_block *sb, struct smb_vol *volume_info,
108 const char *devname, int silent)
110 struct inode *inode;
111 struct cifs_sb_info *cifs_sb;
112 int rc = 0;
114 cifs_sb = CIFS_SB(sb);
116 spin_lock_init(&cifs_sb->tlink_tree_lock);
117 cifs_sb->tlink_tree = RB_ROOT;
119 rc = bdi_setup_and_register(&cifs_sb->bdi, "cifs", BDI_CAP_MAP_COPY);
120 if (rc)
121 return rc;
123 cifs_sb->bdi.ra_pages = default_backing_dev_info.ra_pages;
125 rc = cifs_mount(sb, cifs_sb, volume_info, devname);
127 if (rc) {
128 if (!silent)
129 cERROR(1, "cifs_mount failed w/return code = %d", rc);
130 goto out_mount_failed;
133 sb->s_magic = CIFS_MAGIC_NUMBER;
134 sb->s_op = &cifs_super_ops;
135 sb->s_bdi = &cifs_sb->bdi;
136 sb->s_blocksize = CIFS_MAX_MSGSIZE;
137 sb->s_blocksize_bits = 14; /* default 2**14 = CIFS_MAX_MSGSIZE */
138 inode = cifs_root_iget(sb);
140 if (IS_ERR(inode)) {
141 rc = PTR_ERR(inode);
142 inode = NULL;
143 goto out_no_root;
146 sb->s_root = d_alloc_root(inode);
148 if (!sb->s_root) {
149 rc = -ENOMEM;
150 goto out_no_root;
153 /* do that *after* d_alloc_root() - we want NULL ->d_op for root here */
154 if (cifs_sb_master_tcon(cifs_sb)->nocase)
155 sb->s_d_op = &cifs_ci_dentry_ops;
156 else
157 sb->s_d_op = &cifs_dentry_ops;
159 #ifdef CIFS_NFSD_EXPORT
160 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
161 cFYI(1, "export ops supported");
162 sb->s_export_op = &cifs_export_ops;
164 #endif /* CIFS_NFSD_EXPORT */
166 return 0;
168 out_no_root:
169 cERROR(1, "cifs_read_super: get root inode failed");
170 if (inode)
171 iput(inode);
173 cifs_umount(sb, cifs_sb);
175 out_mount_failed:
176 bdi_destroy(&cifs_sb->bdi);
177 return rc;
180 static void
181 cifs_put_super(struct super_block *sb)
183 int rc = 0;
184 struct cifs_sb_info *cifs_sb;
186 cFYI(1, "In cifs_put_super");
187 cifs_sb = CIFS_SB(sb);
188 if (cifs_sb == NULL) {
189 cFYI(1, "Empty cifs superblock info passed to unmount");
190 return;
193 rc = cifs_umount(sb, cifs_sb);
194 if (rc)
195 cERROR(1, "cifs_umount failed with return code %d", rc);
196 if (cifs_sb->mountdata) {
197 kfree(cifs_sb->mountdata);
198 cifs_sb->mountdata = NULL;
201 unload_nls(cifs_sb->local_nls);
202 bdi_destroy(&cifs_sb->bdi);
203 kfree(cifs_sb);
206 static int
207 cifs_statfs(struct dentry *dentry, struct kstatfs *buf)
209 struct super_block *sb = dentry->d_sb;
210 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
211 struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
212 int rc = -EOPNOTSUPP;
213 int xid;
215 xid = GetXid();
217 buf->f_type = CIFS_MAGIC_NUMBER;
220 * PATH_MAX may be too long - it would presumably be total path,
221 * but note that some servers (includinng Samba 3) have a shorter
222 * maximum path.
224 * Instead could get the real value via SMB_QUERY_FS_ATTRIBUTE_INFO.
226 buf->f_namelen = PATH_MAX;
227 buf->f_files = 0; /* undefined */
228 buf->f_ffree = 0; /* unlimited */
231 * We could add a second check for a QFS Unix capability bit
233 if ((tcon->ses->capabilities & CAP_UNIX) &&
234 (CIFS_POSIX_EXTENSIONS & le64_to_cpu(tcon->fsUnixInfo.Capability)))
235 rc = CIFSSMBQFSPosixInfo(xid, tcon, buf);
238 * Only need to call the old QFSInfo if failed on newer one,
239 * e.g. by OS/2.
241 if (rc && (tcon->ses->capabilities & CAP_NT_SMBS))
242 rc = CIFSSMBQFSInfo(xid, tcon, buf);
245 * Some old Windows servers also do not support level 103, retry with
246 * older level one if old server failed the previous call or we
247 * bypassed it because we detected that this was an older LANMAN sess
249 if (rc)
250 rc = SMBOldQFSInfo(xid, tcon, buf);
252 FreeXid(xid);
253 return 0;
256 static int cifs_permission(struct inode *inode, int mask, unsigned int flags)
258 struct cifs_sb_info *cifs_sb;
260 cifs_sb = CIFS_SB(inode->i_sb);
262 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) {
263 if ((mask & MAY_EXEC) && !execute_ok(inode))
264 return -EACCES;
265 else
266 return 0;
267 } else /* file mode might have been restricted at mount time
268 on the client (above and beyond ACL on servers) for
269 servers which do not support setting and viewing mode bits,
270 so allowing client to check permissions is useful */
271 return generic_permission(inode, mask, flags, NULL);
274 static struct kmem_cache *cifs_inode_cachep;
275 static struct kmem_cache *cifs_req_cachep;
276 static struct kmem_cache *cifs_mid_cachep;
277 static struct kmem_cache *cifs_sm_req_cachep;
278 mempool_t *cifs_sm_req_poolp;
279 mempool_t *cifs_req_poolp;
280 mempool_t *cifs_mid_poolp;
282 static struct inode *
283 cifs_alloc_inode(struct super_block *sb)
285 struct cifsInodeInfo *cifs_inode;
286 cifs_inode = kmem_cache_alloc(cifs_inode_cachep, GFP_KERNEL);
287 if (!cifs_inode)
288 return NULL;
289 cifs_inode->cifsAttrs = 0x20; /* default */
290 cifs_inode->time = 0;
291 /* Until the file is open and we have gotten oplock
292 info back from the server, can not assume caching of
293 file data or metadata */
294 cifs_set_oplock_level(cifs_inode, 0);
295 cifs_inode->delete_pending = false;
296 cifs_inode->invalid_mapping = false;
297 cifs_inode->vfs_inode.i_blkbits = 14; /* 2**14 = CIFS_MAX_MSGSIZE */
298 cifs_inode->server_eof = 0;
299 cifs_inode->uniqueid = 0;
300 cifs_inode->createtime = 0;
302 /* Can not set i_flags here - they get immediately overwritten
303 to zero by the VFS */
304 /* cifs_inode->vfs_inode.i_flags = S_NOATIME | S_NOCMTIME;*/
305 INIT_LIST_HEAD(&cifs_inode->openFileList);
306 return &cifs_inode->vfs_inode;
309 static void cifs_i_callback(struct rcu_head *head)
311 struct inode *inode = container_of(head, struct inode, i_rcu);
312 INIT_LIST_HEAD(&inode->i_dentry);
313 kmem_cache_free(cifs_inode_cachep, CIFS_I(inode));
316 static void
317 cifs_destroy_inode(struct inode *inode)
319 call_rcu(&inode->i_rcu, cifs_i_callback);
322 static void
323 cifs_evict_inode(struct inode *inode)
325 truncate_inode_pages(&inode->i_data, 0);
326 end_writeback(inode);
327 cifs_fscache_release_inode_cookie(inode);
330 static void
331 cifs_show_address(struct seq_file *s, struct TCP_Server_Info *server)
333 struct sockaddr_in *sa = (struct sockaddr_in *) &server->dstaddr;
334 struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) &server->dstaddr;
336 seq_printf(s, ",addr=");
338 switch (server->dstaddr.ss_family) {
339 case AF_INET:
340 seq_printf(s, "%pI4", &sa->sin_addr.s_addr);
341 break;
342 case AF_INET6:
343 seq_printf(s, "%pI6", &sa6->sin6_addr.s6_addr);
344 if (sa6->sin6_scope_id)
345 seq_printf(s, "%%%u", sa6->sin6_scope_id);
346 break;
347 default:
348 seq_printf(s, "(unknown)");
352 static void
353 cifs_show_security(struct seq_file *s, struct TCP_Server_Info *server)
355 seq_printf(s, ",sec=");
357 switch (server->secType) {
358 case LANMAN:
359 seq_printf(s, "lanman");
360 break;
361 case NTLMv2:
362 seq_printf(s, "ntlmv2");
363 break;
364 case NTLM:
365 seq_printf(s, "ntlm");
366 break;
367 case Kerberos:
368 seq_printf(s, "krb5");
369 break;
370 case RawNTLMSSP:
371 seq_printf(s, "ntlmssp");
372 break;
373 default:
374 /* shouldn't ever happen */
375 seq_printf(s, "unknown");
376 break;
379 if (server->sec_mode & (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))
380 seq_printf(s, "i");
384 * cifs_show_options() is for displaying mount options in /proc/mounts.
385 * Not all settable options are displayed but most of the important
386 * ones are.
388 static int
389 cifs_show_options(struct seq_file *s, struct vfsmount *m)
391 struct cifs_sb_info *cifs_sb = CIFS_SB(m->mnt_sb);
392 struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
393 struct sockaddr *srcaddr;
394 srcaddr = (struct sockaddr *)&tcon->ses->server->srcaddr;
396 cifs_show_security(s, tcon->ses->server);
398 seq_printf(s, ",unc=%s", tcon->treeName);
400 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER)
401 seq_printf(s, ",multiuser");
402 else if (tcon->ses->user_name)
403 seq_printf(s, ",username=%s", tcon->ses->user_name);
405 if (tcon->ses->domainName)
406 seq_printf(s, ",domain=%s", tcon->ses->domainName);
408 if (srcaddr->sa_family != AF_UNSPEC) {
409 struct sockaddr_in *saddr4;
410 struct sockaddr_in6 *saddr6;
411 saddr4 = (struct sockaddr_in *)srcaddr;
412 saddr6 = (struct sockaddr_in6 *)srcaddr;
413 if (srcaddr->sa_family == AF_INET6)
414 seq_printf(s, ",srcaddr=%pI6c",
415 &saddr6->sin6_addr);
416 else if (srcaddr->sa_family == AF_INET)
417 seq_printf(s, ",srcaddr=%pI4",
418 &saddr4->sin_addr.s_addr);
419 else
420 seq_printf(s, ",srcaddr=BAD-AF:%i",
421 (int)(srcaddr->sa_family));
424 seq_printf(s, ",uid=%d", cifs_sb->mnt_uid);
425 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID)
426 seq_printf(s, ",forceuid");
427 else
428 seq_printf(s, ",noforceuid");
430 seq_printf(s, ",gid=%d", cifs_sb->mnt_gid);
431 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID)
432 seq_printf(s, ",forcegid");
433 else
434 seq_printf(s, ",noforcegid");
436 cifs_show_address(s, tcon->ses->server);
438 if (!tcon->unix_ext)
439 seq_printf(s, ",file_mode=0%o,dir_mode=0%o",
440 cifs_sb->mnt_file_mode,
441 cifs_sb->mnt_dir_mode);
442 if (tcon->seal)
443 seq_printf(s, ",seal");
444 if (tcon->nocase)
445 seq_printf(s, ",nocase");
446 if (tcon->retry)
447 seq_printf(s, ",hard");
448 if (tcon->unix_ext)
449 seq_printf(s, ",unix");
450 else
451 seq_printf(s, ",nounix");
452 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
453 seq_printf(s, ",posixpaths");
454 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)
455 seq_printf(s, ",setuids");
456 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)
457 seq_printf(s, ",serverino");
458 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
459 seq_printf(s, ",rwpidforward");
460 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL)
461 seq_printf(s, ",forcemand");
462 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
463 seq_printf(s, ",directio");
464 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)
465 seq_printf(s, ",nouser_xattr");
466 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR)
467 seq_printf(s, ",mapchars");
468 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)
469 seq_printf(s, ",sfu");
470 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
471 seq_printf(s, ",nobrl");
472 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL)
473 seq_printf(s, ",cifsacl");
474 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)
475 seq_printf(s, ",dynperm");
476 if (m->mnt_sb->s_flags & MS_POSIXACL)
477 seq_printf(s, ",acl");
478 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MF_SYMLINKS)
479 seq_printf(s, ",mfsymlinks");
480 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_FSCACHE)
481 seq_printf(s, ",fsc");
483 seq_printf(s, ",rsize=%d", cifs_sb->rsize);
484 seq_printf(s, ",wsize=%d", cifs_sb->wsize);
485 /* convert actimeo and display it in seconds */
486 seq_printf(s, ",actimeo=%lu", cifs_sb->actimeo / HZ);
488 return 0;
491 static void cifs_umount_begin(struct super_block *sb)
493 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
494 struct cifs_tcon *tcon;
496 if (cifs_sb == NULL)
497 return;
499 tcon = cifs_sb_master_tcon(cifs_sb);
501 spin_lock(&cifs_tcp_ses_lock);
502 if ((tcon->tc_count > 1) || (tcon->tidStatus == CifsExiting)) {
503 /* we have other mounts to same share or we have
504 already tried to force umount this and woken up
505 all waiting network requests, nothing to do */
506 spin_unlock(&cifs_tcp_ses_lock);
507 return;
508 } else if (tcon->tc_count == 1)
509 tcon->tidStatus = CifsExiting;
510 spin_unlock(&cifs_tcp_ses_lock);
512 /* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */
513 /* cancel_notify_requests(tcon); */
514 if (tcon->ses && tcon->ses->server) {
515 cFYI(1, "wake up tasks now - umount begin not complete");
516 wake_up_all(&tcon->ses->server->request_q);
517 wake_up_all(&tcon->ses->server->response_q);
518 msleep(1); /* yield */
519 /* we have to kick the requests once more */
520 wake_up_all(&tcon->ses->server->response_q);
521 msleep(1);
524 return;
527 #ifdef CONFIG_CIFS_STATS2
528 static int cifs_show_stats(struct seq_file *s, struct vfsmount *mnt)
530 /* BB FIXME */
531 return 0;
533 #endif
535 static int cifs_remount(struct super_block *sb, int *flags, char *data)
537 *flags |= MS_NODIRATIME;
538 return 0;
541 static int cifs_drop_inode(struct inode *inode)
543 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
545 /* no serverino => unconditional eviction */
546 return !(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) ||
547 generic_drop_inode(inode);
550 static const struct super_operations cifs_super_ops = {
551 .put_super = cifs_put_super,
552 .statfs = cifs_statfs,
553 .alloc_inode = cifs_alloc_inode,
554 .destroy_inode = cifs_destroy_inode,
555 .drop_inode = cifs_drop_inode,
556 .evict_inode = cifs_evict_inode,
557 /* .delete_inode = cifs_delete_inode, */ /* Do not need above
558 function unless later we add lazy close of inodes or unless the
559 kernel forgets to call us with the same number of releases (closes)
560 as opens */
561 .show_options = cifs_show_options,
562 .umount_begin = cifs_umount_begin,
563 .remount_fs = cifs_remount,
564 #ifdef CONFIG_CIFS_STATS2
565 .show_stats = cifs_show_stats,
566 #endif
570 * Get root dentry from superblock according to prefix path mount option.
571 * Return dentry with refcount + 1 on success and NULL otherwise.
573 static struct dentry *
574 cifs_get_root(struct smb_vol *vol, struct super_block *sb)
576 int xid, rc;
577 struct inode *inode;
578 struct qstr name;
579 struct dentry *dparent = NULL, *dchild = NULL, *alias;
580 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
581 unsigned int i, full_len, len;
582 char *full_path = NULL, *pstart;
583 char sep;
585 full_path = cifs_build_path_to_root(vol, cifs_sb,
586 cifs_sb_master_tcon(cifs_sb));
587 if (full_path == NULL)
588 return NULL;
590 cFYI(1, "Get root dentry for %s", full_path);
592 xid = GetXid();
593 sep = CIFS_DIR_SEP(cifs_sb);
594 dparent = dget(sb->s_root);
595 full_len = strlen(full_path);
596 full_path[full_len] = sep;
597 pstart = full_path + 1;
599 for (i = 1, len = 0; i <= full_len; i++) {
600 if (full_path[i] != sep || !len) {
601 len++;
602 continue;
605 full_path[i] = 0;
606 cFYI(1, "get dentry for %s", pstart);
608 name.name = pstart;
609 name.len = len;
610 name.hash = full_name_hash(pstart, len);
611 dchild = d_lookup(dparent, &name);
612 if (dchild == NULL) {
613 cFYI(1, "not exists");
614 dchild = d_alloc(dparent, &name);
615 if (dchild == NULL) {
616 dput(dparent);
617 dparent = NULL;
618 goto out;
622 cFYI(1, "get inode");
623 if (dchild->d_inode == NULL) {
624 cFYI(1, "not exists");
625 inode = NULL;
626 if (cifs_sb_master_tcon(CIFS_SB(sb))->unix_ext)
627 rc = cifs_get_inode_info_unix(&inode, full_path,
628 sb, xid);
629 else
630 rc = cifs_get_inode_info(&inode, full_path,
631 NULL, sb, xid, NULL);
632 if (rc) {
633 dput(dchild);
634 dput(dparent);
635 dparent = NULL;
636 goto out;
638 alias = d_materialise_unique(dchild, inode);
639 if (alias != NULL) {
640 dput(dchild);
641 if (IS_ERR(alias)) {
642 dput(dparent);
643 dparent = NULL;
644 goto out;
646 dchild = alias;
649 cFYI(1, "parent %p, child %p", dparent, dchild);
651 dput(dparent);
652 dparent = dchild;
653 len = 0;
654 pstart = full_path + i + 1;
655 full_path[i] = sep;
657 out:
658 _FreeXid(xid);
659 kfree(full_path);
660 return dparent;
663 static struct dentry *
664 cifs_do_mount(struct file_system_type *fs_type,
665 int flags, const char *dev_name, void *data)
667 int rc;
668 struct super_block *sb;
669 struct cifs_sb_info *cifs_sb;
670 struct smb_vol *volume_info;
671 struct cifs_mnt_data mnt_data;
672 struct dentry *root;
674 cFYI(1, "Devname: %s flags: %d ", dev_name, flags);
676 rc = cifs_setup_volume_info(&volume_info, (char *)data, dev_name);
677 if (rc)
678 return ERR_PTR(rc);
680 cifs_sb = kzalloc(sizeof(struct cifs_sb_info), GFP_KERNEL);
681 if (cifs_sb == NULL) {
682 root = ERR_PTR(-ENOMEM);
683 goto out;
686 cifs_setup_cifs_sb(volume_info, cifs_sb);
688 mnt_data.vol = volume_info;
689 mnt_data.cifs_sb = cifs_sb;
690 mnt_data.flags = flags;
692 sb = sget(fs_type, cifs_match_super, set_anon_super, &mnt_data);
693 if (IS_ERR(sb)) {
694 root = ERR_CAST(sb);
695 goto out_cifs_sb;
698 if (sb->s_fs_info) {
699 cFYI(1, "Use existing superblock");
700 goto out_shared;
704 * Copy mount params for use in submounts. Better to do
705 * the copy here and deal with the error before cleanup gets
706 * complicated post-mount.
708 cifs_sb->mountdata = kstrndup(data, PAGE_SIZE, GFP_KERNEL);
709 if (cifs_sb->mountdata == NULL) {
710 root = ERR_PTR(-ENOMEM);
711 goto out_super;
714 sb->s_flags = flags;
715 /* BB should we make this contingent on mount parm? */
716 sb->s_flags |= MS_NODIRATIME | MS_NOATIME;
717 sb->s_fs_info = cifs_sb;
719 rc = cifs_read_super(sb, volume_info, dev_name,
720 flags & MS_SILENT ? 1 : 0);
721 if (rc) {
722 root = ERR_PTR(rc);
723 goto out_super;
726 sb->s_flags |= MS_ACTIVE;
728 root = cifs_get_root(volume_info, sb);
729 if (root == NULL)
730 goto out_super;
732 cFYI(1, "dentry root is: %p", root);
733 goto out;
735 out_shared:
736 root = cifs_get_root(volume_info, sb);
737 if (root)
738 cFYI(1, "dentry root is: %p", root);
739 goto out;
741 out_super:
742 kfree(cifs_sb->mountdata);
743 deactivate_locked_super(sb);
745 out_cifs_sb:
746 unload_nls(cifs_sb->local_nls);
747 kfree(cifs_sb);
749 out:
750 cifs_cleanup_volume_info(&volume_info);
751 return root;
754 static ssize_t cifs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
755 unsigned long nr_segs, loff_t pos)
757 struct inode *inode = iocb->ki_filp->f_path.dentry->d_inode;
758 ssize_t written;
759 int rc;
761 written = generic_file_aio_write(iocb, iov, nr_segs, pos);
763 if (CIFS_I(inode)->clientCanCacheAll)
764 return written;
766 rc = filemap_fdatawrite(inode->i_mapping);
767 if (rc)
768 cFYI(1, "cifs_file_aio_write: %d rc on %p inode", rc, inode);
770 return written;
773 static loff_t cifs_llseek(struct file *file, loff_t offset, int origin)
775 /* origin == SEEK_END => we must revalidate the cached file length */
776 if (origin == SEEK_END) {
777 int rc;
778 struct inode *inode = file->f_path.dentry->d_inode;
781 * We need to be sure that all dirty pages are written and the
782 * server has the newest file length.
784 if (!CIFS_I(inode)->clientCanCacheRead && inode->i_mapping &&
785 inode->i_mapping->nrpages != 0) {
786 rc = filemap_fdatawait(inode->i_mapping);
787 if (rc) {
788 mapping_set_error(inode->i_mapping, rc);
789 return rc;
793 * Some applications poll for the file length in this strange
794 * way so we must seek to end on non-oplocked files by
795 * setting the revalidate time to zero.
797 CIFS_I(inode)->time = 0;
799 rc = cifs_revalidate_file_attr(file);
800 if (rc < 0)
801 return (loff_t)rc;
803 return generic_file_llseek_unlocked(file, offset, origin);
806 static int cifs_setlease(struct file *file, long arg, struct file_lock **lease)
808 /* note that this is called by vfs setlease with lock_flocks held
809 to protect *lease from going away */
810 struct inode *inode = file->f_path.dentry->d_inode;
811 struct cifsFileInfo *cfile = file->private_data;
813 if (!(S_ISREG(inode->i_mode)))
814 return -EINVAL;
816 /* check if file is oplocked */
817 if (((arg == F_RDLCK) &&
818 (CIFS_I(inode)->clientCanCacheRead)) ||
819 ((arg == F_WRLCK) &&
820 (CIFS_I(inode)->clientCanCacheAll)))
821 return generic_setlease(file, arg, lease);
822 else if (tlink_tcon(cfile->tlink)->local_lease &&
823 !CIFS_I(inode)->clientCanCacheRead)
824 /* If the server claims to support oplock on this
825 file, then we still need to check oplock even
826 if the local_lease mount option is set, but there
827 are servers which do not support oplock for which
828 this mount option may be useful if the user
829 knows that the file won't be changed on the server
830 by anyone else */
831 return generic_setlease(file, arg, lease);
832 else
833 return -EAGAIN;
836 struct file_system_type cifs_fs_type = {
837 .owner = THIS_MODULE,
838 .name = "cifs",
839 .mount = cifs_do_mount,
840 .kill_sb = kill_anon_super,
841 /* .fs_flags */
843 const struct inode_operations cifs_dir_inode_ops = {
844 .create = cifs_create,
845 .lookup = cifs_lookup,
846 .getattr = cifs_getattr,
847 .unlink = cifs_unlink,
848 .link = cifs_hardlink,
849 .mkdir = cifs_mkdir,
850 .rmdir = cifs_rmdir,
851 .rename = cifs_rename,
852 .permission = cifs_permission,
853 /* revalidate:cifs_revalidate, */
854 .setattr = cifs_setattr,
855 .symlink = cifs_symlink,
856 .mknod = cifs_mknod,
857 #ifdef CONFIG_CIFS_XATTR
858 .setxattr = cifs_setxattr,
859 .getxattr = cifs_getxattr,
860 .listxattr = cifs_listxattr,
861 .removexattr = cifs_removexattr,
862 #endif
865 const struct inode_operations cifs_file_inode_ops = {
866 /* revalidate:cifs_revalidate, */
867 .setattr = cifs_setattr,
868 .getattr = cifs_getattr, /* do we need this anymore? */
869 .rename = cifs_rename,
870 .permission = cifs_permission,
871 #ifdef CONFIG_CIFS_XATTR
872 .setxattr = cifs_setxattr,
873 .getxattr = cifs_getxattr,
874 .listxattr = cifs_listxattr,
875 .removexattr = cifs_removexattr,
876 #endif
879 const struct inode_operations cifs_symlink_inode_ops = {
880 .readlink = generic_readlink,
881 .follow_link = cifs_follow_link,
882 .put_link = cifs_put_link,
883 .permission = cifs_permission,
884 /* BB add the following two eventually */
885 /* revalidate: cifs_revalidate,
886 setattr: cifs_notify_change, *//* BB do we need notify change */
887 #ifdef CONFIG_CIFS_XATTR
888 .setxattr = cifs_setxattr,
889 .getxattr = cifs_getxattr,
890 .listxattr = cifs_listxattr,
891 .removexattr = cifs_removexattr,
892 #endif
895 const struct file_operations cifs_file_ops = {
896 .read = do_sync_read,
897 .write = do_sync_write,
898 .aio_read = generic_file_aio_read,
899 .aio_write = cifs_file_aio_write,
900 .open = cifs_open,
901 .release = cifs_close,
902 .lock = cifs_lock,
903 .fsync = cifs_fsync,
904 .flush = cifs_flush,
905 .mmap = cifs_file_mmap,
906 .splice_read = generic_file_splice_read,
907 .llseek = cifs_llseek,
908 #ifdef CONFIG_CIFS_POSIX
909 .unlocked_ioctl = cifs_ioctl,
910 #endif /* CONFIG_CIFS_POSIX */
911 .setlease = cifs_setlease,
914 const struct file_operations cifs_file_strict_ops = {
915 .read = do_sync_read,
916 .write = do_sync_write,
917 .aio_read = cifs_strict_readv,
918 .aio_write = cifs_strict_writev,
919 .open = cifs_open,
920 .release = cifs_close,
921 .lock = cifs_lock,
922 .fsync = cifs_strict_fsync,
923 .flush = cifs_flush,
924 .mmap = cifs_file_strict_mmap,
925 .splice_read = generic_file_splice_read,
926 .llseek = cifs_llseek,
927 #ifdef CONFIG_CIFS_POSIX
928 .unlocked_ioctl = cifs_ioctl,
929 #endif /* CONFIG_CIFS_POSIX */
930 .setlease = cifs_setlease,
933 const struct file_operations cifs_file_direct_ops = {
934 /* BB reevaluate whether they can be done with directio, no cache */
935 .read = do_sync_read,
936 .write = do_sync_write,
937 .aio_read = cifs_user_readv,
938 .aio_write = cifs_user_writev,
939 .open = cifs_open,
940 .release = cifs_close,
941 .lock = cifs_lock,
942 .fsync = cifs_fsync,
943 .flush = cifs_flush,
944 .mmap = cifs_file_mmap,
945 .splice_read = generic_file_splice_read,
946 #ifdef CONFIG_CIFS_POSIX
947 .unlocked_ioctl = cifs_ioctl,
948 #endif /* CONFIG_CIFS_POSIX */
949 .llseek = cifs_llseek,
950 .setlease = cifs_setlease,
953 const struct file_operations cifs_file_nobrl_ops = {
954 .read = do_sync_read,
955 .write = do_sync_write,
956 .aio_read = generic_file_aio_read,
957 .aio_write = cifs_file_aio_write,
958 .open = cifs_open,
959 .release = cifs_close,
960 .fsync = cifs_fsync,
961 .flush = cifs_flush,
962 .mmap = cifs_file_mmap,
963 .splice_read = generic_file_splice_read,
964 .llseek = cifs_llseek,
965 #ifdef CONFIG_CIFS_POSIX
966 .unlocked_ioctl = cifs_ioctl,
967 #endif /* CONFIG_CIFS_POSIX */
968 .setlease = cifs_setlease,
971 const struct file_operations cifs_file_strict_nobrl_ops = {
972 .read = do_sync_read,
973 .write = do_sync_write,
974 .aio_read = cifs_strict_readv,
975 .aio_write = cifs_strict_writev,
976 .open = cifs_open,
977 .release = cifs_close,
978 .fsync = cifs_strict_fsync,
979 .flush = cifs_flush,
980 .mmap = cifs_file_strict_mmap,
981 .splice_read = generic_file_splice_read,
982 .llseek = cifs_llseek,
983 #ifdef CONFIG_CIFS_POSIX
984 .unlocked_ioctl = cifs_ioctl,
985 #endif /* CONFIG_CIFS_POSIX */
986 .setlease = cifs_setlease,
989 const struct file_operations cifs_file_direct_nobrl_ops = {
990 /* BB reevaluate whether they can be done with directio, no cache */
991 .read = do_sync_read,
992 .write = do_sync_write,
993 .aio_read = cifs_user_readv,
994 .aio_write = cifs_user_writev,
995 .open = cifs_open,
996 .release = cifs_close,
997 .fsync = cifs_fsync,
998 .flush = cifs_flush,
999 .mmap = cifs_file_mmap,
1000 .splice_read = generic_file_splice_read,
1001 #ifdef CONFIG_CIFS_POSIX
1002 .unlocked_ioctl = cifs_ioctl,
1003 #endif /* CONFIG_CIFS_POSIX */
1004 .llseek = cifs_llseek,
1005 .setlease = cifs_setlease,
1008 const struct file_operations cifs_dir_ops = {
1009 .readdir = cifs_readdir,
1010 .release = cifs_closedir,
1011 .read = generic_read_dir,
1012 .unlocked_ioctl = cifs_ioctl,
1013 .llseek = generic_file_llseek,
1016 static void
1017 cifs_init_once(void *inode)
1019 struct cifsInodeInfo *cifsi = inode;
1021 inode_init_once(&cifsi->vfs_inode);
1022 INIT_LIST_HEAD(&cifsi->lockList);
1025 static int
1026 cifs_init_inodecache(void)
1028 cifs_inode_cachep = kmem_cache_create("cifs_inode_cache",
1029 sizeof(struct cifsInodeInfo),
1030 0, (SLAB_RECLAIM_ACCOUNT|
1031 SLAB_MEM_SPREAD),
1032 cifs_init_once);
1033 if (cifs_inode_cachep == NULL)
1034 return -ENOMEM;
1036 return 0;
1039 static void
1040 cifs_destroy_inodecache(void)
1042 kmem_cache_destroy(cifs_inode_cachep);
1045 static int
1046 cifs_init_request_bufs(void)
1048 if (CIFSMaxBufSize < 8192) {
1049 /* Buffer size can not be smaller than 2 * PATH_MAX since maximum
1050 Unicode path name has to fit in any SMB/CIFS path based frames */
1051 CIFSMaxBufSize = 8192;
1052 } else if (CIFSMaxBufSize > 1024*127) {
1053 CIFSMaxBufSize = 1024 * 127;
1054 } else {
1055 CIFSMaxBufSize &= 0x1FE00; /* Round size to even 512 byte mult*/
1057 /* cERROR(1, "CIFSMaxBufSize %d 0x%x",CIFSMaxBufSize,CIFSMaxBufSize); */
1058 cifs_req_cachep = kmem_cache_create("cifs_request",
1059 CIFSMaxBufSize +
1060 MAX_CIFS_HDR_SIZE, 0,
1061 SLAB_HWCACHE_ALIGN, NULL);
1062 if (cifs_req_cachep == NULL)
1063 return -ENOMEM;
1065 if (cifs_min_rcv < 1)
1066 cifs_min_rcv = 1;
1067 else if (cifs_min_rcv > 64) {
1068 cifs_min_rcv = 64;
1069 cERROR(1, "cifs_min_rcv set to maximum (64)");
1072 cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
1073 cifs_req_cachep);
1075 if (cifs_req_poolp == NULL) {
1076 kmem_cache_destroy(cifs_req_cachep);
1077 return -ENOMEM;
1079 /* MAX_CIFS_SMALL_BUFFER_SIZE bytes is enough for most SMB responses and
1080 almost all handle based requests (but not write response, nor is it
1081 sufficient for path based requests). A smaller size would have
1082 been more efficient (compacting multiple slab items on one 4k page)
1083 for the case in which debug was on, but this larger size allows
1084 more SMBs to use small buffer alloc and is still much more
1085 efficient to alloc 1 per page off the slab compared to 17K (5page)
1086 alloc of large cifs buffers even when page debugging is on */
1087 cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq",
1088 MAX_CIFS_SMALL_BUFFER_SIZE, 0, SLAB_HWCACHE_ALIGN,
1089 NULL);
1090 if (cifs_sm_req_cachep == NULL) {
1091 mempool_destroy(cifs_req_poolp);
1092 kmem_cache_destroy(cifs_req_cachep);
1093 return -ENOMEM;
1096 if (cifs_min_small < 2)
1097 cifs_min_small = 2;
1098 else if (cifs_min_small > 256) {
1099 cifs_min_small = 256;
1100 cFYI(1, "cifs_min_small set to maximum (256)");
1103 cifs_sm_req_poolp = mempool_create_slab_pool(cifs_min_small,
1104 cifs_sm_req_cachep);
1106 if (cifs_sm_req_poolp == NULL) {
1107 mempool_destroy(cifs_req_poolp);
1108 kmem_cache_destroy(cifs_req_cachep);
1109 kmem_cache_destroy(cifs_sm_req_cachep);
1110 return -ENOMEM;
1113 return 0;
1116 static void
1117 cifs_destroy_request_bufs(void)
1119 mempool_destroy(cifs_req_poolp);
1120 kmem_cache_destroy(cifs_req_cachep);
1121 mempool_destroy(cifs_sm_req_poolp);
1122 kmem_cache_destroy(cifs_sm_req_cachep);
1125 static int
1126 cifs_init_mids(void)
1128 cifs_mid_cachep = kmem_cache_create("cifs_mpx_ids",
1129 sizeof(struct mid_q_entry), 0,
1130 SLAB_HWCACHE_ALIGN, NULL);
1131 if (cifs_mid_cachep == NULL)
1132 return -ENOMEM;
1134 /* 3 is a reasonable minimum number of simultaneous operations */
1135 cifs_mid_poolp = mempool_create_slab_pool(3, cifs_mid_cachep);
1136 if (cifs_mid_poolp == NULL) {
1137 kmem_cache_destroy(cifs_mid_cachep);
1138 return -ENOMEM;
1141 return 0;
1144 static void
1145 cifs_destroy_mids(void)
1147 mempool_destroy(cifs_mid_poolp);
1148 kmem_cache_destroy(cifs_mid_cachep);
1151 static int __init
1152 init_cifs(void)
1154 int rc = 0;
1155 cifs_proc_init();
1156 INIT_LIST_HEAD(&cifs_tcp_ses_list);
1157 #ifdef CONFIG_CIFS_DNOTIFY_EXPERIMENTAL /* unused temporarily */
1158 INIT_LIST_HEAD(&GlobalDnotifyReqList);
1159 INIT_LIST_HEAD(&GlobalDnotifyRsp_Q);
1160 #endif /* was needed for dnotify, and will be needed for inotify when VFS fix */
1162 * Initialize Global counters
1164 atomic_set(&sesInfoAllocCount, 0);
1165 atomic_set(&tconInfoAllocCount, 0);
1166 atomic_set(&tcpSesAllocCount, 0);
1167 atomic_set(&tcpSesReconnectCount, 0);
1168 atomic_set(&tconInfoReconnectCount, 0);
1170 atomic_set(&bufAllocCount, 0);
1171 atomic_set(&smBufAllocCount, 0);
1172 #ifdef CONFIG_CIFS_STATS2
1173 atomic_set(&totBufAllocCount, 0);
1174 atomic_set(&totSmBufAllocCount, 0);
1175 #endif /* CONFIG_CIFS_STATS2 */
1177 atomic_set(&midCount, 0);
1178 GlobalCurrentXid = 0;
1179 GlobalTotalActiveXid = 0;
1180 GlobalMaxActiveXid = 0;
1181 spin_lock_init(&cifs_tcp_ses_lock);
1182 spin_lock_init(&cifs_file_list_lock);
1183 spin_lock_init(&GlobalMid_Lock);
1185 if (cifs_max_pending < 2) {
1186 cifs_max_pending = 2;
1187 cFYI(1, "cifs_max_pending set to min of 2");
1188 } else if (cifs_max_pending > 256) {
1189 cifs_max_pending = 256;
1190 cFYI(1, "cifs_max_pending set to max of 256");
1193 rc = cifs_fscache_register();
1194 if (rc)
1195 goto out_clean_proc;
1197 rc = cifs_init_inodecache();
1198 if (rc)
1199 goto out_unreg_fscache;
1201 rc = cifs_init_mids();
1202 if (rc)
1203 goto out_destroy_inodecache;
1205 rc = cifs_init_request_bufs();
1206 if (rc)
1207 goto out_destroy_mids;
1209 #ifdef CONFIG_CIFS_UPCALL
1210 rc = register_key_type(&cifs_spnego_key_type);
1211 if (rc)
1212 goto out_destroy_request_bufs;
1213 #endif /* CONFIG_CIFS_UPCALL */
1215 #ifdef CONFIG_CIFS_ACL
1216 rc = init_cifs_idmap();
1217 if (rc)
1218 goto out_register_key_type;
1219 #endif /* CONFIG_CIFS_ACL */
1221 rc = register_filesystem(&cifs_fs_type);
1222 if (rc)
1223 goto out_init_cifs_idmap;
1225 return 0;
1227 out_init_cifs_idmap:
1228 #ifdef CONFIG_CIFS_ACL
1229 exit_cifs_idmap();
1230 out_register_key_type:
1231 #endif
1232 #ifdef CONFIG_CIFS_UPCALL
1233 unregister_key_type(&cifs_spnego_key_type);
1234 out_destroy_request_bufs:
1235 #endif
1236 cifs_destroy_request_bufs();
1237 out_destroy_mids:
1238 cifs_destroy_mids();
1239 out_destroy_inodecache:
1240 cifs_destroy_inodecache();
1241 out_unreg_fscache:
1242 cifs_fscache_unregister();
1243 out_clean_proc:
1244 cifs_proc_clean();
1245 return rc;
1248 static void __exit
1249 exit_cifs(void)
1251 cFYI(DBG2, "exit_cifs");
1252 cifs_proc_clean();
1253 cifs_fscache_unregister();
1254 #ifdef CONFIG_CIFS_DFS_UPCALL
1255 cifs_dfs_release_automount_timer();
1256 #endif
1257 #ifdef CONFIG_CIFS_ACL
1258 cifs_destroy_idmaptrees();
1259 exit_cifs_idmap();
1260 #endif
1261 #ifdef CONFIG_CIFS_UPCALL
1262 unregister_key_type(&cifs_spnego_key_type);
1263 #endif
1264 unregister_filesystem(&cifs_fs_type);
1265 cifs_destroy_inodecache();
1266 cifs_destroy_mids();
1267 cifs_destroy_request_bufs();
1270 MODULE_AUTHOR("Steve French <sfrench@us.ibm.com>");
1271 MODULE_LICENSE("GPL"); /* combination of LGPL + GPL source behaves as GPL */
1272 MODULE_DESCRIPTION
1273 ("VFS to access servers complying with the SNIA CIFS Specification "
1274 "e.g. Samba and Windows");
1275 MODULE_VERSION(CIFS_VERSION);
1276 module_init(init_cifs)
1277 module_exit(exit_cifs)