diff options
author | Suresh Jayaraman <sjayaraman@suse.de> | 2010-07-05 08:41:50 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2010-08-02 08:40:33 -0400 |
commit | f579cf3cfd1e19ae5aab6929679d0c04bf1a6284 (patch) | |
tree | 19773895c06b9f3a251745f9c449051e4e0934c1 /fs/cifs | |
parent | c21dfb699f35b6b5508fb808bb0ca211a865f2c9 (diff) |
cifs: register CIFS for caching
Define CIFS for FS-Cache and register for caching. Upon registration the
top-level index object cookie will be stuck to the netfs definition by
FS-Cache.
Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs')
-rw-r--r-- | fs/cifs/Makefile | 2 | ||||
-rw-r--r-- | fs/cifs/cache.c | 46 | ||||
-rw-r--r-- | fs/cifs/cifsfs.c | 8 | ||||
-rw-r--r-- | fs/cifs/fscache.h | 39 |
4 files changed, 95 insertions, 0 deletions
diff --git a/fs/cifs/Makefile b/fs/cifs/Makefile index 9948c0030e86..e2de709a6e5d 100644 --- a/fs/cifs/Makefile +++ b/fs/cifs/Makefile | |||
@@ -11,3 +11,5 @@ cifs-y := cifsfs.o cifssmb.o cifs_debug.o connect.o dir.o file.o inode.o \ | |||
11 | cifs-$(CONFIG_CIFS_UPCALL) += cifs_spnego.o | 11 | cifs-$(CONFIG_CIFS_UPCALL) += cifs_spnego.o |
12 | 12 | ||
13 | cifs-$(CONFIG_CIFS_DFS_UPCALL) += dns_resolve.o cifs_dfs_ref.o | 13 | cifs-$(CONFIG_CIFS_DFS_UPCALL) += dns_resolve.o cifs_dfs_ref.o |
14 | |||
15 | cifs-$(CONFIG_CIFS_FSCACHE) += cache.o | ||
diff --git a/fs/cifs/cache.c b/fs/cifs/cache.c new file mode 100644 index 000000000000..1cb5ffb017f1 --- /dev/null +++ b/fs/cifs/cache.c | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * fs/cifs/cache.c - CIFS filesystem cache index structure definitions | ||
3 | * | ||
4 | * Copyright (c) 2010 Novell, Inc. | ||
5 | * Authors(s): Suresh Jayaraman (sjayaraman@suse.de> | ||
6 | * | ||
7 | * This library is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU Lesser General Public License as published | ||
9 | * by the Free Software Foundation; either version 2.1 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This library is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See | ||
15 | * the GNU Lesser General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU Lesser General Public License | ||
18 | * along with this library; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #include "fscache.h" | ||
22 | |||
23 | /* | ||
24 | * CIFS filesystem definition for FS-Cache | ||
25 | */ | ||
26 | struct fscache_netfs cifs_fscache_netfs = { | ||
27 | .name = "cifs", | ||
28 | .version = 0, | ||
29 | }; | ||
30 | |||
31 | /* | ||
32 | * Register CIFS for caching with FS-Cache | ||
33 | */ | ||
34 | int cifs_fscache_register(void) | ||
35 | { | ||
36 | return fscache_register_netfs(&cifs_fscache_netfs); | ||
37 | } | ||
38 | |||
39 | /* | ||
40 | * Unregister CIFS for caching | ||
41 | */ | ||
42 | void cifs_fscache_unregister(void) | ||
43 | { | ||
44 | fscache_unregister_netfs(&cifs_fscache_netfs); | ||
45 | } | ||
46 | |||
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 2cb1a70214d7..24d7f4ab3b65 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c | |||
@@ -47,6 +47,7 @@ | |||
47 | #include <linux/key-type.h> | 47 | #include <linux/key-type.h> |
48 | #include "dns_resolve.h" | 48 | #include "dns_resolve.h" |
49 | #include "cifs_spnego.h" | 49 | #include "cifs_spnego.h" |
50 | #include "fscache.h" | ||
50 | #define CIFS_MAGIC_NUMBER 0xFF534D42 /* the first four bytes of SMB PDUs */ | 51 | #define CIFS_MAGIC_NUMBER 0xFF534D42 /* the first four bytes of SMB PDUs */ |
51 | 52 | ||
52 | int cifsFYI = 0; | 53 | int cifsFYI = 0; |
@@ -902,6 +903,10 @@ init_cifs(void) | |||
902 | cFYI(1, "cifs_max_pending set to max of 256"); | 903 | cFYI(1, "cifs_max_pending set to max of 256"); |
903 | } | 904 | } |
904 | 905 | ||
906 | rc = cifs_fscache_register(); | ||
907 | if (rc) | ||
908 | goto out; | ||
909 | |||
905 | rc = cifs_init_inodecache(); | 910 | rc = cifs_init_inodecache(); |
906 | if (rc) | 911 | if (rc) |
907 | goto out_clean_proc; | 912 | goto out_clean_proc; |
@@ -951,6 +956,8 @@ init_cifs(void) | |||
951 | cifs_destroy_inodecache(); | 956 | cifs_destroy_inodecache(); |
952 | out_clean_proc: | 957 | out_clean_proc: |
953 | cifs_proc_clean(); | 958 | cifs_proc_clean(); |
959 | cifs_fscache_unregister(); | ||
960 | out: | ||
954 | return rc; | 961 | return rc; |
955 | } | 962 | } |
956 | 963 | ||
@@ -959,6 +966,7 @@ exit_cifs(void) | |||
959 | { | 966 | { |
960 | cFYI(DBG2, "exit_cifs"); | 967 | cFYI(DBG2, "exit_cifs"); |
961 | cifs_proc_clean(); | 968 | cifs_proc_clean(); |
969 | cifs_fscache_unregister(); | ||
962 | #ifdef CONFIG_CIFS_DFS_UPCALL | 970 | #ifdef CONFIG_CIFS_DFS_UPCALL |
963 | cifs_dfs_release_automount_timer(); | 971 | cifs_dfs_release_automount_timer(); |
964 | cifs_exit_dns_resolver(); | 972 | cifs_exit_dns_resolver(); |
diff --git a/fs/cifs/fscache.h b/fs/cifs/fscache.h new file mode 100644 index 000000000000..14dae1975d78 --- /dev/null +++ b/fs/cifs/fscache.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * fs/cifs/fscache.h - CIFS filesystem cache interface definitions | ||
3 | * | ||
4 | * Copyright (c) 2010 Novell, Inc. | ||
5 | * Authors(s): Suresh Jayaraman (sjayaraman@suse.de> | ||
6 | * | ||
7 | * This library is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU Lesser General Public License as published | ||
9 | * by the Free Software Foundation; either version 2.1 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This library is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See | ||
15 | * the GNU Lesser General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU Lesser General Public License | ||
18 | * along with this library; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #ifndef _CIFS_FSCACHE_H | ||
22 | #define _CIFS_FSCACHE_H | ||
23 | |||
24 | #include <linux/fscache.h> | ||
25 | |||
26 | #ifdef CONFIG_CIFS_FSCACHE | ||
27 | |||
28 | extern struct fscache_netfs cifs_fscache_netfs; | ||
29 | |||
30 | extern int cifs_fscache_register(void); | ||
31 | extern void cifs_fscache_unregister(void); | ||
32 | |||
33 | #else /* CONFIG_CIFS_FSCACHE */ | ||
34 | static inline int cifs_fscache_register(void) { return 0; } | ||
35 | static inline void cifs_fscache_unregister(void) {} | ||
36 | |||
37 | #endif /* CONFIG_CIFS_FSCACHE */ | ||
38 | |||
39 | #endif /* _CIFS_FSCACHE_H */ | ||