diff options
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/Kconfig | 2 | ||||
-rw-r--r-- | fs/nfs/Makefile | 19 | ||||
-rw-r--r-- | fs/nfs/callback.h | 2 | ||||
-rw-r--r-- | fs/nfs/client.c | 34 | ||||
-rw-r--r-- | fs/nfs/delegation.h | 2 | ||||
-rw-r--r-- | fs/nfs/dir.c | 6 | ||||
-rw-r--r-- | fs/nfs/direct.c | 2 | ||||
-rw-r--r-- | fs/nfs/dns_resolve.c | 4 | ||||
-rw-r--r-- | fs/nfs/file.c | 13 | ||||
-rw-r--r-- | fs/nfs/inode.c | 64 | ||||
-rw-r--r-- | fs/nfs/internal.h | 8 | ||||
-rw-r--r-- | fs/nfs/namespace.c | 2 | ||||
-rw-r--r-- | fs/nfs/netns.h | 2 | ||||
-rw-r--r-- | fs/nfs/nfs.h | 17 | ||||
-rw-r--r-- | fs/nfs/nfs4_fs.h | 5 | ||||
-rw-r--r-- | fs/nfs/nfs4super.c | 9 | ||||
-rw-r--r-- | fs/nfs/pagelist.c | 4 | ||||
-rw-r--r-- | fs/nfs/pnfs.c | 2 | ||||
-rw-r--r-- | fs/nfs/read.c | 4 | ||||
-rw-r--r-- | fs/nfs/super.c | 41 | ||||
-rw-r--r-- | fs/nfs/write.c | 13 |
21 files changed, 147 insertions, 108 deletions
diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig index f81a729c00e9..195c1ea6151a 100644 --- a/fs/nfs/Kconfig +++ b/fs/nfs/Kconfig | |||
@@ -72,7 +72,7 @@ config NFS_V3_ACL | |||
72 | If unsure, say N. | 72 | If unsure, say N. |
73 | 73 | ||
74 | config NFS_V4 | 74 | config NFS_V4 |
75 | bool "NFS client support for NFS version 4" | 75 | tristate "NFS client support for NFS version 4" |
76 | depends on NFS_FS | 76 | depends on NFS_FS |
77 | select SUNRPC_GSS | 77 | select SUNRPC_GSS |
78 | select KEYS | 78 | select KEYS |
diff --git a/fs/nfs/Makefile b/fs/nfs/Makefile index 01846edc5c94..8bf3a3f6925a 100644 --- a/fs/nfs/Makefile +++ b/fs/nfs/Makefile | |||
@@ -9,17 +9,7 @@ nfs-y := client.o dir.o file.o getroot.o inode.o super.o \ | |||
9 | write.o namespace.o mount_clnt.o \ | 9 | write.o namespace.o mount_clnt.o \ |
10 | dns_resolve.o cache_lib.o | 10 | dns_resolve.o cache_lib.o |
11 | nfs-$(CONFIG_ROOT_NFS) += nfsroot.o | 11 | nfs-$(CONFIG_ROOT_NFS) += nfsroot.o |
12 | nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \ | 12 | nfs-$(CONFIG_SYSCTL) += sysctl.o |
13 | nfs4super.o nfs4file.o delegation.o idmap.o \ | ||
14 | callback.o callback_xdr.o callback_proc.o \ | ||
15 | nfs4namespace.o nfs4getroot.o nfs4client.o | ||
16 | nfs-$(CONFIG_NFS_V4_1) += pnfs.o pnfs_dev.o | ||
17 | |||
18 | ifeq ($(CONFIG_SYSCTL), y) | ||
19 | nfs-y += sysctl.o | ||
20 | nfs-$(CONFIG_NFS_V4) += nfs4sysctl.o | ||
21 | endif | ||
22 | |||
23 | nfs-$(CONFIG_NFS_FSCACHE) += fscache.o fscache-index.o | 13 | nfs-$(CONFIG_NFS_FSCACHE) += fscache.o fscache-index.o |
24 | 14 | ||
25 | obj-$(CONFIG_NFS_V2) += nfs2.o | 15 | obj-$(CONFIG_NFS_V2) += nfs2.o |
@@ -29,6 +19,13 @@ obj-$(CONFIG_NFS_V3) += nfs3.o | |||
29 | nfs3-y := nfs3super.o nfs3client.o nfs3proc.o nfs3xdr.o | 19 | nfs3-y := nfs3super.o nfs3client.o nfs3proc.o nfs3xdr.o |
30 | nfs3-$(CONFIG_NFS_V3_ACL) += nfs3acl.o | 20 | nfs3-$(CONFIG_NFS_V3_ACL) += nfs3acl.o |
31 | 21 | ||
22 | obj-$(CONFIG_NFS_V4) += nfs4.o | ||
23 | nfs4-y := nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o nfs4super.o nfs4file.o \ | ||
24 | delegation.o idmap.o callback.o callback_xdr.o callback_proc.o \ | ||
25 | nfs4namespace.o nfs4getroot.o nfs4client.o | ||
26 | nfs4-$(CONFIG_SYSCTL) += nfs4sysctl.o | ||
27 | nfs4-$(CONFIG_NFS_V4_1) += pnfs.o pnfs_dev.o | ||
28 | |||
32 | obj-$(CONFIG_PNFS_FILE_LAYOUT) += nfs_layout_nfsv41_files.o | 29 | obj-$(CONFIG_PNFS_FILE_LAYOUT) += nfs_layout_nfsv41_files.o |
33 | nfs_layout_nfsv41_files-y := nfs4filelayout.o nfs4filelayoutdev.o | 30 | nfs_layout_nfsv41_files-y := nfs4filelayout.o nfs4filelayoutdev.o |
34 | 31 | ||
diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h index a5527c90a5aa..b44d7b128b71 100644 --- a/fs/nfs/callback.h +++ b/fs/nfs/callback.h | |||
@@ -192,7 +192,7 @@ extern __be32 nfs4_callback_getattr(struct cb_getattrargs *args, | |||
192 | struct cb_process_state *cps); | 192 | struct cb_process_state *cps); |
193 | extern __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy, | 193 | extern __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy, |
194 | struct cb_process_state *cps); | 194 | struct cb_process_state *cps); |
195 | #ifdef CONFIG_NFS_V4 | 195 | #if IS_ENABLED(CONFIG_NFS_V4) |
196 | extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt); | 196 | extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt); |
197 | extern void nfs_callback_down(int minorversion); | 197 | extern void nfs_callback_down(int minorversion); |
198 | extern int nfs4_validate_delegation_stateid(struct nfs_delegation *delegation, | 198 | extern int nfs4_validate_delegation_stateid(struct nfs_delegation *delegation, |
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 8687b6b6edc1..9fc0d9dfc91b 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
@@ -143,24 +143,6 @@ void unregister_nfs_version(struct nfs_subversion *nfs) | |||
143 | EXPORT_SYMBOL_GPL(unregister_nfs_version); | 143 | EXPORT_SYMBOL_GPL(unregister_nfs_version); |
144 | 144 | ||
145 | /* | 145 | /* |
146 | * Preload all configured NFS versions during module init. | ||
147 | * This function should be edited after each protocol is converted, | ||
148 | * and eventually removed. | ||
149 | */ | ||
150 | int __init nfs_register_versions(void) | ||
151 | { | ||
152 | return init_nfs_v4(); | ||
153 | } | ||
154 | |||
155 | /* | ||
156 | * Remove each pre-loaded NFS version | ||
157 | */ | ||
158 | void nfs_unregister_versions(void) | ||
159 | { | ||
160 | exit_nfs_v4(); | ||
161 | } | ||
162 | |||
163 | /* | ||
164 | * Allocate a shared client record | 146 | * Allocate a shared client record |
165 | * | 147 | * |
166 | * Since these are allocated/deallocated very rarely, we don't | 148 | * Since these are allocated/deallocated very rarely, we don't |
@@ -214,7 +196,7 @@ error_0: | |||
214 | } | 196 | } |
215 | EXPORT_SYMBOL_GPL(nfs_alloc_client); | 197 | EXPORT_SYMBOL_GPL(nfs_alloc_client); |
216 | 198 | ||
217 | #ifdef CONFIG_NFS_V4 | 199 | #if IS_ENABLED(CONFIG_NFS_V4) |
218 | /* idr_remove_all is not needed as all id's are removed by nfs_put_client */ | 200 | /* idr_remove_all is not needed as all id's are removed by nfs_put_client */ |
219 | void nfs_cleanup_cb_ident_idr(struct net *net) | 201 | void nfs_cleanup_cb_ident_idr(struct net *net) |
220 | { | 202 | { |
@@ -390,6 +372,7 @@ int nfs_sockaddr_match_ipaddr(const struct sockaddr *sa1, | |||
390 | } | 372 | } |
391 | return 0; | 373 | return 0; |
392 | } | 374 | } |
375 | EXPORT_SYMBOL_GPL(nfs_sockaddr_match_ipaddr); | ||
393 | #endif /* CONFIG_NFS_V4_1 */ | 376 | #endif /* CONFIG_NFS_V4_1 */ |
394 | 377 | ||
395 | /* | 378 | /* |
@@ -456,6 +439,7 @@ int nfs_wait_client_init_complete(const struct nfs_client *clp) | |||
456 | return wait_event_killable(nfs_client_active_wq, | 439 | return wait_event_killable(nfs_client_active_wq, |
457 | nfs_client_init_is_complete(clp)); | 440 | nfs_client_init_is_complete(clp)); |
458 | } | 441 | } |
442 | EXPORT_SYMBOL_GPL(nfs_wait_client_init_complete); | ||
459 | 443 | ||
460 | /* | 444 | /* |
461 | * Found an existing client. Make sure it's ready before returning. | 445 | * Found an existing client. Make sure it's ready before returning. |
@@ -530,6 +514,7 @@ nfs_get_client(const struct nfs_client_initdata *cl_init, | |||
530 | cl_init->hostname ?: "", PTR_ERR(new)); | 514 | cl_init->hostname ?: "", PTR_ERR(new)); |
531 | return new; | 515 | return new; |
532 | } | 516 | } |
517 | EXPORT_SYMBOL_GPL(nfs_get_client); | ||
533 | 518 | ||
534 | /* | 519 | /* |
535 | * Mark a server as ready or failed | 520 | * Mark a server as ready or failed |
@@ -540,6 +525,7 @@ void nfs_mark_client_ready(struct nfs_client *clp, int state) | |||
540 | clp->cl_cons_state = state; | 525 | clp->cl_cons_state = state; |
541 | wake_up_all(&nfs_client_active_wq); | 526 | wake_up_all(&nfs_client_active_wq); |
542 | } | 527 | } |
528 | EXPORT_SYMBOL_GPL(nfs_mark_client_ready); | ||
543 | 529 | ||
544 | /* | 530 | /* |
545 | * Initialise the timeout values for a connection | 531 | * Initialise the timeout values for a connection |
@@ -581,6 +567,7 @@ void nfs_init_timeout_values(struct rpc_timeout *to, int proto, | |||
581 | BUG(); | 567 | BUG(); |
582 | } | 568 | } |
583 | } | 569 | } |
570 | EXPORT_SYMBOL_GPL(nfs_init_timeout_values); | ||
584 | 571 | ||
585 | /* | 572 | /* |
586 | * Create an RPC client handle | 573 | * Create an RPC client handle |
@@ -620,6 +607,7 @@ int nfs_create_rpc_client(struct nfs_client *clp, | |||
620 | clp->cl_rpcclient = clnt; | 607 | clp->cl_rpcclient = clnt; |
621 | return 0; | 608 | return 0; |
622 | } | 609 | } |
610 | EXPORT_SYMBOL_GPL(nfs_create_rpc_client); | ||
623 | 611 | ||
624 | /* | 612 | /* |
625 | * Version 2 or 3 client destruction | 613 | * Version 2 or 3 client destruction |
@@ -706,6 +694,7 @@ int nfs_init_server_rpcclient(struct nfs_server *server, | |||
706 | 694 | ||
707 | return 0; | 695 | return 0; |
708 | } | 696 | } |
697 | EXPORT_SYMBOL_GPL(nfs_init_server_rpcclient); | ||
709 | 698 | ||
710 | /** | 699 | /** |
711 | * nfs_init_client - Initialise an NFS2 or NFS3 client | 700 | * nfs_init_client - Initialise an NFS2 or NFS3 client |
@@ -932,6 +921,7 @@ out_error: | |||
932 | dprintk("nfs_probe_fsinfo: error = %d\n", -error); | 921 | dprintk("nfs_probe_fsinfo: error = %d\n", -error); |
933 | return error; | 922 | return error; |
934 | } | 923 | } |
924 | EXPORT_SYMBOL_GPL(nfs_probe_fsinfo); | ||
935 | 925 | ||
936 | /* | 926 | /* |
937 | * Copy useful information when duplicating a server record | 927 | * Copy useful information when duplicating a server record |
@@ -948,6 +938,7 @@ void nfs_server_copy_userdata(struct nfs_server *target, struct nfs_server *sour | |||
948 | target->caps = source->caps; | 938 | target->caps = source->caps; |
949 | target->options = source->options; | 939 | target->options = source->options; |
950 | } | 940 | } |
941 | EXPORT_SYMBOL_GPL(nfs_server_copy_userdata); | ||
951 | 942 | ||
952 | void nfs_server_insert_lists(struct nfs_server *server) | 943 | void nfs_server_insert_lists(struct nfs_server *server) |
953 | { | 944 | { |
@@ -961,6 +952,7 @@ void nfs_server_insert_lists(struct nfs_server *server) | |||
961 | spin_unlock(&nn->nfs_client_lock); | 952 | spin_unlock(&nn->nfs_client_lock); |
962 | 953 | ||
963 | } | 954 | } |
955 | EXPORT_SYMBOL_GPL(nfs_server_insert_lists); | ||
964 | 956 | ||
965 | static void nfs_server_remove_lists(struct nfs_server *server) | 957 | static void nfs_server_remove_lists(struct nfs_server *server) |
966 | { | 958 | { |
@@ -1020,6 +1012,7 @@ struct nfs_server *nfs_alloc_server(void) | |||
1020 | 1012 | ||
1021 | return server; | 1013 | return server; |
1022 | } | 1014 | } |
1015 | EXPORT_SYMBOL_GPL(nfs_alloc_server); | ||
1023 | 1016 | ||
1024 | /* | 1017 | /* |
1025 | * Free up a server record | 1018 | * Free up a server record |
@@ -1048,6 +1041,7 @@ void nfs_free_server(struct nfs_server *server) | |||
1048 | nfs_release_automount_timer(); | 1041 | nfs_release_automount_timer(); |
1049 | dprintk("<-- nfs_free_server()\n"); | 1042 | dprintk("<-- nfs_free_server()\n"); |
1050 | } | 1043 | } |
1044 | EXPORT_SYMBOL_GPL(nfs_free_server); | ||
1051 | 1045 | ||
1052 | /* | 1046 | /* |
1053 | * Create a version 2 or 3 volume record | 1047 | * Create a version 2 or 3 volume record |
@@ -1193,7 +1187,7 @@ void nfs_clients_init(struct net *net) | |||
1193 | 1187 | ||
1194 | INIT_LIST_HEAD(&nn->nfs_client_list); | 1188 | INIT_LIST_HEAD(&nn->nfs_client_list); |
1195 | INIT_LIST_HEAD(&nn->nfs_volume_list); | 1189 | INIT_LIST_HEAD(&nn->nfs_volume_list); |
1196 | #ifdef CONFIG_NFS_V4 | 1190 | #if IS_ENABLED(CONFIG_NFS_V4) |
1197 | idr_init(&nn->cb_ident_idr); | 1191 | idr_init(&nn->cb_ident_idr); |
1198 | #endif | 1192 | #endif |
1199 | spin_lock_init(&nn->nfs_client_lock); | 1193 | spin_lock_init(&nn->nfs_client_lock); |
diff --git a/fs/nfs/delegation.h b/fs/nfs/delegation.h index 1f3ccd934635..bbc6a4dba0d8 100644 --- a/fs/nfs/delegation.h +++ b/fs/nfs/delegation.h | |||
@@ -8,7 +8,7 @@ | |||
8 | #ifndef FS_NFS_DELEGATION_H | 8 | #ifndef FS_NFS_DELEGATION_H |
9 | #define FS_NFS_DELEGATION_H | 9 | #define FS_NFS_DELEGATION_H |
10 | 10 | ||
11 | #if defined(CONFIG_NFS_V4) | 11 | #if IS_ENABLED(CONFIG_NFS_V4) |
12 | /* | 12 | /* |
13 | * NFSv4 delegation | 13 | * NFSv4 delegation |
14 | */ | 14 | */ |
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 55438c970cbf..627f108ede23 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
@@ -936,6 +936,7 @@ void nfs_force_lookup_revalidate(struct inode *dir) | |||
936 | { | 936 | { |
937 | NFS_I(dir)->cache_change_attribute++; | 937 | NFS_I(dir)->cache_change_attribute++; |
938 | } | 938 | } |
939 | EXPORT_SYMBOL_GPL(nfs_force_lookup_revalidate); | ||
939 | 940 | ||
940 | /* | 941 | /* |
941 | * A check for whether or not the parent directory has changed. | 942 | * A check for whether or not the parent directory has changed. |
@@ -1267,7 +1268,7 @@ out: | |||
1267 | } | 1268 | } |
1268 | EXPORT_SYMBOL_GPL(nfs_lookup); | 1269 | EXPORT_SYMBOL_GPL(nfs_lookup); |
1269 | 1270 | ||
1270 | #ifdef CONFIG_NFS_V4 | 1271 | #if IS_ENABLED(CONFIG_NFS_V4) |
1271 | static int nfs4_lookup_revalidate(struct dentry *, unsigned int); | 1272 | static int nfs4_lookup_revalidate(struct dentry *, unsigned int); |
1272 | 1273 | ||
1273 | const struct dentry_operations nfs4_dentry_operations = { | 1274 | const struct dentry_operations nfs4_dentry_operations = { |
@@ -1277,6 +1278,7 @@ const struct dentry_operations nfs4_dentry_operations = { | |||
1277 | .d_automount = nfs_d_automount, | 1278 | .d_automount = nfs_d_automount, |
1278 | .d_release = nfs_d_release, | 1279 | .d_release = nfs_d_release, |
1279 | }; | 1280 | }; |
1281 | EXPORT_SYMBOL_GPL(nfs4_dentry_operations); | ||
1280 | 1282 | ||
1281 | static fmode_t flags_to_mode(int flags) | 1283 | static fmode_t flags_to_mode(int flags) |
1282 | { | 1284 | { |
@@ -1419,6 +1421,7 @@ no_open: | |||
1419 | 1421 | ||
1420 | return finish_no_open(file, res); | 1422 | return finish_no_open(file, res); |
1421 | } | 1423 | } |
1424 | EXPORT_SYMBOL_GPL(nfs_atomic_open); | ||
1422 | 1425 | ||
1423 | static int nfs4_lookup_revalidate(struct dentry *dentry, unsigned int flags) | 1426 | static int nfs4_lookup_revalidate(struct dentry *dentry, unsigned int flags) |
1424 | { | 1427 | { |
@@ -2142,6 +2145,7 @@ int nfs_may_open(struct inode *inode, struct rpc_cred *cred, int openflags) | |||
2142 | { | 2145 | { |
2143 | return nfs_do_access(inode, cred, nfs_open_permission_mask(openflags)); | 2146 | return nfs_do_access(inode, cred, nfs_open_permission_mask(openflags)); |
2144 | } | 2147 | } |
2148 | EXPORT_SYMBOL_GPL(nfs_may_open); | ||
2145 | 2149 | ||
2146 | int nfs_permission(struct inode *inode, int mask) | 2150 | int nfs_permission(struct inode *inode, int mask) |
2147 | { | 2151 | { |
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 899238156b11..b7b4f80968b5 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c | |||
@@ -460,7 +460,7 @@ static void nfs_inode_dio_write_done(struct inode *inode) | |||
460 | inode_dio_done(inode); | 460 | inode_dio_done(inode); |
461 | } | 461 | } |
462 | 462 | ||
463 | #if IS_ENABLED(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 463 | #if IS_ENABLED(CONFIG_NFS_V3) || IS_ENABLED(CONFIG_NFS_V4) |
464 | static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq) | 464 | static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq) |
465 | { | 465 | { |
466 | struct nfs_pageio_descriptor desc; | 466 | struct nfs_pageio_descriptor desc; |
diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c index b3924b8a6000..31c26c4dcc23 100644 --- a/fs/nfs/dns_resolve.c +++ b/fs/nfs/dns_resolve.c | |||
@@ -8,6 +8,7 @@ | |||
8 | 8 | ||
9 | #ifdef CONFIG_NFS_USE_KERNEL_DNS | 9 | #ifdef CONFIG_NFS_USE_KERNEL_DNS |
10 | 10 | ||
11 | #include <linux/module.h> | ||
11 | #include <linux/sunrpc/clnt.h> | 12 | #include <linux/sunrpc/clnt.h> |
12 | #include <linux/dns_resolver.h> | 13 | #include <linux/dns_resolver.h> |
13 | #include "dns_resolve.h" | 14 | #include "dns_resolve.h" |
@@ -27,9 +28,11 @@ ssize_t nfs_dns_resolve_name(struct net *net, char *name, size_t namelen, | |||
27 | kfree(ip_addr); | 28 | kfree(ip_addr); |
28 | return ret; | 29 | return ret; |
29 | } | 30 | } |
31 | EXPORT_SYMBOL_GPL(nfs_dns_resolve_name); | ||
30 | 32 | ||
31 | #else | 33 | #else |
32 | 34 | ||
35 | #include <linux/module.h> | ||
33 | #include <linux/hash.h> | 36 | #include <linux/hash.h> |
34 | #include <linux/string.h> | 37 | #include <linux/string.h> |
35 | #include <linux/kmod.h> | 38 | #include <linux/kmod.h> |
@@ -345,6 +348,7 @@ ssize_t nfs_dns_resolve_name(struct net *net, char *name, | |||
345 | ret = -ESRCH; | 348 | ret = -ESRCH; |
346 | return ret; | 349 | return ret; |
347 | } | 350 | } |
351 | EXPORT_SYMBOL_GPL(nfs_dns_resolve_name); | ||
348 | 352 | ||
349 | int nfs_dns_resolver_cache_init(struct net *net) | 353 | int nfs_dns_resolver_cache_init(struct net *net) |
350 | { | 354 | { |
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 5b3e70389553..1557978ca7b3 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
@@ -53,6 +53,7 @@ int nfs_check_flags(int flags) | |||
53 | 53 | ||
54 | return 0; | 54 | return 0; |
55 | } | 55 | } |
56 | EXPORT_SYMBOL_GPL(nfs_check_flags); | ||
56 | 57 | ||
57 | /* | 58 | /* |
58 | * Open file | 59 | * Open file |
@@ -85,6 +86,7 @@ nfs_file_release(struct inode *inode, struct file *filp) | |||
85 | nfs_inc_stats(inode, NFSIOS_VFSRELEASE); | 86 | nfs_inc_stats(inode, NFSIOS_VFSRELEASE); |
86 | return nfs_release(inode, filp); | 87 | return nfs_release(inode, filp); |
87 | } | 88 | } |
89 | EXPORT_SYMBOL_GPL(nfs_file_release); | ||
88 | 90 | ||
89 | /** | 91 | /** |
90 | * nfs_revalidate_size - Revalidate the file size | 92 | * nfs_revalidate_size - Revalidate the file size |
@@ -138,6 +140,7 @@ loff_t nfs_file_llseek(struct file *filp, loff_t offset, int origin) | |||
138 | 140 | ||
139 | return generic_file_llseek(filp, offset, origin); | 141 | return generic_file_llseek(filp, offset, origin); |
140 | } | 142 | } |
143 | EXPORT_SYMBOL_GPL(nfs_file_llseek); | ||
141 | 144 | ||
142 | /* | 145 | /* |
143 | * Flush all dirty pages, and check for write errors. | 146 | * Flush all dirty pages, and check for write errors. |
@@ -166,6 +169,7 @@ nfs_file_flush(struct file *file, fl_owner_t id) | |||
166 | /* Flush writes to the server and return any errors */ | 169 | /* Flush writes to the server and return any errors */ |
167 | return vfs_fsync(file, 0); | 170 | return vfs_fsync(file, 0); |
168 | } | 171 | } |
172 | EXPORT_SYMBOL_GPL(nfs_file_flush); | ||
169 | 173 | ||
170 | ssize_t | 174 | ssize_t |
171 | nfs_file_read(struct kiocb *iocb, const struct iovec *iov, | 175 | nfs_file_read(struct kiocb *iocb, const struct iovec *iov, |
@@ -190,6 +194,7 @@ nfs_file_read(struct kiocb *iocb, const struct iovec *iov, | |||
190 | } | 194 | } |
191 | return result; | 195 | return result; |
192 | } | 196 | } |
197 | EXPORT_SYMBOL_GPL(nfs_file_read); | ||
193 | 198 | ||
194 | ssize_t | 199 | ssize_t |
195 | nfs_file_splice_read(struct file *filp, loff_t *ppos, | 200 | nfs_file_splice_read(struct file *filp, loff_t *ppos, |
@@ -212,6 +217,7 @@ nfs_file_splice_read(struct file *filp, loff_t *ppos, | |||
212 | } | 217 | } |
213 | return res; | 218 | return res; |
214 | } | 219 | } |
220 | EXPORT_SYMBOL_GPL(nfs_file_splice_read); | ||
215 | 221 | ||
216 | int | 222 | int |
217 | nfs_file_mmap(struct file * file, struct vm_area_struct * vma) | 223 | nfs_file_mmap(struct file * file, struct vm_area_struct * vma) |
@@ -233,6 +239,7 @@ nfs_file_mmap(struct file * file, struct vm_area_struct * vma) | |||
233 | } | 239 | } |
234 | return status; | 240 | return status; |
235 | } | 241 | } |
242 | EXPORT_SYMBOL_GPL(nfs_file_mmap); | ||
236 | 243 | ||
237 | /* | 244 | /* |
238 | * Flush any dirty pages for this process, and check for write errors. | 245 | * Flush any dirty pages for this process, and check for write errors. |
@@ -271,6 +278,7 @@ nfs_file_fsync_commit(struct file *file, loff_t start, loff_t end, int datasync) | |||
271 | ret = status; | 278 | ret = status; |
272 | return ret; | 279 | return ret; |
273 | } | 280 | } |
281 | EXPORT_SYMBOL_GPL(nfs_file_fsync_commit); | ||
274 | 282 | ||
275 | static int | 283 | static int |
276 | nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync) | 284 | nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync) |
@@ -615,6 +623,7 @@ out_swapfile: | |||
615 | printk(KERN_INFO "NFS: attempt to write to active swap file!\n"); | 623 | printk(KERN_INFO "NFS: attempt to write to active swap file!\n"); |
616 | goto out; | 624 | goto out; |
617 | } | 625 | } |
626 | EXPORT_SYMBOL_GPL(nfs_file_write); | ||
618 | 627 | ||
619 | ssize_t nfs_file_splice_write(struct pipe_inode_info *pipe, | 628 | ssize_t nfs_file_splice_write(struct pipe_inode_info *pipe, |
620 | struct file *filp, loff_t *ppos, | 629 | struct file *filp, loff_t *ppos, |
@@ -646,6 +655,7 @@ ssize_t nfs_file_splice_write(struct pipe_inode_info *pipe, | |||
646 | nfs_add_stats(inode, NFSIOS_NORMALWRITTENBYTES, written); | 655 | nfs_add_stats(inode, NFSIOS_NORMALWRITTENBYTES, written); |
647 | return ret; | 656 | return ret; |
648 | } | 657 | } |
658 | EXPORT_SYMBOL_GPL(nfs_file_splice_write); | ||
649 | 659 | ||
650 | static int | 660 | static int |
651 | do_getlk(struct file *filp, int cmd, struct file_lock *fl, int is_local) | 661 | do_getlk(struct file *filp, int cmd, struct file_lock *fl, int is_local) |
@@ -806,6 +816,7 @@ int nfs_lock(struct file *filp, int cmd, struct file_lock *fl) | |||
806 | out_err: | 816 | out_err: |
807 | return ret; | 817 | return ret; |
808 | } | 818 | } |
819 | EXPORT_SYMBOL_GPL(nfs_lock); | ||
809 | 820 | ||
810 | /* | 821 | /* |
811 | * Lock a (portion of) a file | 822 | * Lock a (portion of) a file |
@@ -835,6 +846,7 @@ int nfs_flock(struct file *filp, int cmd, struct file_lock *fl) | |||
835 | return do_unlk(filp, cmd, fl, is_local); | 846 | return do_unlk(filp, cmd, fl, is_local); |
836 | return do_setlk(filp, cmd, fl, is_local); | 847 | return do_setlk(filp, cmd, fl, is_local); |
837 | } | 848 | } |
849 | EXPORT_SYMBOL_GPL(nfs_flock); | ||
838 | 850 | ||
839 | /* | 851 | /* |
840 | * There is no protocol support for leases, so we have no way to implement | 852 | * There is no protocol support for leases, so we have no way to implement |
@@ -847,6 +859,7 @@ int nfs_setlease(struct file *file, long arg, struct file_lock **fl) | |||
847 | file->f_path.dentry->d_name.name, arg); | 859 | file->f_path.dentry->d_name.name, arg); |
848 | return -EINVAL; | 860 | return -EINVAL; |
849 | } | 861 | } |
862 | EXPORT_SYMBOL_GPL(nfs_setlease); | ||
850 | 863 | ||
851 | const struct file_operations nfs_file_operations = { | 864 | const struct file_operations nfs_file_operations = { |
852 | .llseek = nfs_file_llseek, | 865 | .llseek = nfs_file_llseek, |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 78dfc3e895ec..2ed6138f32ad 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -82,6 +82,7 @@ int nfs_wait_bit_killable(void *word) | |||
82 | freezable_schedule(); | 82 | freezable_schedule(); |
83 | return 0; | 83 | return 0; |
84 | } | 84 | } |
85 | EXPORT_SYMBOL_GPL(nfs_wait_bit_killable); | ||
85 | 86 | ||
86 | /** | 87 | /** |
87 | * nfs_compat_user_ino64 - returns the user-visible inode number | 88 | * nfs_compat_user_ino64 - returns the user-visible inode number |
@@ -117,6 +118,7 @@ void nfs_clear_inode(struct inode *inode) | |||
117 | nfs_access_zap_cache(inode); | 118 | nfs_access_zap_cache(inode); |
118 | nfs_fscache_release_inode_cookie(inode); | 119 | nfs_fscache_release_inode_cookie(inode); |
119 | } | 120 | } |
121 | EXPORT_SYMBOL_GPL(nfs_clear_inode); | ||
120 | 122 | ||
121 | void nfs_evict_inode(struct inode *inode) | 123 | void nfs_evict_inode(struct inode *inode) |
122 | { | 124 | { |
@@ -393,6 +395,7 @@ out_no_inode: | |||
393 | dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode)); | 395 | dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode)); |
394 | goto out; | 396 | goto out; |
395 | } | 397 | } |
398 | EXPORT_SYMBOL_GPL(nfs_fhget); | ||
396 | 399 | ||
397 | #define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET|ATTR_FILE|ATTR_OPEN) | 400 | #define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET|ATTR_FILE|ATTR_OPEN) |
398 | 401 | ||
@@ -655,6 +658,7 @@ struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, fmode_t f | |||
655 | ctx->mdsthreshold = NULL; | 658 | ctx->mdsthreshold = NULL; |
656 | return ctx; | 659 | return ctx; |
657 | } | 660 | } |
661 | EXPORT_SYMBOL_GPL(alloc_nfs_open_context); | ||
658 | 662 | ||
659 | struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx) | 663 | struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx) |
660 | { | 664 | { |
@@ -662,6 +666,7 @@ struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx) | |||
662 | atomic_inc(&ctx->lock_context.count); | 666 | atomic_inc(&ctx->lock_context.count); |
663 | return ctx; | 667 | return ctx; |
664 | } | 668 | } |
669 | EXPORT_SYMBOL_GPL(get_nfs_open_context); | ||
665 | 670 | ||
666 | static void __put_nfs_open_context(struct nfs_open_context *ctx, int is_sync) | 671 | static void __put_nfs_open_context(struct nfs_open_context *ctx, int is_sync) |
667 | { | 672 | { |
@@ -689,6 +694,7 @@ void put_nfs_open_context(struct nfs_open_context *ctx) | |||
689 | { | 694 | { |
690 | __put_nfs_open_context(ctx, 0); | 695 | __put_nfs_open_context(ctx, 0); |
691 | } | 696 | } |
697 | EXPORT_SYMBOL_GPL(put_nfs_open_context); | ||
692 | 698 | ||
693 | /* | 699 | /* |
694 | * Ensure that mmap has a recent RPC credential for use when writing out | 700 | * Ensure that mmap has a recent RPC credential for use when writing out |
@@ -704,6 +710,7 @@ void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx) | |||
704 | list_add(&ctx->list, &nfsi->open_files); | 710 | list_add(&ctx->list, &nfsi->open_files); |
705 | spin_unlock(&inode->i_lock); | 711 | spin_unlock(&inode->i_lock); |
706 | } | 712 | } |
713 | EXPORT_SYMBOL_GPL(nfs_file_set_open_context); | ||
707 | 714 | ||
708 | /* | 715 | /* |
709 | * Given an inode, search for an open context with the desired characteristics | 716 | * Given an inode, search for an open context with the desired characteristics |
@@ -1497,11 +1504,12 @@ struct inode *nfs_alloc_inode(struct super_block *sb) | |||
1497 | nfsi->acl_access = ERR_PTR(-EAGAIN); | 1504 | nfsi->acl_access = ERR_PTR(-EAGAIN); |
1498 | nfsi->acl_default = ERR_PTR(-EAGAIN); | 1505 | nfsi->acl_default = ERR_PTR(-EAGAIN); |
1499 | #endif | 1506 | #endif |
1500 | #ifdef CONFIG_NFS_V4 | 1507 | #if IS_ENABLED(CONFIG_NFS_V4) |
1501 | nfsi->nfs4_acl = NULL; | 1508 | nfsi->nfs4_acl = NULL; |
1502 | #endif /* CONFIG_NFS_V4 */ | 1509 | #endif /* CONFIG_NFS_V4 */ |
1503 | return &nfsi->vfs_inode; | 1510 | return &nfsi->vfs_inode; |
1504 | } | 1511 | } |
1512 | EXPORT_SYMBOL_GPL(nfs_alloc_inode); | ||
1505 | 1513 | ||
1506 | static void nfs_i_callback(struct rcu_head *head) | 1514 | static void nfs_i_callback(struct rcu_head *head) |
1507 | { | 1515 | { |
@@ -1513,10 +1521,11 @@ void nfs_destroy_inode(struct inode *inode) | |||
1513 | { | 1521 | { |
1514 | call_rcu(&inode->i_rcu, nfs_i_callback); | 1522 | call_rcu(&inode->i_rcu, nfs_i_callback); |
1515 | } | 1523 | } |
1524 | EXPORT_SYMBOL_GPL(nfs_destroy_inode); | ||
1516 | 1525 | ||
1517 | static inline void nfs4_init_once(struct nfs_inode *nfsi) | 1526 | static inline void nfs4_init_once(struct nfs_inode *nfsi) |
1518 | { | 1527 | { |
1519 | #ifdef CONFIG_NFS_V4 | 1528 | #if IS_ENABLED(CONFIG_NFS_V4) |
1520 | INIT_LIST_HEAD(&nfsi->open_states); | 1529 | INIT_LIST_HEAD(&nfsi->open_states); |
1521 | nfsi->delegation = NULL; | 1530 | nfsi->delegation = NULL; |
1522 | nfsi->delegation_state = 0; | 1531 | nfsi->delegation_state = 0; |
@@ -1562,6 +1571,7 @@ static void nfs_destroy_inodecache(void) | |||
1562 | } | 1571 | } |
1563 | 1572 | ||
1564 | struct workqueue_struct *nfsiod_workqueue; | 1573 | struct workqueue_struct *nfsiod_workqueue; |
1574 | EXPORT_SYMBOL_GPL(nfsiod_workqueue); | ||
1565 | 1575 | ||
1566 | /* | 1576 | /* |
1567 | * start up the nfsiod workqueue | 1577 | * start up the nfsiod workqueue |
@@ -1622,90 +1632,80 @@ static int __init init_nfs_fs(void) | |||
1622 | 1632 | ||
1623 | err = nfs_dns_resolver_init(); | 1633 | err = nfs_dns_resolver_init(); |
1624 | if (err < 0) | 1634 | if (err < 0) |
1625 | goto out11; | 1635 | goto out10;; |
1626 | 1636 | ||
1627 | err = register_pernet_subsys(&nfs_net_ops); | 1637 | err = register_pernet_subsys(&nfs_net_ops); |
1628 | if (err < 0) | 1638 | if (err < 0) |
1629 | goto out10; | 1639 | goto out9; |
1630 | 1640 | ||
1631 | err = nfs_fscache_register(); | 1641 | err = nfs_fscache_register(); |
1632 | if (err < 0) | 1642 | if (err < 0) |
1633 | goto out9; | 1643 | goto out8; |
1634 | 1644 | ||
1635 | err = nfsiod_start(); | 1645 | err = nfsiod_start(); |
1636 | if (err) | 1646 | if (err) |
1637 | goto out8; | 1647 | goto out7; |
1638 | 1648 | ||
1639 | err = nfs_fs_proc_init(); | 1649 | err = nfs_fs_proc_init(); |
1640 | if (err) | 1650 | if (err) |
1641 | goto out7; | 1651 | goto out6; |
1642 | 1652 | ||
1643 | err = nfs_init_nfspagecache(); | 1653 | err = nfs_init_nfspagecache(); |
1644 | if (err) | 1654 | if (err) |
1645 | goto out6; | 1655 | goto out5; |
1646 | 1656 | ||
1647 | err = nfs_init_inodecache(); | 1657 | err = nfs_init_inodecache(); |
1648 | if (err) | 1658 | if (err) |
1649 | goto out5; | 1659 | goto out4; |
1650 | 1660 | ||
1651 | err = nfs_init_readpagecache(); | 1661 | err = nfs_init_readpagecache(); |
1652 | if (err) | 1662 | if (err) |
1653 | goto out4; | 1663 | goto out3; |
1654 | 1664 | ||
1655 | err = nfs_init_writepagecache(); | 1665 | err = nfs_init_writepagecache(); |
1656 | if (err) | 1666 | if (err) |
1657 | goto out3; | 1667 | goto out2; |
1658 | 1668 | ||
1659 | err = nfs_init_directcache(); | 1669 | err = nfs_init_directcache(); |
1660 | if (err) | 1670 | if (err) |
1661 | goto out2; | 1671 | goto out1; |
1662 | 1672 | ||
1663 | #ifdef CONFIG_PROC_FS | 1673 | #ifdef CONFIG_PROC_FS |
1664 | rpc_proc_register(&init_net, &nfs_rpcstat); | 1674 | rpc_proc_register(&init_net, &nfs_rpcstat); |
1665 | #endif | 1675 | #endif |
1666 | |||
1667 | err = nfs_register_versions(); | ||
1668 | if (err) | ||
1669 | goto out1; | ||
1670 | |||
1671 | if ((err = register_nfs_fs()) != 0) | 1676 | if ((err = register_nfs_fs()) != 0) |
1672 | goto out0; | 1677 | goto out0; |
1673 | 1678 | ||
1674 | return 0; | 1679 | return 0; |
1675 | out0: | 1680 | out0: |
1676 | nfs_unregister_versions(); | ||
1677 | out1: | ||
1678 | #ifdef CONFIG_PROC_FS | 1681 | #ifdef CONFIG_PROC_FS |
1679 | rpc_proc_unregister(&init_net, "nfs"); | 1682 | rpc_proc_unregister(&init_net, "nfs"); |
1680 | #endif | 1683 | #endif |
1681 | nfs_destroy_directcache(); | 1684 | nfs_destroy_directcache(); |
1682 | out2: | 1685 | out1: |
1683 | nfs_destroy_writepagecache(); | 1686 | nfs_destroy_writepagecache(); |
1684 | out3: | 1687 | out2: |
1685 | nfs_destroy_readpagecache(); | 1688 | nfs_destroy_readpagecache(); |
1686 | out4: | 1689 | out3: |
1687 | nfs_destroy_inodecache(); | 1690 | nfs_destroy_inodecache(); |
1688 | out5: | 1691 | out4: |
1689 | nfs_destroy_nfspagecache(); | 1692 | nfs_destroy_nfspagecache(); |
1690 | out6: | 1693 | out5: |
1691 | nfs_fs_proc_exit(); | 1694 | nfs_fs_proc_exit(); |
1692 | out7: | 1695 | out6: |
1693 | nfsiod_stop(); | 1696 | nfsiod_stop(); |
1694 | out8: | 1697 | out7: |
1695 | nfs_fscache_unregister(); | 1698 | nfs_fscache_unregister(); |
1696 | out9: | 1699 | out8: |
1697 | unregister_pernet_subsys(&nfs_net_ops); | 1700 | unregister_pernet_subsys(&nfs_net_ops); |
1698 | out10: | 1701 | out9: |
1699 | nfs_dns_resolver_destroy(); | 1702 | nfs_dns_resolver_destroy(); |
1700 | out11: | 1703 | out10: |
1701 | return err; | 1704 | return err; |
1702 | } | 1705 | } |
1703 | 1706 | ||
1704 | static void __exit exit_nfs_fs(void) | 1707 | static void __exit exit_nfs_fs(void) |
1705 | { | 1708 | { |
1706 | #ifdef CONFIG_NFS_V4 | ||
1707 | exit_nfs_v4(); | ||
1708 | #endif | ||
1709 | nfs_destroy_directcache(); | 1709 | nfs_destroy_directcache(); |
1710 | nfs_destroy_writepagecache(); | 1710 | nfs_destroy_writepagecache(); |
1711 | nfs_destroy_readpagecache(); | 1711 | nfs_destroy_readpagecache(); |
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 64f0dc41a9b7..8865538b26b6 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h | |||
@@ -262,7 +262,7 @@ extern int nfs3_decode_dirent(struct xdr_stream *, | |||
262 | struct nfs_entry *, int); | 262 | struct nfs_entry *, int); |
263 | 263 | ||
264 | /* nfs4xdr.c */ | 264 | /* nfs4xdr.c */ |
265 | #ifdef CONFIG_NFS_V4 | 265 | #if IS_ENABLED(CONFIG_NFS_V4) |
266 | extern int nfs4_decode_dirent(struct xdr_stream *, | 266 | extern int nfs4_decode_dirent(struct xdr_stream *, |
267 | struct nfs_entry *, int); | 267 | struct nfs_entry *, int); |
268 | #endif | 268 | #endif |
@@ -272,7 +272,7 @@ extern const u32 nfs41_maxwrite_overhead; | |||
272 | #endif | 272 | #endif |
273 | 273 | ||
274 | /* nfs4proc.c */ | 274 | /* nfs4proc.c */ |
275 | #ifdef CONFIG_NFS_V4 | 275 | #if IS_ENABLED(CONFIG_NFS_V4) |
276 | extern struct rpc_procinfo nfs4_procedures[]; | 276 | extern struct rpc_procinfo nfs4_procedures[]; |
277 | #endif | 277 | #endif |
278 | 278 | ||
@@ -328,7 +328,7 @@ extern int nfs_wait_bit_killable(void *word); | |||
328 | extern const struct super_operations nfs_sops; | 328 | extern const struct super_operations nfs_sops; |
329 | extern struct file_system_type nfs_fs_type; | 329 | extern struct file_system_type nfs_fs_type; |
330 | extern struct file_system_type nfs_xdev_fs_type; | 330 | extern struct file_system_type nfs_xdev_fs_type; |
331 | #ifdef CONFIG_NFS_V4 | 331 | #if IS_ENABLED(CONFIG_NFS_V4) |
332 | extern struct file_system_type nfs4_xdev_fs_type; | 332 | extern struct file_system_type nfs4_xdev_fs_type; |
333 | extern struct file_system_type nfs4_referral_fs_type; | 333 | extern struct file_system_type nfs4_referral_fs_type; |
334 | #endif | 334 | #endif |
@@ -364,7 +364,7 @@ struct vfsmount *nfs_do_submount(struct dentry *, struct nfs_fh *, | |||
364 | /* getroot.c */ | 364 | /* getroot.c */ |
365 | extern struct dentry *nfs_get_root(struct super_block *, struct nfs_fh *, | 365 | extern struct dentry *nfs_get_root(struct super_block *, struct nfs_fh *, |
366 | const char *); | 366 | const char *); |
367 | #ifdef CONFIG_NFS_V4 | 367 | #if IS_ENABLED(CONFIG_NFS_V4) |
368 | extern struct dentry *nfs4_get_root(struct super_block *, struct nfs_fh *, | 368 | extern struct dentry *nfs4_get_root(struct super_block *, struct nfs_fh *, |
369 | const char *); | 369 | const char *); |
370 | 370 | ||
diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c index 2a3b170e88e0..655925373b91 100644 --- a/fs/nfs/namespace.c +++ b/fs/nfs/namespace.c | |||
@@ -113,6 +113,7 @@ Elong_unlock: | |||
113 | Elong: | 113 | Elong: |
114 | return ERR_PTR(-ENAMETOOLONG); | 114 | return ERR_PTR(-ENAMETOOLONG); |
115 | } | 115 | } |
116 | EXPORT_SYMBOL_GPL(nfs_path); | ||
116 | 117 | ||
117 | /* | 118 | /* |
118 | * nfs_d_automount - Handle crossing a mountpoint on the server | 119 | * nfs_d_automount - Handle crossing a mountpoint on the server |
@@ -241,6 +242,7 @@ out: | |||
241 | dprintk("<-- nfs_do_submount() = %p\n", mnt); | 242 | dprintk("<-- nfs_do_submount() = %p\n", mnt); |
242 | return mnt; | 243 | return mnt; |
243 | } | 244 | } |
245 | EXPORT_SYMBOL_GPL(nfs_do_submount); | ||
244 | 246 | ||
245 | struct vfsmount *nfs_submount(struct nfs_server *server, struct dentry *dentry, | 247 | struct vfsmount *nfs_submount(struct nfs_server *server, struct dentry *dentry, |
246 | struct nfs_fh *fh, struct nfs_fattr *fattr) | 248 | struct nfs_fh *fh, struct nfs_fattr *fattr) |
diff --git a/fs/nfs/netns.h b/fs/nfs/netns.h index 8a6394edb8b0..0539de1b8d1f 100644 --- a/fs/nfs/netns.h +++ b/fs/nfs/netns.h | |||
@@ -20,7 +20,7 @@ struct nfs_net { | |||
20 | wait_queue_head_t bl_wq; | 20 | wait_queue_head_t bl_wq; |
21 | struct list_head nfs_client_list; | 21 | struct list_head nfs_client_list; |
22 | struct list_head nfs_volume_list; | 22 | struct list_head nfs_volume_list; |
23 | #ifdef CONFIG_NFS_V4 | 23 | #if IS_ENABLED(CONFIG_NFS_V4) |
24 | struct idr cb_ident_idr; /* Protected by nfs_client_lock */ | 24 | struct idr cb_ident_idr; /* Protected by nfs_client_lock */ |
25 | #endif | 25 | #endif |
26 | spinlock_t nfs_client_lock; | 26 | spinlock_t nfs_client_lock; |
diff --git a/fs/nfs/nfs.h b/fs/nfs/nfs.h index 3e1b84baa57f..43679df56cd0 100644 --- a/fs/nfs/nfs.h +++ b/fs/nfs/nfs.h | |||
@@ -21,23 +21,6 @@ struct nfs_subversion { | |||
21 | struct list_head list; /* List of NFS versions */ | 21 | struct list_head list; /* List of NFS versions */ |
22 | }; | 22 | }; |
23 | 23 | ||
24 | int nfs_register_versions(void); | ||
25 | void nfs_unregister_versions(void); | ||
26 | |||
27 | #ifdef CONFIG_NFS_V4 | ||
28 | int init_nfs_v4(void); | ||
29 | void exit_nfs_v4(void); | ||
30 | #else /* CONFIG_NFS_V4 */ | ||
31 | static inline int __init init_nfs_v4(void) | ||
32 | { | ||
33 | return 0; | ||
34 | } | ||
35 | |||
36 | static inline void exit_nfs_v4(void) | ||
37 | { | ||
38 | } | ||
39 | #endif /* CONFIG_NFS_V4 */ | ||
40 | |||
41 | struct nfs_subversion *get_nfs_version(unsigned int); | 24 | struct nfs_subversion *get_nfs_version(unsigned int); |
42 | void put_nfs_version(struct nfs_subversion *); | 25 | void put_nfs_version(struct nfs_subversion *); |
43 | void register_nfs_version(struct nfs_subversion *); | 26 | void register_nfs_version(struct nfs_subversion *); |
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index bafe5186c9cd..3b950dd81e81 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h | |||
@@ -9,7 +9,7 @@ | |||
9 | #ifndef __LINUX_FS_NFS_NFS4_FS_H | 9 | #ifndef __LINUX_FS_NFS_NFS4_FS_H |
10 | #define __LINUX_FS_NFS_NFS4_FS_H | 10 | #define __LINUX_FS_NFS_NFS4_FS_H |
11 | 11 | ||
12 | #ifdef CONFIG_NFS_V4 | 12 | #if IS_ENABLED(CONFIG_NFS_V4) |
13 | 13 | ||
14 | struct idmap; | 14 | struct idmap; |
15 | 15 | ||
@@ -365,11 +365,10 @@ extern const nfs4_stateid zero_stateid; | |||
365 | struct nfs_mount_info; | 365 | struct nfs_mount_info; |
366 | extern struct nfs_subversion nfs_v4; | 366 | extern struct nfs_subversion nfs_v4; |
367 | struct dentry *nfs4_try_mount(int, const char *, struct nfs_mount_info *, struct nfs_subversion *); | 367 | struct dentry *nfs4_try_mount(int, const char *, struct nfs_mount_info *, struct nfs_subversion *); |
368 | int init_nfs_v4(void); | ||
369 | void exit_nfs_v4(void); | ||
370 | extern bool nfs4_disable_idmapping; | 368 | extern bool nfs4_disable_idmapping; |
371 | extern unsigned short max_session_slots; | 369 | extern unsigned short max_session_slots; |
372 | extern unsigned short send_implementation_id; | 370 | extern unsigned short send_implementation_id; |
371 | |||
373 | /* nfs4sysctl.c */ | 372 | /* nfs4sysctl.c */ |
374 | #ifdef CONFIG_SYSCTL | 373 | #ifdef CONFIG_SYSCTL |
375 | int nfs4_register_sysctl(void); | 374 | int nfs4_register_sysctl(void); |
diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c index 1c825f3bef51..12a31a9dbcdd 100644 --- a/fs/nfs/nfs4super.c +++ b/fs/nfs/nfs4super.c | |||
@@ -332,7 +332,7 @@ static struct dentry *nfs4_referral_mount(struct file_system_type *fs_type, | |||
332 | } | 332 | } |
333 | 333 | ||
334 | 334 | ||
335 | int __init init_nfs_v4(void) | 335 | static int __init init_nfs_v4(void) |
336 | { | 336 | { |
337 | int err; | 337 | int err; |
338 | 338 | ||
@@ -358,10 +358,15 @@ out: | |||
358 | return err; | 358 | return err; |
359 | } | 359 | } |
360 | 360 | ||
361 | void exit_nfs_v4(void) | 361 | static void __exit exit_nfs_v4(void) |
362 | { | 362 | { |
363 | unregister_nfs_version(&nfs_v4); | 363 | unregister_nfs_version(&nfs_v4); |
364 | unregister_filesystem(&nfs4_fs_type); | 364 | unregister_filesystem(&nfs4_fs_type); |
365 | nfs4_unregister_sysctl(); | 365 | nfs4_unregister_sysctl(); |
366 | nfs_idmap_quit(); | 366 | nfs_idmap_quit(); |
367 | } | 367 | } |
368 | |||
369 | MODULE_LICENSE("GPL"); | ||
370 | |||
371 | module_init(init_nfs_v4); | ||
372 | module_exit(exit_nfs_v4); | ||
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c index aed913c833f4..1e7d8879dae6 100644 --- a/fs/nfs/pagelist.c +++ b/fs/nfs/pagelist.c | |||
@@ -54,6 +54,7 @@ void nfs_pgheader_init(struct nfs_pageio_descriptor *desc, | |||
54 | if (hdr->completion_ops->init_hdr) | 54 | if (hdr->completion_ops->init_hdr) |
55 | hdr->completion_ops->init_hdr(hdr); | 55 | hdr->completion_ops->init_hdr(hdr); |
56 | } | 56 | } |
57 | EXPORT_SYMBOL_GPL(nfs_pgheader_init); | ||
57 | 58 | ||
58 | void nfs_set_pgio_error(struct nfs_pgio_header *hdr, int error, loff_t pos) | 59 | void nfs_set_pgio_error(struct nfs_pgio_header *hdr, int error, loff_t pos) |
59 | { | 60 | { |
@@ -268,6 +269,7 @@ void nfs_pageio_init(struct nfs_pageio_descriptor *desc, | |||
268 | desc->pg_lseg = NULL; | 269 | desc->pg_lseg = NULL; |
269 | desc->pg_dreq = NULL; | 270 | desc->pg_dreq = NULL; |
270 | } | 271 | } |
272 | EXPORT_SYMBOL_GPL(nfs_pageio_init); | ||
271 | 273 | ||
272 | /** | 274 | /** |
273 | * nfs_can_coalesce_requests - test two requests for compatibility | 275 | * nfs_can_coalesce_requests - test two requests for compatibility |
@@ -409,6 +411,7 @@ int nfs_pageio_add_request(struct nfs_pageio_descriptor *desc, | |||
409 | } while (ret); | 411 | } while (ret); |
410 | return ret; | 412 | return ret; |
411 | } | 413 | } |
414 | EXPORT_SYMBOL_GPL(nfs_pageio_add_request); | ||
412 | 415 | ||
413 | /** | 416 | /** |
414 | * nfs_pageio_complete - Complete I/O on an nfs_pageio_descriptor | 417 | * nfs_pageio_complete - Complete I/O on an nfs_pageio_descriptor |
@@ -424,6 +427,7 @@ void nfs_pageio_complete(struct nfs_pageio_descriptor *desc) | |||
424 | break; | 427 | break; |
425 | } | 428 | } |
426 | } | 429 | } |
430 | EXPORT_SYMBOL_GPL(nfs_pageio_complete); | ||
427 | 431 | ||
428 | /** | 432 | /** |
429 | * nfs_pageio_cond_complete - Conditional I/O completion | 433 | * nfs_pageio_cond_complete - Conditional I/O completion |
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 7fbd25afe418..76875bfcf19c 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c | |||
@@ -1407,6 +1407,7 @@ static void pnfs_writehdr_free(struct nfs_pgio_header *hdr) | |||
1407 | put_lseg(hdr->lseg); | 1407 | put_lseg(hdr->lseg); |
1408 | nfs_writehdr_free(hdr); | 1408 | nfs_writehdr_free(hdr); |
1409 | } | 1409 | } |
1410 | EXPORT_SYMBOL_GPL(pnfs_writehdr_free); | ||
1410 | 1411 | ||
1411 | int | 1412 | int |
1412 | pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc) | 1413 | pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc) |
@@ -1561,6 +1562,7 @@ static void pnfs_readhdr_free(struct nfs_pgio_header *hdr) | |||
1561 | put_lseg(hdr->lseg); | 1562 | put_lseg(hdr->lseg); |
1562 | nfs_readhdr_free(hdr); | 1563 | nfs_readhdr_free(hdr); |
1563 | } | 1564 | } |
1565 | EXPORT_SYMBOL_GPL(pnfs_readhdr_free); | ||
1564 | 1566 | ||
1565 | int | 1567 | int |
1566 | pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc) | 1568 | pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc) |
diff --git a/fs/nfs/read.c b/fs/nfs/read.c index b000e4c0cf83..6935e401ad76 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c | |||
@@ -48,6 +48,7 @@ struct nfs_read_header *nfs_readhdr_alloc(void) | |||
48 | } | 48 | } |
49 | return rhdr; | 49 | return rhdr; |
50 | } | 50 | } |
51 | EXPORT_SYMBOL_GPL(nfs_readhdr_alloc); | ||
51 | 52 | ||
52 | static struct nfs_read_data *nfs_readdata_alloc(struct nfs_pgio_header *hdr, | 53 | static struct nfs_read_data *nfs_readdata_alloc(struct nfs_pgio_header *hdr, |
53 | unsigned int pagecount) | 54 | unsigned int pagecount) |
@@ -80,6 +81,7 @@ void nfs_readhdr_free(struct nfs_pgio_header *hdr) | |||
80 | 81 | ||
81 | kmem_cache_free(nfs_rdata_cachep, rhdr); | 82 | kmem_cache_free(nfs_rdata_cachep, rhdr); |
82 | } | 83 | } |
84 | EXPORT_SYMBOL_GPL(nfs_readhdr_free); | ||
83 | 85 | ||
84 | void nfs_readdata_release(struct nfs_read_data *rdata) | 86 | void nfs_readdata_release(struct nfs_read_data *rdata) |
85 | { | 87 | { |
@@ -96,6 +98,7 @@ void nfs_readdata_release(struct nfs_read_data *rdata) | |||
96 | if (atomic_dec_and_test(&hdr->refcnt)) | 98 | if (atomic_dec_and_test(&hdr->refcnt)) |
97 | hdr->completion_ops->completion(hdr); | 99 | hdr->completion_ops->completion(hdr); |
98 | } | 100 | } |
101 | EXPORT_SYMBOL_GPL(nfs_readdata_release); | ||
99 | 102 | ||
100 | static | 103 | static |
101 | int nfs_return_empty_page(struct page *page) | 104 | int nfs_return_empty_page(struct page *page) |
@@ -398,6 +401,7 @@ int nfs_generic_pagein(struct nfs_pageio_descriptor *desc, | |||
398 | return nfs_pagein_multi(desc, hdr); | 401 | return nfs_pagein_multi(desc, hdr); |
399 | return nfs_pagein_one(desc, hdr); | 402 | return nfs_pagein_one(desc, hdr); |
400 | } | 403 | } |
404 | EXPORT_SYMBOL_GPL(nfs_generic_pagein); | ||
401 | 405 | ||
402 | static int nfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc) | 406 | static int nfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc) |
403 | { | 407 | { |
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 558a85c9594a..ac6a3c55dce4 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
@@ -315,7 +315,7 @@ const struct super_operations nfs_sops = { | |||
315 | }; | 315 | }; |
316 | EXPORT_SYMBOL_GPL(nfs_sops); | 316 | EXPORT_SYMBOL_GPL(nfs_sops); |
317 | 317 | ||
318 | #ifdef CONFIG_NFS_V4 | 318 | #if IS_ENABLED(CONFIG_NFS_V4) |
319 | static void nfs4_validate_mount_flags(struct nfs_parsed_mount_data *); | 319 | static void nfs4_validate_mount_flags(struct nfs_parsed_mount_data *); |
320 | static int nfs4_validate_mount_data(void *options, | 320 | static int nfs4_validate_mount_data(void *options, |
321 | struct nfs_parsed_mount_data *args, const char *dev_name); | 321 | struct nfs_parsed_mount_data *args, const char *dev_name); |
@@ -366,6 +366,7 @@ void nfs_sb_active(struct super_block *sb) | |||
366 | if (atomic_inc_return(&server->active) == 1) | 366 | if (atomic_inc_return(&server->active) == 1) |
367 | atomic_inc(&sb->s_active); | 367 | atomic_inc(&sb->s_active); |
368 | } | 368 | } |
369 | EXPORT_SYMBOL_GPL(nfs_sb_active); | ||
369 | 370 | ||
370 | void nfs_sb_deactive(struct super_block *sb) | 371 | void nfs_sb_deactive(struct super_block *sb) |
371 | { | 372 | { |
@@ -374,6 +375,7 @@ void nfs_sb_deactive(struct super_block *sb) | |||
374 | if (atomic_dec_and_test(&server->active)) | 375 | if (atomic_dec_and_test(&server->active)) |
375 | deactivate_super(sb); | 376 | deactivate_super(sb); |
376 | } | 377 | } |
378 | EXPORT_SYMBOL_GPL(nfs_sb_deactive); | ||
377 | 379 | ||
378 | /* | 380 | /* |
379 | * Deliver file system statistics to userspace | 381 | * Deliver file system statistics to userspace |
@@ -439,6 +441,7 @@ int nfs_statfs(struct dentry *dentry, struct kstatfs *buf) | |||
439 | dprintk("%s: statfs error = %d\n", __func__, -error); | 441 | dprintk("%s: statfs error = %d\n", __func__, -error); |
440 | return error; | 442 | return error; |
441 | } | 443 | } |
444 | EXPORT_SYMBOL_GPL(nfs_statfs); | ||
442 | 445 | ||
443 | /* | 446 | /* |
444 | * Map the security flavour number to a name | 447 | * Map the security flavour number to a name |
@@ -544,7 +547,7 @@ static void nfs_show_mountd_options(struct seq_file *m, struct nfs_server *nfss, | |||
544 | nfs_show_mountd_netid(m, nfss, showdefaults); | 547 | nfs_show_mountd_netid(m, nfss, showdefaults); |
545 | } | 548 | } |
546 | 549 | ||
547 | #ifdef CONFIG_NFS_V4 | 550 | #if IS_ENABLED(CONFIG_NFS_V4) |
548 | static void nfs_show_nfsv4_options(struct seq_file *m, struct nfs_server *nfss, | 551 | static void nfs_show_nfsv4_options(struct seq_file *m, struct nfs_server *nfss, |
549 | int showdefaults) | 552 | int showdefaults) |
550 | { | 553 | { |
@@ -675,8 +678,9 @@ int nfs_show_options(struct seq_file *m, struct dentry *root) | |||
675 | 678 | ||
676 | return 0; | 679 | return 0; |
677 | } | 680 | } |
681 | EXPORT_SYMBOL_GPL(nfs_show_options); | ||
678 | 682 | ||
679 | #ifdef CONFIG_NFS_V4 | 683 | #if IS_ENABLED(CONFIG_NFS_V4) |
680 | #ifdef CONFIG_NFS_V4_1 | 684 | #ifdef CONFIG_NFS_V4_1 |
681 | static void show_sessions(struct seq_file *m, struct nfs_server *server) | 685 | static void show_sessions(struct seq_file *m, struct nfs_server *server) |
682 | { | 686 | { |
@@ -709,7 +713,7 @@ static void show_implementation_id(struct seq_file *m, struct nfs_server *nfss) | |||
709 | } | 713 | } |
710 | } | 714 | } |
711 | #else | 715 | #else |
712 | #ifdef CONFIG_NFS_V4 | 716 | #if IS_ENABLED(CONFIG_NFS_V4) |
713 | static void show_pnfs(struct seq_file *m, struct nfs_server *server) | 717 | static void show_pnfs(struct seq_file *m, struct nfs_server *server) |
714 | { | 718 | { |
715 | } | 719 | } |
@@ -734,12 +738,14 @@ int nfs_show_devname(struct seq_file *m, struct dentry *root) | |||
734 | free_page((unsigned long)page); | 738 | free_page((unsigned long)page); |
735 | return err; | 739 | return err; |
736 | } | 740 | } |
741 | EXPORT_SYMBOL_GPL(nfs_show_devname); | ||
737 | 742 | ||
738 | int nfs_show_path(struct seq_file *m, struct dentry *dentry) | 743 | int nfs_show_path(struct seq_file *m, struct dentry *dentry) |
739 | { | 744 | { |
740 | seq_puts(m, "/"); | 745 | seq_puts(m, "/"); |
741 | return 0; | 746 | return 0; |
742 | } | 747 | } |
748 | EXPORT_SYMBOL_GPL(nfs_show_path); | ||
743 | 749 | ||
744 | /* | 750 | /* |
745 | * Present statistical information for this VFS mountpoint | 751 | * Present statistical information for this VFS mountpoint |
@@ -774,7 +780,7 @@ int nfs_show_stats(struct seq_file *m, struct dentry *root) | |||
774 | seq_printf(m, ",bsize=%u", nfss->bsize); | 780 | seq_printf(m, ",bsize=%u", nfss->bsize); |
775 | seq_printf(m, ",namlen=%u", nfss->namelen); | 781 | seq_printf(m, ",namlen=%u", nfss->namelen); |
776 | 782 | ||
777 | #ifdef CONFIG_NFS_V4 | 783 | #if IS_ENABLED(CONFIG_NFS_V4) |
778 | if (nfss->nfs_client->rpc_ops->version == 4) { | 784 | if (nfss->nfs_client->rpc_ops->version == 4) { |
779 | seq_printf(m, "\n\tnfsv4:\t"); | 785 | seq_printf(m, "\n\tnfsv4:\t"); |
780 | seq_printf(m, "bm0=0x%x", nfss->attr_bitmask[0]); | 786 | seq_printf(m, "bm0=0x%x", nfss->attr_bitmask[0]); |
@@ -832,6 +838,7 @@ int nfs_show_stats(struct seq_file *m, struct dentry *root) | |||
832 | 838 | ||
833 | return 0; | 839 | return 0; |
834 | } | 840 | } |
841 | EXPORT_SYMBOL_GPL(nfs_show_stats); | ||
835 | 842 | ||
836 | /* | 843 | /* |
837 | * Begin unmount by attempting to remove all automounted mountpoints we added | 844 | * Begin unmount by attempting to remove all automounted mountpoints we added |
@@ -851,6 +858,7 @@ void nfs_umount_begin(struct super_block *sb) | |||
851 | if (!IS_ERR(rpc)) | 858 | if (!IS_ERR(rpc)) |
852 | rpc_killall_tasks(rpc); | 859 | rpc_killall_tasks(rpc); |
853 | } | 860 | } |
861 | EXPORT_SYMBOL_GPL(nfs_umount_begin); | ||
854 | 862 | ||
855 | static struct nfs_parsed_mount_data *nfs_alloc_parsed_mount_data(void) | 863 | static struct nfs_parsed_mount_data *nfs_alloc_parsed_mount_data(void) |
856 | { | 864 | { |
@@ -1915,7 +1923,7 @@ out_invalid_fh: | |||
1915 | return -EINVAL; | 1923 | return -EINVAL; |
1916 | } | 1924 | } |
1917 | 1925 | ||
1918 | #ifdef CONFIG_NFS_V4 | 1926 | #if IS_ENABLED(CONFIG_NFS_V4) |
1919 | static int nfs_validate_mount_data(struct file_system_type *fs_type, | 1927 | static int nfs_validate_mount_data(struct file_system_type *fs_type, |
1920 | void *options, | 1928 | void *options, |
1921 | struct nfs_parsed_mount_data *args, | 1929 | struct nfs_parsed_mount_data *args, |
@@ -1953,7 +1961,7 @@ static int nfs_validate_text_mount_data(void *options, | |||
1953 | goto out_no_address; | 1961 | goto out_no_address; |
1954 | 1962 | ||
1955 | if (args->version == 4) { | 1963 | if (args->version == 4) { |
1956 | #ifdef CONFIG_NFS_V4 | 1964 | #if IS_ENABLED(CONFIG_NFS_V4) |
1957 | port = NFS_PORT; | 1965 | port = NFS_PORT; |
1958 | max_namelen = NFS4_MAXNAMLEN; | 1966 | max_namelen = NFS4_MAXNAMLEN; |
1959 | max_pathlen = NFS4_MAXPATHLEN; | 1967 | max_pathlen = NFS4_MAXPATHLEN; |
@@ -1976,7 +1984,7 @@ static int nfs_validate_text_mount_data(void *options, | |||
1976 | &args->nfs_server.export_path, | 1984 | &args->nfs_server.export_path, |
1977 | max_pathlen); | 1985 | max_pathlen); |
1978 | 1986 | ||
1979 | #ifndef CONFIG_NFS_V4 | 1987 | #if !IS_ENABLED(CONFIG_NFS_V4) |
1980 | out_v4_not_compiled: | 1988 | out_v4_not_compiled: |
1981 | dfprintk(MOUNT, "NFS: NFSv4 is not compiled into kernel\n"); | 1989 | dfprintk(MOUNT, "NFS: NFSv4 is not compiled into kernel\n"); |
1982 | return -EPROTONOSUPPORT; | 1990 | return -EPROTONOSUPPORT; |
@@ -2075,6 +2083,7 @@ out: | |||
2075 | kfree(data); | 2083 | kfree(data); |
2076 | return error; | 2084 | return error; |
2077 | } | 2085 | } |
2086 | EXPORT_SYMBOL_GPL(nfs_remount); | ||
2078 | 2087 | ||
2079 | /* | 2088 | /* |
2080 | * Initialise the common bits of the superblock | 2089 | * Initialise the common bits of the superblock |
@@ -2123,6 +2132,7 @@ void nfs_fill_super(struct super_block *sb, struct nfs_mount_info *mount_info) | |||
2123 | 2132 | ||
2124 | nfs_initialise_sb(sb); | 2133 | nfs_initialise_sb(sb); |
2125 | } | 2134 | } |
2135 | EXPORT_SYMBOL_GPL(nfs_fill_super); | ||
2126 | 2136 | ||
2127 | /* | 2137 | /* |
2128 | * Finish setting up a cloned NFS2/3/4 superblock | 2138 | * Finish setting up a cloned NFS2/3/4 superblock |
@@ -2292,6 +2302,7 @@ int nfs_set_sb_security(struct super_block *s, struct dentry *mntroot, | |||
2292 | { | 2302 | { |
2293 | return security_sb_set_mnt_opts(s, &mount_info->parsed->lsm_opts); | 2303 | return security_sb_set_mnt_opts(s, &mount_info->parsed->lsm_opts); |
2294 | } | 2304 | } |
2305 | EXPORT_SYMBOL_GPL(nfs_set_sb_security); | ||
2295 | 2306 | ||
2296 | int nfs_clone_sb_security(struct super_block *s, struct dentry *mntroot, | 2307 | int nfs_clone_sb_security(struct super_block *s, struct dentry *mntroot, |
2297 | struct nfs_mount_info *mount_info) | 2308 | struct nfs_mount_info *mount_info) |
@@ -2302,6 +2313,7 @@ int nfs_clone_sb_security(struct super_block *s, struct dentry *mntroot, | |||
2302 | return -ESTALE; | 2313 | return -ESTALE; |
2303 | return 0; | 2314 | return 0; |
2304 | } | 2315 | } |
2316 | EXPORT_SYMBOL_GPL(nfs_clone_sb_security); | ||
2305 | 2317 | ||
2306 | struct dentry *nfs_fs_mount_common(struct nfs_server *server, | 2318 | struct dentry *nfs_fs_mount_common(struct nfs_server *server, |
2307 | int flags, const char *dev_name, | 2319 | int flags, const char *dev_name, |
@@ -2375,6 +2387,7 @@ error_splat_bdi: | |||
2375 | deactivate_locked_super(s); | 2387 | deactivate_locked_super(s); |
2376 | goto out; | 2388 | goto out; |
2377 | } | 2389 | } |
2390 | EXPORT_SYMBOL_GPL(nfs_fs_mount_common); | ||
2378 | 2391 | ||
2379 | struct dentry *nfs_fs_mount(struct file_system_type *fs_type, | 2392 | struct dentry *nfs_fs_mount(struct file_system_type *fs_type, |
2380 | int flags, const char *dev_name, void *raw_data) | 2393 | int flags, const char *dev_name, void *raw_data) |
@@ -2415,6 +2428,7 @@ out: | |||
2415 | nfs_free_fhandle(mount_info.mntfh); | 2428 | nfs_free_fhandle(mount_info.mntfh); |
2416 | return mntroot; | 2429 | return mntroot; |
2417 | } | 2430 | } |
2431 | EXPORT_SYMBOL_GPL(nfs_fs_mount); | ||
2418 | 2432 | ||
2419 | /* | 2433 | /* |
2420 | * Ensure that we unregister the bdi before kill_anon_super | 2434 | * Ensure that we unregister the bdi before kill_anon_super |
@@ -2426,6 +2440,7 @@ void nfs_put_super(struct super_block *s) | |||
2426 | 2440 | ||
2427 | bdi_unregister(&server->backing_dev_info); | 2441 | bdi_unregister(&server->backing_dev_info); |
2428 | } | 2442 | } |
2443 | EXPORT_SYMBOL_GPL(nfs_put_super); | ||
2429 | 2444 | ||
2430 | /* | 2445 | /* |
2431 | * Destroy an NFS2/3 superblock | 2446 | * Destroy an NFS2/3 superblock |
@@ -2438,6 +2453,7 @@ void nfs_kill_super(struct super_block *s) | |||
2438 | nfs_fscache_release_super_cookie(s); | 2453 | nfs_fscache_release_super_cookie(s); |
2439 | nfs_free_server(server); | 2454 | nfs_free_server(server); |
2440 | } | 2455 | } |
2456 | EXPORT_SYMBOL_GPL(nfs_kill_super); | ||
2441 | 2457 | ||
2442 | /* | 2458 | /* |
2443 | * Clone an NFS2/3/4 server record on xdev traversal (FSID-change) | 2459 | * Clone an NFS2/3/4 server record on xdev traversal (FSID-change) |
@@ -2478,7 +2494,7 @@ out_err: | |||
2478 | goto out; | 2494 | goto out; |
2479 | } | 2495 | } |
2480 | 2496 | ||
2481 | #ifdef CONFIG_NFS_V4 | 2497 | #if IS_ENABLED(CONFIG_NFS_V4) |
2482 | 2498 | ||
2483 | static void nfs4_validate_mount_flags(struct nfs_parsed_mount_data *args) | 2499 | static void nfs4_validate_mount_flags(struct nfs_parsed_mount_data *args) |
2484 | { | 2500 | { |
@@ -2590,6 +2606,13 @@ bool nfs4_disable_idmapping = true; | |||
2590 | unsigned short max_session_slots = NFS4_DEF_SLOT_TABLE_SIZE; | 2606 | unsigned short max_session_slots = NFS4_DEF_SLOT_TABLE_SIZE; |
2591 | unsigned short send_implementation_id = 1; | 2607 | unsigned short send_implementation_id = 1; |
2592 | 2608 | ||
2609 | EXPORT_SYMBOL_GPL(nfs_callback_set_tcpport); | ||
2610 | EXPORT_SYMBOL_GPL(nfs_callback_tcpport); | ||
2611 | EXPORT_SYMBOL_GPL(nfs_idmap_cache_timeout); | ||
2612 | EXPORT_SYMBOL_GPL(nfs4_disable_idmapping); | ||
2613 | EXPORT_SYMBOL_GPL(max_session_slots); | ||
2614 | EXPORT_SYMBOL_GPL(send_implementation_id); | ||
2615 | |||
2593 | #define NFS_CALLBACK_MAXPORTNR (65535U) | 2616 | #define NFS_CALLBACK_MAXPORTNR (65535U) |
2594 | 2617 | ||
2595 | static int param_set_portnr(const char *val, const struct kernel_param *kp) | 2618 | static int param_set_portnr(const char *val, const struct kernel_param *kp) |
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index f268fe4f2785..e4a2ad2059bd 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -84,6 +84,7 @@ struct nfs_write_header *nfs_writehdr_alloc(void) | |||
84 | } | 84 | } |
85 | return p; | 85 | return p; |
86 | } | 86 | } |
87 | EXPORT_SYMBOL_GPL(nfs_writehdr_alloc); | ||
87 | 88 | ||
88 | static struct nfs_write_data *nfs_writedata_alloc(struct nfs_pgio_header *hdr, | 89 | static struct nfs_write_data *nfs_writedata_alloc(struct nfs_pgio_header *hdr, |
89 | unsigned int pagecount) | 90 | unsigned int pagecount) |
@@ -115,6 +116,7 @@ void nfs_writehdr_free(struct nfs_pgio_header *hdr) | |||
115 | struct nfs_write_header *whdr = container_of(hdr, struct nfs_write_header, header); | 116 | struct nfs_write_header *whdr = container_of(hdr, struct nfs_write_header, header); |
116 | mempool_free(whdr, nfs_wdata_mempool); | 117 | mempool_free(whdr, nfs_wdata_mempool); |
117 | } | 118 | } |
119 | EXPORT_SYMBOL_GPL(nfs_writehdr_free); | ||
118 | 120 | ||
119 | void nfs_writedata_release(struct nfs_write_data *wdata) | 121 | void nfs_writedata_release(struct nfs_write_data *wdata) |
120 | { | 122 | { |
@@ -131,6 +133,7 @@ void nfs_writedata_release(struct nfs_write_data *wdata) | |||
131 | if (atomic_dec_and_test(&hdr->refcnt)) | 133 | if (atomic_dec_and_test(&hdr->refcnt)) |
132 | hdr->completion_ops->completion(hdr); | 134 | hdr->completion_ops->completion(hdr); |
133 | } | 135 | } |
136 | EXPORT_SYMBOL_GPL(nfs_writedata_release); | ||
134 | 137 | ||
135 | static void nfs_context_set_write_error(struct nfs_open_context *ctx, int error) | 138 | static void nfs_context_set_write_error(struct nfs_open_context *ctx, int error) |
136 | { | 139 | { |
@@ -446,7 +449,7 @@ nfs_mark_request_dirty(struct nfs_page *req) | |||
446 | __set_page_dirty_nobuffers(req->wb_page); | 449 | __set_page_dirty_nobuffers(req->wb_page); |
447 | } | 450 | } |
448 | 451 | ||
449 | #if IS_ENABLED(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 452 | #if IS_ENABLED(CONFIG_NFS_V3) || IS_ENABLED(CONFIG_NFS_V4) |
450 | /** | 453 | /** |
451 | * nfs_request_add_commit_list - add request to a commit list | 454 | * nfs_request_add_commit_list - add request to a commit list |
452 | * @req: pointer to a struct nfs_page | 455 | * @req: pointer to a struct nfs_page |
@@ -636,7 +639,7 @@ out: | |||
636 | hdr->release(hdr); | 639 | hdr->release(hdr); |
637 | } | 640 | } |
638 | 641 | ||
639 | #if IS_ENABLED(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 642 | #if IS_ENABLED(CONFIG_NFS_V3) || IS_ENABLED(CONFIG_NFS_V4) |
640 | static unsigned long | 643 | static unsigned long |
641 | nfs_reqs_to_commit(struct nfs_commit_info *cinfo) | 644 | nfs_reqs_to_commit(struct nfs_commit_info *cinfo) |
642 | { | 645 | { |
@@ -1173,6 +1176,7 @@ int nfs_generic_flush(struct nfs_pageio_descriptor *desc, | |||
1173 | return nfs_flush_multi(desc, hdr); | 1176 | return nfs_flush_multi(desc, hdr); |
1174 | return nfs_flush_one(desc, hdr); | 1177 | return nfs_flush_one(desc, hdr); |
1175 | } | 1178 | } |
1179 | EXPORT_SYMBOL_GPL(nfs_generic_flush); | ||
1176 | 1180 | ||
1177 | static int nfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc) | 1181 | static int nfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc) |
1178 | { | 1182 | { |
@@ -1298,7 +1302,7 @@ void nfs_writeback_done(struct rpc_task *task, struct nfs_write_data *data) | |||
1298 | return; | 1302 | return; |
1299 | nfs_add_stats(inode, NFSIOS_SERVERWRITTENBYTES, resp->count); | 1303 | nfs_add_stats(inode, NFSIOS_SERVERWRITTENBYTES, resp->count); |
1300 | 1304 | ||
1301 | #if IS_ENABLED(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 1305 | #if IS_ENABLED(CONFIG_NFS_V3) || IS_ENABLED(CONFIG_NFS_V4) |
1302 | if (resp->verf->committed < argp->stable && task->tk_status >= 0) { | 1306 | if (resp->verf->committed < argp->stable && task->tk_status >= 0) { |
1303 | /* We tried a write call, but the server did not | 1307 | /* We tried a write call, but the server did not |
1304 | * commit data to stable storage even though we | 1308 | * commit data to stable storage even though we |
@@ -1358,7 +1362,7 @@ void nfs_writeback_done(struct rpc_task *task, struct nfs_write_data *data) | |||
1358 | } | 1362 | } |
1359 | 1363 | ||
1360 | 1364 | ||
1361 | #if IS_ENABLED(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 1365 | #if IS_ENABLED(CONFIG_NFS_V3) || IS_ENABLED(CONFIG_NFS_V4) |
1362 | static int nfs_commit_set_lock(struct nfs_inode *nfsi, int may_wait) | 1366 | static int nfs_commit_set_lock(struct nfs_inode *nfsi, int may_wait) |
1363 | { | 1367 | { |
1364 | int ret; | 1368 | int ret; |
@@ -1674,6 +1678,7 @@ int nfs_write_inode(struct inode *inode, struct writeback_control *wbc) | |||
1674 | { | 1678 | { |
1675 | return nfs_commit_unstable_pages(inode, wbc); | 1679 | return nfs_commit_unstable_pages(inode, wbc); |
1676 | } | 1680 | } |
1681 | EXPORT_SYMBOL_GPL(nfs_write_inode); | ||
1677 | 1682 | ||
1678 | /* | 1683 | /* |
1679 | * flush the inode to disk. | 1684 | * flush the inode to disk. |