diff options
author | David Brownell <david-b@pacbell.net> | 2006-06-27 15:59:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-27 17:07:19 -0400 |
commit | 266bee88699ddbde42ab303bbc426a105cc49809 (patch) | |
tree | 2d2b57f869321e177caf173af8d43b5d88c4a79d | |
parent | e7374e48009a15a680d53bd1f9828b9b79a8aac9 (diff) |
[PATCH] fix static linking of NFS
Builds on ARM report link problems with common configurations like
statically linked NFS (for nfsroot). The symptom is that __init
section code references __exit section code; that won't work since
the exit sections are discarded (since they can never be called).
The best fix for these particular cases would be an "__init_or_exit"
section annotation.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | fs/nfs/direct.c | 2 | ||||
-rw-r--r-- | fs/nfs/inode.c | 2 | ||||
-rw-r--r-- | fs/nfs/internal.h | 8 | ||||
-rw-r--r-- | fs/nfs/pagelist.c | 2 | ||||
-rw-r--r-- | fs/nfs/read.c | 2 | ||||
-rw-r--r-- | fs/nfs/write.c | 2 |
6 files changed, 9 insertions, 9 deletions
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 402005c35ab3..8ca9707be6c9 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c | |||
@@ -909,7 +909,7 @@ int __init nfs_init_directcache(void) | |||
909 | * nfs_destroy_directcache - destroy the slab cache for nfs_direct_req structures | 909 | * nfs_destroy_directcache - destroy the slab cache for nfs_direct_req structures |
910 | * | 910 | * |
911 | */ | 911 | */ |
912 | void __exit nfs_destroy_directcache(void) | 912 | void nfs_destroy_directcache(void) |
913 | { | 913 | { |
914 | if (kmem_cache_destroy(nfs_direct_cachep)) | 914 | if (kmem_cache_destroy(nfs_direct_cachep)) |
915 | printk(KERN_INFO "nfs_direct_cache: not all structures were freed\n"); | 915 | printk(KERN_INFO "nfs_direct_cache: not all structures were freed\n"); |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 51bc88b662fe..c5b916605fb0 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -1132,7 +1132,7 @@ static int __init nfs_init_inodecache(void) | |||
1132 | return 0; | 1132 | return 0; |
1133 | } | 1133 | } |
1134 | 1134 | ||
1135 | static void __exit nfs_destroy_inodecache(void) | 1135 | static void nfs_destroy_inodecache(void) |
1136 | { | 1136 | { |
1137 | if (kmem_cache_destroy(nfs_inode_cachep)) | 1137 | if (kmem_cache_destroy(nfs_inode_cachep)) |
1138 | printk(KERN_INFO "nfs_inode_cache: not all structures were freed\n"); | 1138 | printk(KERN_INFO "nfs_inode_cache: not all structures were freed\n"); |
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index bd2815e2dec1..4fe51c1292bb 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h | |||
@@ -31,15 +31,15 @@ extern struct svc_version nfs4_callback_version1; | |||
31 | 31 | ||
32 | /* pagelist.c */ | 32 | /* pagelist.c */ |
33 | extern int __init nfs_init_nfspagecache(void); | 33 | extern int __init nfs_init_nfspagecache(void); |
34 | extern void __exit nfs_destroy_nfspagecache(void); | 34 | extern void nfs_destroy_nfspagecache(void); |
35 | extern int __init nfs_init_readpagecache(void); | 35 | extern int __init nfs_init_readpagecache(void); |
36 | extern void __exit nfs_destroy_readpagecache(void); | 36 | extern void nfs_destroy_readpagecache(void); |
37 | extern int __init nfs_init_writepagecache(void); | 37 | extern int __init nfs_init_writepagecache(void); |
38 | extern void __exit nfs_destroy_writepagecache(void); | 38 | extern void nfs_destroy_writepagecache(void); |
39 | 39 | ||
40 | #ifdef CONFIG_NFS_DIRECTIO | 40 | #ifdef CONFIG_NFS_DIRECTIO |
41 | extern int __init nfs_init_directcache(void); | 41 | extern int __init nfs_init_directcache(void); |
42 | extern void __exit nfs_destroy_directcache(void); | 42 | extern void nfs_destroy_directcache(void); |
43 | #else | 43 | #else |
44 | #define nfs_init_directcache() (0) | 44 | #define nfs_init_directcache() (0) |
45 | #define nfs_destroy_directcache() do {} while(0) | 45 | #define nfs_destroy_directcache() do {} while(0) |
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c index ef9429643ebc..d89f6fb3b3a3 100644 --- a/fs/nfs/pagelist.c +++ b/fs/nfs/pagelist.c | |||
@@ -390,7 +390,7 @@ int __init nfs_init_nfspagecache(void) | |||
390 | return 0; | 390 | return 0; |
391 | } | 391 | } |
392 | 392 | ||
393 | void __exit nfs_destroy_nfspagecache(void) | 393 | void nfs_destroy_nfspagecache(void) |
394 | { | 394 | { |
395 | if (kmem_cache_destroy(nfs_page_cachep)) | 395 | if (kmem_cache_destroy(nfs_page_cachep)) |
396 | printk(KERN_INFO "nfs_page: not all structures were freed\n"); | 396 | printk(KERN_INFO "nfs_page: not all structures were freed\n"); |
diff --git a/fs/nfs/read.c b/fs/nfs/read.c index 41c2ffee24f5..32cf3773af0c 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c | |||
@@ -711,7 +711,7 @@ int __init nfs_init_readpagecache(void) | |||
711 | return 0; | 711 | return 0; |
712 | } | 712 | } |
713 | 713 | ||
714 | void __exit nfs_destroy_readpagecache(void) | 714 | void nfs_destroy_readpagecache(void) |
715 | { | 715 | { |
716 | mempool_destroy(nfs_rdata_mempool); | 716 | mempool_destroy(nfs_rdata_mempool); |
717 | if (kmem_cache_destroy(nfs_rdata_cachep)) | 717 | if (kmem_cache_destroy(nfs_rdata_cachep)) |
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index b383fdd3a15c..8fccb9cb173b 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -1551,7 +1551,7 @@ int __init nfs_init_writepagecache(void) | |||
1551 | return 0; | 1551 | return 0; |
1552 | } | 1552 | } |
1553 | 1553 | ||
1554 | void __exit nfs_destroy_writepagecache(void) | 1554 | void nfs_destroy_writepagecache(void) |
1555 | { | 1555 | { |
1556 | mempool_destroy(nfs_commit_mempool); | 1556 | mempool_destroy(nfs_commit_mempool); |
1557 | mempool_destroy(nfs_wdata_mempool); | 1557 | mempool_destroy(nfs_wdata_mempool); |