diff options
-rw-r--r-- | MAINTAINERS | 6 | ||||
-rw-r--r-- | fs/nfs/client.c | 6 | ||||
-rw-r--r-- | fs/nfs/direct.c | 2 | ||||
-rw-r--r-- | fs/nfs/getroot.c | 11 | ||||
-rw-r--r-- | fs/nfs/super.c | 2 | ||||
-rw-r--r-- | net/sunrpc/xprtrdma/rpc_rdma.c | 9 |
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 | ||
2752 | NFS CLIENT | 2752 | NFS CLIENT |
2753 | P: Trond Myklebust | 2753 | P: Trond Myklebust |
2754 | M: trond.myklebust@fys.uio.no | 2754 | M: Trond.Myklebust@netapp.com |
2755 | L: linux-kernel@vger.kernel.org | 2755 | L: linux-nfs@vger.kernel.org |
2756 | W: http://client.linux-nfs.org | ||
2757 | T: git git://git.linux-nfs.org/pub/linux/nfs-2.6.git | ||
2756 | S: Maintained | 2758 | S: Maintained |
2757 | 2759 | ||
2758 | NI5010 NETWORK DRIVER | 2760 | NI5010 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 | */ |
411 | static void nfs_destroy_server(struct nfs_server *server) | 411 | static 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 | ||