diff options
Diffstat (limited to 'fs/nfs')
| -rw-r--r-- | fs/nfs/cache_lib.c | 1 | ||||
| -rw-r--r-- | fs/nfs/callback_proc.c | 1 | ||||
| -rw-r--r-- | fs/nfs/callback_xdr.c | 2 | ||||
| -rw-r--r-- | fs/nfs/client.c | 1 | ||||
| -rw-r--r-- | fs/nfs/delegation.c | 1 | ||||
| -rw-r--r-- | fs/nfs/delegation.h | 6 | ||||
| -rw-r--r-- | fs/nfs/dir.c | 2 | ||||
| -rw-r--r-- | fs/nfs/direct.c | 1 | ||||
| -rw-r--r-- | fs/nfs/dns_resolve.c | 1 | ||||
| -rw-r--r-- | fs/nfs/file.c | 5 | ||||
| -rw-r--r-- | fs/nfs/fscache.c | 1 | ||||
| -rw-r--r-- | fs/nfs/inode.c | 3 | ||||
| -rw-r--r-- | fs/nfs/namespace.c | 1 | ||||
| -rw-r--r-- | fs/nfs/nfs2xdr.c | 1 | ||||
| -rw-r--r-- | fs/nfs/nfs3acl.c | 1 | ||||
| -rw-r--r-- | fs/nfs/nfs3proc.c | 1 | ||||
| -rw-r--r-- | fs/nfs/nfs3xdr.c | 1 | ||||
| -rw-r--r-- | fs/nfs/nfs4namespace.c | 1 | ||||
| -rw-r--r-- | fs/nfs/nfs4proc.c | 5 | ||||
| -rw-r--r-- | fs/nfs/nfs4xdr.c | 3 | ||||
| -rw-r--r-- | fs/nfs/pagelist.c | 23 | ||||
| -rw-r--r-- | fs/nfs/proc.c | 1 | ||||
| -rw-r--r-- | fs/nfs/super.c | 26 | ||||
| -rw-r--r-- | fs/nfs/symlink.c | 1 |
24 files changed, 64 insertions, 26 deletions
diff --git a/fs/nfs/cache_lib.c b/fs/nfs/cache_lib.c index b4ffd0146ea6..84690319e625 100644 --- a/fs/nfs/cache_lib.c +++ b/fs/nfs/cache_lib.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/moduleparam.h> | 10 | #include <linux/moduleparam.h> |
| 11 | #include <linux/mount.h> | 11 | #include <linux/mount.h> |
| 12 | #include <linux/namei.h> | 12 | #include <linux/namei.h> |
| 13 | #include <linux/slab.h> | ||
| 13 | #include <linux/sunrpc/cache.h> | 14 | #include <linux/sunrpc/cache.h> |
| 14 | #include <linux/sunrpc/rpc_pipe_fs.h> | 15 | #include <linux/sunrpc/rpc_pipe_fs.h> |
| 15 | 16 | ||
diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c index 84761b5bb8e2..a08770a7e857 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | */ | 7 | */ |
| 8 | #include <linux/nfs4.h> | 8 | #include <linux/nfs4.h> |
| 9 | #include <linux/nfs_fs.h> | 9 | #include <linux/nfs_fs.h> |
| 10 | #include <linux/slab.h> | ||
| 10 | #include "nfs4_fs.h" | 11 | #include "nfs4_fs.h" |
| 11 | #include "callback.h" | 12 | #include "callback.h" |
| 12 | #include "delegation.h" | 13 | #include "delegation.h" |
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c index db30c0b398b5..05af212f0edf 100644 --- a/fs/nfs/callback_xdr.c +++ b/fs/nfs/callback_xdr.c | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <linux/sunrpc/svc.h> | 9 | #include <linux/sunrpc/svc.h> |
| 10 | #include <linux/nfs4.h> | 10 | #include <linux/nfs4.h> |
| 11 | #include <linux/nfs_fs.h> | 11 | #include <linux/nfs_fs.h> |
| 12 | #include <linux/slab.h> | ||
| 12 | #include "nfs4_fs.h" | 13 | #include "nfs4_fs.h" |
| 13 | #include "callback.h" | 14 | #include "callback.h" |
| 14 | 15 | ||
| @@ -782,6 +783,7 @@ struct svc_version nfs4_callback_version1 = { | |||
| 782 | .vs_proc = nfs4_callback_procedures1, | 783 | .vs_proc = nfs4_callback_procedures1, |
| 783 | .vs_xdrsize = NFS4_CALLBACK_XDRSIZE, | 784 | .vs_xdrsize = NFS4_CALLBACK_XDRSIZE, |
| 784 | .vs_dispatch = NULL, | 785 | .vs_dispatch = NULL, |
| 786 | .vs_hidden = 1, | ||
| 785 | }; | 787 | }; |
| 786 | 788 | ||
| 787 | struct svc_version nfs4_callback_version4 = { | 789 | struct svc_version nfs4_callback_version4 = { |
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 2274f1737336..2a3d352c0bff 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | #include <linux/vfs.h> | 35 | #include <linux/vfs.h> |
| 36 | #include <linux/inet.h> | 36 | #include <linux/inet.h> |
| 37 | #include <linux/in6.h> | 37 | #include <linux/in6.h> |
| 38 | #include <linux/slab.h> | ||
| 38 | #include <net/ipv6.h> | 39 | #include <net/ipv6.h> |
| 39 | #include <linux/nfs_xdr.h> | 40 | #include <linux/nfs_xdr.h> |
| 40 | #include <linux/sunrpc/bc_xprt.h> | 41 | #include <linux/sunrpc/bc_xprt.h> |
diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c index 2563bebc4c67..15671245c6ee 100644 --- a/fs/nfs/delegation.c +++ b/fs/nfs/delegation.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/kthread.h> | 10 | #include <linux/kthread.h> |
| 11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
| 13 | #include <linux/slab.h> | ||
| 13 | #include <linux/smp_lock.h> | 14 | #include <linux/smp_lock.h> |
| 14 | #include <linux/spinlock.h> | 15 | #include <linux/spinlock.h> |
| 15 | 16 | ||
diff --git a/fs/nfs/delegation.h b/fs/nfs/delegation.h index 944b627ec6e1..69e7b8140122 100644 --- a/fs/nfs/delegation.h +++ b/fs/nfs/delegation.h | |||
| @@ -71,4 +71,10 @@ static inline int nfs_inode_return_delegation(struct inode *inode) | |||
| 71 | } | 71 | } |
| 72 | #endif | 72 | #endif |
| 73 | 73 | ||
| 74 | static inline int nfs_have_delegated_attributes(struct inode *inode) | ||
| 75 | { | ||
| 76 | return nfs_have_delegation(inode, FMODE_READ) && | ||
| 77 | !(NFS_I(inode)->cache_validity & NFS_INO_REVAL_FORCED); | ||
| 78 | } | ||
| 79 | |||
| 74 | #endif | 80 | #endif |
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index a1f6b4438fb1..c6f2750648f4 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
| @@ -1789,7 +1789,7 @@ static int nfs_access_get_cached(struct inode *inode, struct rpc_cred *cred, str | |||
| 1789 | cache = nfs_access_search_rbtree(inode, cred); | 1789 | cache = nfs_access_search_rbtree(inode, cred); |
| 1790 | if (cache == NULL) | 1790 | if (cache == NULL) |
| 1791 | goto out; | 1791 | goto out; |
| 1792 | if (!nfs_have_delegation(inode, FMODE_READ) && | 1792 | if (!nfs_have_delegated_attributes(inode) && |
| 1793 | !time_in_range_open(jiffies, cache->jiffies, cache->jiffies + nfsi->attrtimeo)) | 1793 | !time_in_range_open(jiffies, cache->jiffies, cache->jiffies + nfsi->attrtimeo)) |
| 1794 | goto out_stale; | 1794 | goto out_stale; |
| 1795 | res->jiffies = cache->jiffies; | 1795 | res->jiffies = cache->jiffies; |
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 0d289823e856..ad4cd31d6050 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #include <linux/file.h> | 44 | #include <linux/file.h> |
| 45 | #include <linux/pagemap.h> | 45 | #include <linux/pagemap.h> |
| 46 | #include <linux/kref.h> | 46 | #include <linux/kref.h> |
| 47 | #include <linux/slab.h> | ||
| 47 | 48 | ||
| 48 | #include <linux/nfs_fs.h> | 49 | #include <linux/nfs_fs.h> |
| 49 | #include <linux/nfs_page.h> | 50 | #include <linux/nfs_page.h> |
diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c index 3f0cd4dfddaf..76fd235d0024 100644 --- a/fs/nfs/dns_resolve.c +++ b/fs/nfs/dns_resolve.c | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <linux/hash.h> | 9 | #include <linux/hash.h> |
| 10 | #include <linux/string.h> | 10 | #include <linux/string.h> |
| 11 | #include <linux/kmod.h> | 11 | #include <linux/kmod.h> |
| 12 | #include <linux/slab.h> | ||
| 12 | #include <linux/module.h> | 13 | #include <linux/module.h> |
| 13 | #include <linux/socket.h> | 14 | #include <linux/socket.h> |
| 14 | #include <linux/seq_file.h> | 15 | #include <linux/seq_file.h> |
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index ae8d02294e46..8d965bddb87e 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
| @@ -24,9 +24,9 @@ | |||
| 24 | #include <linux/nfs_fs.h> | 24 | #include <linux/nfs_fs.h> |
| 25 | #include <linux/nfs_mount.h> | 25 | #include <linux/nfs_mount.h> |
| 26 | #include <linux/mm.h> | 26 | #include <linux/mm.h> |
| 27 | #include <linux/slab.h> | ||
| 28 | #include <linux/pagemap.h> | 27 | #include <linux/pagemap.h> |
| 29 | #include <linux/aio.h> | 28 | #include <linux/aio.h> |
| 29 | #include <linux/gfp.h> | ||
| 30 | 30 | ||
| 31 | #include <asm/uaccess.h> | 31 | #include <asm/uaccess.h> |
| 32 | #include <asm/system.h> | 32 | #include <asm/system.h> |
| @@ -491,7 +491,8 @@ static int nfs_release_page(struct page *page, gfp_t gfp) | |||
| 491 | { | 491 | { |
| 492 | dfprintk(PAGECACHE, "NFS: release_page(%p)\n", page); | 492 | dfprintk(PAGECACHE, "NFS: release_page(%p)\n", page); |
| 493 | 493 | ||
| 494 | if (gfp & __GFP_WAIT) | 494 | /* Only do I/O if gfp is a superset of GFP_KERNEL */ |
| 495 | if ((gfp & GFP_KERNEL) == GFP_KERNEL) | ||
| 495 | nfs_wb_page(page->mapping->host, page); | 496 | nfs_wb_page(page->mapping->host, page); |
| 496 | /* If PagePrivate() is set, then the page is not freeable */ | 497 | /* If PagePrivate() is set, then the page is not freeable */ |
| 497 | if (PagePrivate(page)) | 498 | if (PagePrivate(page)) |
diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c index 237874f1af23..a6b16ed93229 100644 --- a/fs/nfs/fscache.c +++ b/fs/nfs/fscache.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/nfs_fs_sb.h> | 17 | #include <linux/nfs_fs_sb.h> |
| 18 | #include <linux/in6.h> | 18 | #include <linux/in6.h> |
| 19 | #include <linux/seq_file.h> | 19 | #include <linux/seq_file.h> |
| 20 | #include <linux/slab.h> | ||
| 20 | 21 | ||
| 21 | #include "internal.h" | 22 | #include "internal.h" |
| 22 | #include "iostat.h" | 23 | #include "iostat.h" |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 657201acda84..737128f777f3 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | #include <linux/vfs.h> | 36 | #include <linux/vfs.h> |
| 37 | #include <linux/inet.h> | 37 | #include <linux/inet.h> |
| 38 | #include <linux/nfs_xdr.h> | 38 | #include <linux/nfs_xdr.h> |
| 39 | #include <linux/slab.h> | ||
| 39 | 40 | ||
| 40 | #include <asm/system.h> | 41 | #include <asm/system.h> |
| 41 | #include <asm/uaccess.h> | 42 | #include <asm/uaccess.h> |
| @@ -729,7 +730,7 @@ int nfs_attribute_timeout(struct inode *inode) | |||
| 729 | { | 730 | { |
| 730 | struct nfs_inode *nfsi = NFS_I(inode); | 731 | struct nfs_inode *nfsi = NFS_I(inode); |
| 731 | 732 | ||
| 732 | if (nfs_have_delegation(inode, FMODE_READ)) | 733 | if (nfs_have_delegated_attributes(inode)) |
| 733 | return 0; | 734 | return 0; |
| 734 | return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo); | 735 | return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo); |
| 735 | } | 736 | } |
diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c index 40c766782891..7888cf36022d 100644 --- a/fs/nfs/namespace.c +++ b/fs/nfs/namespace.c | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | #include <linux/dcache.h> | 10 | #include <linux/dcache.h> |
| 11 | #include <linux/gfp.h> | ||
| 11 | #include <linux/mount.h> | 12 | #include <linux/mount.h> |
| 12 | #include <linux/namei.h> | 13 | #include <linux/namei.h> |
| 13 | #include <linux/nfs_fs.h> | 14 | #include <linux/nfs_fs.h> |
diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c index 7bc2da8efd4a..81cf14257916 100644 --- a/fs/nfs/nfs2xdr.c +++ b/fs/nfs/nfs2xdr.c | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | #include <linux/param.h> | 12 | #include <linux/param.h> |
| 13 | #include <linux/time.h> | 13 | #include <linux/time.h> |
| 14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
| 15 | #include <linux/slab.h> | ||
| 16 | #include <linux/errno.h> | 15 | #include <linux/errno.h> |
| 17 | #include <linux/string.h> | 16 | #include <linux/string.h> |
| 18 | #include <linux/in.h> | 17 | #include <linux/in.h> |
diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c index bac60515a4b3..d150ae0c5ecd 100644 --- a/fs/nfs/nfs3acl.c +++ b/fs/nfs/nfs3acl.c | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | #include <linux/fs.h> | 1 | #include <linux/fs.h> |
| 2 | #include <linux/gfp.h> | ||
| 2 | #include <linux/nfs.h> | 3 | #include <linux/nfs.h> |
| 3 | #include <linux/nfs3.h> | 4 | #include <linux/nfs3.h> |
| 4 | #include <linux/nfs_fs.h> | 5 | #include <linux/nfs_fs.h> |
diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c index 24992f0a29f2..e701002694e5 100644 --- a/fs/nfs/nfs3proc.c +++ b/fs/nfs/nfs3proc.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/errno.h> | 10 | #include <linux/errno.h> |
| 11 | #include <linux/string.h> | 11 | #include <linux/string.h> |
| 12 | #include <linux/sunrpc/clnt.h> | 12 | #include <linux/sunrpc/clnt.h> |
| 13 | #include <linux/slab.h> | ||
| 13 | #include <linux/nfs.h> | 14 | #include <linux/nfs.h> |
| 14 | #include <linux/nfs3.h> | 15 | #include <linux/nfs3.h> |
| 15 | #include <linux/nfs_fs.h> | 16 | #include <linux/nfs_fs.h> |
diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c index 5fe5492fbd29..56a86f6ac8b5 100644 --- a/fs/nfs/nfs3xdr.c +++ b/fs/nfs/nfs3xdr.c | |||
| @@ -9,7 +9,6 @@ | |||
| 9 | #include <linux/param.h> | 9 | #include <linux/param.h> |
| 10 | #include <linux/time.h> | 10 | #include <linux/time.h> |
| 11 | #include <linux/mm.h> | 11 | #include <linux/mm.h> |
| 12 | #include <linux/slab.h> | ||
| 13 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
| 14 | #include <linux/string.h> | 13 | #include <linux/string.h> |
| 15 | #include <linux/in.h> | 14 | #include <linux/in.h> |
diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c index fa3408f20112..f071d12c613b 100644 --- a/fs/nfs/nfs4namespace.c +++ b/fs/nfs/nfs4namespace.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/mount.h> | 11 | #include <linux/mount.h> |
| 12 | #include <linux/namei.h> | 12 | #include <linux/namei.h> |
| 13 | #include <linux/nfs_fs.h> | 13 | #include <linux/nfs_fs.h> |
| 14 | #include <linux/slab.h> | ||
| 14 | #include <linux/string.h> | 15 | #include <linux/string.h> |
| 15 | #include <linux/sunrpc/clnt.h> | 16 | #include <linux/sunrpc/clnt.h> |
| 16 | #include <linux/vfs.h> | 17 | #include <linux/vfs.h> |
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index eda74c42d552..fe0cd9eb1d4d 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
| @@ -39,6 +39,7 @@ | |||
| 39 | #include <linux/delay.h> | 39 | #include <linux/delay.h> |
| 40 | #include <linux/errno.h> | 40 | #include <linux/errno.h> |
| 41 | #include <linux/string.h> | 41 | #include <linux/string.h> |
| 42 | #include <linux/slab.h> | ||
| 42 | #include <linux/sunrpc/clnt.h> | 43 | #include <linux/sunrpc/clnt.h> |
| 43 | #include <linux/nfs.h> | 44 | #include <linux/nfs.h> |
| 44 | #include <linux/nfs4.h> | 45 | #include <linux/nfs4.h> |
| @@ -2067,8 +2068,7 @@ nfs4_open_revalidate(struct inode *dir, struct dentry *dentry, int openflags, st | |||
| 2067 | case -EDQUOT: | 2068 | case -EDQUOT: |
| 2068 | case -ENOSPC: | 2069 | case -ENOSPC: |
| 2069 | case -EROFS: | 2070 | case -EROFS: |
| 2070 | lookup_instantiate_filp(nd, (struct dentry *)state, NULL); | 2071 | return PTR_ERR(state); |
| 2071 | return 1; | ||
| 2072 | default: | 2072 | default: |
| 2073 | goto out_drop; | 2073 | goto out_drop; |
| 2074 | } | 2074 | } |
| @@ -5107,6 +5107,7 @@ static int nfs41_proc_async_sequence(struct nfs_client *clp, | |||
| 5107 | res = kzalloc(sizeof(*res), GFP_KERNEL); | 5107 | res = kzalloc(sizeof(*res), GFP_KERNEL); |
| 5108 | if (!args || !res) { | 5108 | if (!args || !res) { |
| 5109 | kfree(args); | 5109 | kfree(args); |
| 5110 | kfree(res); | ||
| 5110 | nfs_put_client(clp); | 5111 | nfs_put_client(clp); |
| 5111 | return -ENOMEM; | 5112 | return -ENOMEM; |
| 5112 | } | 5113 | } |
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index 4d338be492cb..38f3b582e7c2 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c | |||
| @@ -38,7 +38,6 @@ | |||
| 38 | #include <linux/param.h> | 38 | #include <linux/param.h> |
| 39 | #include <linux/time.h> | 39 | #include <linux/time.h> |
| 40 | #include <linux/mm.h> | 40 | #include <linux/mm.h> |
| 41 | #include <linux/slab.h> | ||
| 42 | #include <linux/errno.h> | 41 | #include <linux/errno.h> |
| 43 | #include <linux/string.h> | 42 | #include <linux/string.h> |
| 44 | #include <linux/in.h> | 43 | #include <linux/in.h> |
| @@ -5552,6 +5551,8 @@ static int nfs4_xdr_dec_delegreturn(struct rpc_rqst *rqstp, __be32 *p, struct nf | |||
| 5552 | if (status != 0) | 5551 | if (status != 0) |
| 5553 | goto out; | 5552 | goto out; |
| 5554 | status = decode_delegreturn(&xdr); | 5553 | status = decode_delegreturn(&xdr); |
| 5554 | if (status != 0) | ||
| 5555 | goto out; | ||
| 5555 | decode_getfattr(&xdr, res->fattr, res->server, | 5556 | decode_getfattr(&xdr, res->fattr, res->server, |
| 5556 | !RPC_IS_ASYNC(rqstp->rq_task)); | 5557 | !RPC_IS_ASYNC(rqstp->rq_task)); |
| 5557 | out: | 5558 | out: |
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c index a12c45b65dd4..29d9d36cd5f4 100644 --- a/fs/nfs/pagelist.c +++ b/fs/nfs/pagelist.c | |||
| @@ -112,12 +112,10 @@ void nfs_unlock_request(struct nfs_page *req) | |||
| 112 | */ | 112 | */ |
| 113 | int nfs_set_page_tag_locked(struct nfs_page *req) | 113 | int nfs_set_page_tag_locked(struct nfs_page *req) |
| 114 | { | 114 | { |
| 115 | struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode); | ||
| 116 | |||
| 117 | if (!nfs_lock_request_dontget(req)) | 115 | if (!nfs_lock_request_dontget(req)) |
| 118 | return 0; | 116 | return 0; |
| 119 | if (req->wb_page != NULL) | 117 | if (req->wb_page != NULL) |
| 120 | radix_tree_tag_set(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED); | 118 | radix_tree_tag_set(&NFS_I(req->wb_context->path.dentry->d_inode)->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED); |
| 121 | return 1; | 119 | return 1; |
| 122 | } | 120 | } |
| 123 | 121 | ||
| @@ -126,10 +124,10 @@ int nfs_set_page_tag_locked(struct nfs_page *req) | |||
| 126 | */ | 124 | */ |
| 127 | void nfs_clear_page_tag_locked(struct nfs_page *req) | 125 | void nfs_clear_page_tag_locked(struct nfs_page *req) |
| 128 | { | 126 | { |
| 129 | struct inode *inode = req->wb_context->path.dentry->d_inode; | ||
| 130 | struct nfs_inode *nfsi = NFS_I(inode); | ||
| 131 | |||
| 132 | if (req->wb_page != NULL) { | 127 | if (req->wb_page != NULL) { |
| 128 | struct inode *inode = req->wb_context->path.dentry->d_inode; | ||
| 129 | struct nfs_inode *nfsi = NFS_I(inode); | ||
| 130 | |||
| 133 | spin_lock(&inode->i_lock); | 131 | spin_lock(&inode->i_lock); |
| 134 | radix_tree_tag_clear(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED); | 132 | radix_tree_tag_clear(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED); |
| 135 | nfs_unlock_request(req); | 133 | nfs_unlock_request(req); |
| @@ -142,16 +140,22 @@ void nfs_clear_page_tag_locked(struct nfs_page *req) | |||
| 142 | * nfs_clear_request - Free up all resources allocated to the request | 140 | * nfs_clear_request - Free up all resources allocated to the request |
| 143 | * @req: | 141 | * @req: |
| 144 | * | 142 | * |
| 145 | * Release page resources associated with a write request after it | 143 | * Release page and open context resources associated with a read/write |
| 146 | * has completed. | 144 | * request after it has completed. |
| 147 | */ | 145 | */ |
| 148 | void nfs_clear_request(struct nfs_page *req) | 146 | void nfs_clear_request(struct nfs_page *req) |
| 149 | { | 147 | { |
| 150 | struct page *page = req->wb_page; | 148 | struct page *page = req->wb_page; |
| 149 | struct nfs_open_context *ctx = req->wb_context; | ||
| 150 | |||
| 151 | if (page != NULL) { | 151 | if (page != NULL) { |
| 152 | page_cache_release(page); | 152 | page_cache_release(page); |
| 153 | req->wb_page = NULL; | 153 | req->wb_page = NULL; |
| 154 | } | 154 | } |
| 155 | if (ctx != NULL) { | ||
| 156 | put_nfs_open_context(ctx); | ||
| 157 | req->wb_context = NULL; | ||
| 158 | } | ||
| 155 | } | 159 | } |
| 156 | 160 | ||
| 157 | 161 | ||
| @@ -165,9 +169,8 @@ static void nfs_free_request(struct kref *kref) | |||
| 165 | { | 169 | { |
| 166 | struct nfs_page *req = container_of(kref, struct nfs_page, wb_kref); | 170 | struct nfs_page *req = container_of(kref, struct nfs_page, wb_kref); |
| 167 | 171 | ||
| 168 | /* Release struct file or cached credential */ | 172 | /* Release struct file and open context */ |
| 169 | nfs_clear_request(req); | 173 | nfs_clear_request(req); |
| 170 | put_nfs_open_context(req->wb_context); | ||
| 171 | nfs_page_free(req); | 174 | nfs_page_free(req); |
| 172 | } | 175 | } |
| 173 | 176 | ||
diff --git a/fs/nfs/proc.c b/fs/nfs/proc.c index c752d944fe9e..0288be80444f 100644 --- a/fs/nfs/proc.c +++ b/fs/nfs/proc.c | |||
| @@ -29,7 +29,6 @@ | |||
| 29 | 29 | ||
| 30 | #include <linux/types.h> | 30 | #include <linux/types.h> |
| 31 | #include <linux/param.h> | 31 | #include <linux/param.h> |
| 32 | #include <linux/slab.h> | ||
| 33 | #include <linux/time.h> | 32 | #include <linux/time.h> |
| 34 | #include <linux/mm.h> | 33 | #include <linux/mm.h> |
| 35 | #include <linux/errno.h> | 34 | #include <linux/errno.h> |
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index f1afee4eea77..e01637240eeb 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
| @@ -48,6 +48,7 @@ | |||
| 48 | #include <linux/vfs.h> | 48 | #include <linux/vfs.h> |
| 49 | #include <linux/inet.h> | 49 | #include <linux/inet.h> |
| 50 | #include <linux/in6.h> | 50 | #include <linux/in6.h> |
| 51 | #include <linux/slab.h> | ||
| 51 | #include <net/ipv6.h> | 52 | #include <net/ipv6.h> |
| 52 | #include <linux/netdevice.h> | 53 | #include <linux/netdevice.h> |
| 53 | #include <linux/nfs_xdr.h> | 54 | #include <linux/nfs_xdr.h> |
| @@ -2214,7 +2215,7 @@ static int nfs_get_sb(struct file_system_type *fs_type, | |||
| 2214 | } else { | 2215 | } else { |
| 2215 | error = nfs_bdi_register(server); | 2216 | error = nfs_bdi_register(server); |
| 2216 | if (error) | 2217 | if (error) |
| 2217 | goto error_splat_super; | 2218 | goto error_splat_bdi; |
| 2218 | } | 2219 | } |
| 2219 | 2220 | ||
| 2220 | if (!s->s_root) { | 2221 | if (!s->s_root) { |
| @@ -2256,6 +2257,9 @@ out_err_nosb: | |||
| 2256 | error_splat_root: | 2257 | error_splat_root: |
| 2257 | dput(mntroot); | 2258 | dput(mntroot); |
| 2258 | error_splat_super: | 2259 | error_splat_super: |
| 2260 | if (server && !s->s_root) | ||
| 2261 | bdi_unregister(&server->backing_dev_info); | ||
| 2262 | error_splat_bdi: | ||
| 2259 | deactivate_locked_super(s); | 2263 | deactivate_locked_super(s); |
| 2260 | goto out; | 2264 | goto out; |
| 2261 | } | 2265 | } |
| @@ -2326,7 +2330,7 @@ static int nfs_xdev_get_sb(struct file_system_type *fs_type, int flags, | |||
| 2326 | } else { | 2330 | } else { |
| 2327 | error = nfs_bdi_register(server); | 2331 | error = nfs_bdi_register(server); |
| 2328 | if (error) | 2332 | if (error) |
| 2329 | goto error_splat_super; | 2333 | goto error_splat_bdi; |
| 2330 | } | 2334 | } |
| 2331 | 2335 | ||
| 2332 | if (!s->s_root) { | 2336 | if (!s->s_root) { |
| @@ -2363,6 +2367,9 @@ out_err_noserver: | |||
| 2363 | return error; | 2367 | return error; |
| 2364 | 2368 | ||
| 2365 | error_splat_super: | 2369 | error_splat_super: |
| 2370 | if (server && !s->s_root) | ||
| 2371 | bdi_unregister(&server->backing_dev_info); | ||
| 2372 | error_splat_bdi: | ||
| 2366 | deactivate_locked_super(s); | 2373 | deactivate_locked_super(s); |
| 2367 | dprintk("<-- nfs_xdev_get_sb() = %d [splat]\n", error); | 2374 | dprintk("<-- nfs_xdev_get_sb() = %d [splat]\n", error); |
| 2368 | return error; | 2375 | return error; |
| @@ -2578,7 +2585,7 @@ static int nfs4_remote_get_sb(struct file_system_type *fs_type, | |||
| 2578 | } else { | 2585 | } else { |
| 2579 | error = nfs_bdi_register(server); | 2586 | error = nfs_bdi_register(server); |
| 2580 | if (error) | 2587 | if (error) |
| 2581 | goto error_splat_super; | 2588 | goto error_splat_bdi; |
| 2582 | } | 2589 | } |
| 2583 | 2590 | ||
| 2584 | if (!s->s_root) { | 2591 | if (!s->s_root) { |
| @@ -2616,6 +2623,9 @@ out_free: | |||
| 2616 | error_splat_root: | 2623 | error_splat_root: |
| 2617 | dput(mntroot); | 2624 | dput(mntroot); |
| 2618 | error_splat_super: | 2625 | error_splat_super: |
| 2626 | if (server && !s->s_root) | ||
| 2627 | bdi_unregister(&server->backing_dev_info); | ||
| 2628 | error_splat_bdi: | ||
| 2619 | deactivate_locked_super(s); | 2629 | deactivate_locked_super(s); |
| 2620 | goto out; | 2630 | goto out; |
| 2621 | } | 2631 | } |
| @@ -2811,7 +2821,7 @@ static int nfs4_xdev_get_sb(struct file_system_type *fs_type, int flags, | |||
| 2811 | } else { | 2821 | } else { |
| 2812 | error = nfs_bdi_register(server); | 2822 | error = nfs_bdi_register(server); |
| 2813 | if (error) | 2823 | if (error) |
| 2814 | goto error_splat_super; | 2824 | goto error_splat_bdi; |
| 2815 | } | 2825 | } |
| 2816 | 2826 | ||
| 2817 | if (!s->s_root) { | 2827 | if (!s->s_root) { |
| @@ -2847,6 +2857,9 @@ out_err_noserver: | |||
| 2847 | return error; | 2857 | return error; |
| 2848 | 2858 | ||
| 2849 | error_splat_super: | 2859 | error_splat_super: |
| 2860 | if (server && !s->s_root) | ||
| 2861 | bdi_unregister(&server->backing_dev_info); | ||
| 2862 | error_splat_bdi: | ||
| 2850 | deactivate_locked_super(s); | 2863 | deactivate_locked_super(s); |
| 2851 | dprintk("<-- nfs4_xdev_get_sb() = %d [splat]\n", error); | 2864 | dprintk("<-- nfs4_xdev_get_sb() = %d [splat]\n", error); |
| 2852 | return error; | 2865 | return error; |
| @@ -2893,7 +2906,7 @@ static int nfs4_remote_referral_get_sb(struct file_system_type *fs_type, | |||
| 2893 | } else { | 2906 | } else { |
| 2894 | error = nfs_bdi_register(server); | 2907 | error = nfs_bdi_register(server); |
| 2895 | if (error) | 2908 | if (error) |
| 2896 | goto error_splat_super; | 2909 | goto error_splat_bdi; |
| 2897 | } | 2910 | } |
| 2898 | 2911 | ||
| 2899 | if (!s->s_root) { | 2912 | if (!s->s_root) { |
| @@ -2929,6 +2942,9 @@ out_err_noserver: | |||
| 2929 | return error; | 2942 | return error; |
| 2930 | 2943 | ||
| 2931 | error_splat_super: | 2944 | error_splat_super: |
| 2945 | if (server && !s->s_root) | ||
| 2946 | bdi_unregister(&server->backing_dev_info); | ||
| 2947 | error_splat_bdi: | ||
| 2932 | deactivate_locked_super(s); | 2948 | deactivate_locked_super(s); |
| 2933 | dprintk("<-- nfs4_referral_get_sb() = %d [splat]\n", error); | 2949 | dprintk("<-- nfs4_referral_get_sb() = %d [splat]\n", error); |
| 2934 | return error; | 2950 | return error; |
diff --git a/fs/nfs/symlink.c b/fs/nfs/symlink.c index 2ea9e5c27e55..05c9e02f4153 100644 --- a/fs/nfs/symlink.c +++ b/fs/nfs/symlink.c | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #include <linux/pagemap.h> | 19 | #include <linux/pagemap.h> |
| 20 | #include <linux/stat.h> | 20 | #include <linux/stat.h> |
| 21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
| 22 | #include <linux/slab.h> | ||
| 23 | #include <linux/string.h> | 22 | #include <linux/string.h> |
| 24 | #include <linux/namei.h> | 23 | #include <linux/namei.h> |
| 25 | 24 | ||
