aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MAINTAINERS6
-rw-r--r--fs/nfs/client.c6
-rw-r--r--fs/nfs/direct.c2
-rw-r--r--fs/nfs/getroot.c11
-rw-r--r--fs/nfs/super.c2
-rw-r--r--net/sunrpc/xprtrdma/rpc_rdma.c9
6 files changed, 20 insertions, 16 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index a7caced39bfa..cdc2198db754 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2751,8 +2751,10 @@ S: Maintained
2751 2751
2752NFS CLIENT 2752NFS CLIENT
2753P: Trond Myklebust 2753P: Trond Myklebust
2754M: trond.myklebust@fys.uio.no 2754M: Trond.Myklebust@netapp.com
2755L: linux-kernel@vger.kernel.org 2755L: linux-nfs@vger.kernel.org
2756W: http://client.linux-nfs.org
2757T: git git://git.linux-nfs.org/pub/linux/nfs-2.6.git
2756S: Maintained 2758S: Maintained
2757 2759
2758NI5010 NETWORK DRIVER 2760NI5010 NETWORK DRIVER
diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index 70587f383f10..a6f625497612 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -410,9 +410,6 @@ static int nfs_create_rpc_client(struct nfs_client *clp, int proto,
410 */ 410 */
411static void nfs_destroy_server(struct nfs_server *server) 411static void nfs_destroy_server(struct nfs_server *server)
412{ 412{
413 if (!IS_ERR(server->client_acl))
414 rpc_shutdown_client(server->client_acl);
415
416 if (!(server->flags & NFS_MOUNT_NONLM)) 413 if (!(server->flags & NFS_MOUNT_NONLM))
417 lockd_down(); /* release rpc.lockd */ 414 lockd_down(); /* release rpc.lockd */
418} 415}
@@ -755,6 +752,9 @@ void nfs_free_server(struct nfs_server *server)
755 752
756 if (server->destroy != NULL) 753 if (server->destroy != NULL)
757 server->destroy(server); 754 server->destroy(server);
755
756 if (!IS_ERR(server->client_acl))
757 rpc_shutdown_client(server->client_acl);
758 if (!IS_ERR(server->client)) 758 if (!IS_ERR(server->client))
759 rpc_shutdown_client(server->client); 759 rpc_shutdown_client(server->client);
760 760
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
index 5e8d82f6666b..3c9d16b4f80c 100644
--- a/fs/nfs/direct.c
+++ b/fs/nfs/direct.c
@@ -894,8 +894,6 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, const struct iovec *iov,
894 retval = generic_write_checks(file, &pos, &count, 0); 894 retval = generic_write_checks(file, &pos, &count, 0);
895 if (retval) 895 if (retval)
896 goto out; 896 goto out;
897 if (!count)
898 goto out; /* return 0 */
899 897
900 retval = -EINVAL; 898 retval = -EINVAL;
901 if ((ssize_t) count < 0) 899 if ((ssize_t) count < 0)
diff --git a/fs/nfs/getroot.c b/fs/nfs/getroot.c
index 0ee43843f4ec..e6242cdbaf91 100644
--- a/fs/nfs/getroot.c
+++ b/fs/nfs/getroot.c
@@ -57,6 +57,17 @@ static int nfs_superblock_set_dummy_root(struct super_block *sb, struct inode *i
57 } 57 }
58 /* Circumvent igrab(): we know the inode is not being freed */ 58 /* Circumvent igrab(): we know the inode is not being freed */
59 atomic_inc(&inode->i_count); 59 atomic_inc(&inode->i_count);
60 /*
61 * Ensure that this dentry is invisible to d_find_alias().
62 * Otherwise, it may be spliced into the tree by
63 * d_materialise_unique if a parent directory from the same
64 * filesystem gets mounted at a later time.
65 * This again causes shrink_dcache_for_umount_subtree() to
66 * Oops, since the test for IS_ROOT() will fail.
67 */
68 spin_lock(&dcache_lock);
69 list_del_init(&sb->s_root->d_alias);
70 spin_unlock(&dcache_lock);
60 } 71 }
61 return 0; 72 return 0;
62} 73}
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 2426e713b77f..ea929207f274 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -1475,7 +1475,7 @@ static int nfs_xdev_get_sb(struct file_system_type *fs_type, int flags,
1475 error = PTR_ERR(mntroot); 1475 error = PTR_ERR(mntroot);
1476 goto error_splat_super; 1476 goto error_splat_super;
1477 } 1477 }
1478 if (mntroot->d_inode->i_op != &nfs_dir_inode_operations) { 1478 if (mntroot->d_inode->i_op != server->nfs_client->rpc_ops->dir_inode_ops) {
1479 dput(mntroot); 1479 dput(mntroot);
1480 error = -ESTALE; 1480 error = -ESTALE;
1481 goto error_splat_super; 1481 goto error_splat_super;
diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
index 9e11ce715958..ee8de7af2a5b 100644
--- a/net/sunrpc/xprtrdma/rpc_rdma.c
+++ b/net/sunrpc/xprtrdma/rpc_rdma.c
@@ -92,7 +92,6 @@ rpcrdma_convert_iovs(struct xdr_buf *xdrbuf, int pos,
92 seg[n].mr_page = NULL; 92 seg[n].mr_page = NULL;
93 seg[n].mr_offset = xdrbuf->head[0].iov_base; 93 seg[n].mr_offset = xdrbuf->head[0].iov_base;
94 seg[n].mr_len = xdrbuf->head[0].iov_len; 94 seg[n].mr_len = xdrbuf->head[0].iov_len;
95 pos += xdrbuf->head[0].iov_len;
96 ++n; 95 ++n;
97 } 96 }
98 97
@@ -104,7 +103,6 @@ rpcrdma_convert_iovs(struct xdr_buf *xdrbuf, int pos,
104 seg[n].mr_len = min_t(u32, 103 seg[n].mr_len = min_t(u32,
105 PAGE_SIZE - xdrbuf->page_base, xdrbuf->page_len); 104 PAGE_SIZE - xdrbuf->page_base, xdrbuf->page_len);
106 len = xdrbuf->page_len - seg[n].mr_len; 105 len = xdrbuf->page_len - seg[n].mr_len;
107 pos += len;
108 ++n; 106 ++n;
109 p = 1; 107 p = 1;
110 while (len > 0) { 108 while (len > 0) {
@@ -119,20 +117,15 @@ rpcrdma_convert_iovs(struct xdr_buf *xdrbuf, int pos,
119 } 117 }
120 } 118 }
121 119
122 if (pos < xdrbuf->len && xdrbuf->tail[0].iov_len) { 120 if (xdrbuf->tail[0].iov_len) {
123 if (n == nsegs) 121 if (n == nsegs)
124 return 0; 122 return 0;
125 seg[n].mr_page = NULL; 123 seg[n].mr_page = NULL;
126 seg[n].mr_offset = xdrbuf->tail[0].iov_base; 124 seg[n].mr_offset = xdrbuf->tail[0].iov_base;
127 seg[n].mr_len = xdrbuf->tail[0].iov_len; 125 seg[n].mr_len = xdrbuf->tail[0].iov_len;
128 pos += xdrbuf->tail[0].iov_len;
129 ++n; 126 ++n;
130 } 127 }
131 128
132 if (pos < xdrbuf->len)
133 dprintk("RPC: %s: marshaled only %d of %d\n",
134 __func__, pos, xdrbuf->len);
135
136 return n; 129 return n;
137} 130}
138 131