forked from Minki/linux
Merge git://git.linux-nfs.org/pub/linux/nfs-2.6
* git://git.linux-nfs.org/pub/linux/nfs-2.6: MAINTAINERS: update the NFS CLIENT entry NFS: Fix an Oops in NFS unmount Revert "NFS: Ensure we return zero if applications attempt to write zero bytes" SUNRPC xprtrdma: fix XDR tail buf marshalling for all ops NFSv2/v3: Fix a memory leak when using -onolock NFS: Fix NFS mountpoint crossing...
This commit is contained in:
commit
2cc3a8f6ac
@ -2751,8 +2751,10 @@ S: Maintained
|
||||
|
||||
NFS CLIENT
|
||||
P: Trond Myklebust
|
||||
M: trond.myklebust@fys.uio.no
|
||||
L: linux-kernel@vger.kernel.org
|
||||
M: Trond.Myklebust@netapp.com
|
||||
L: linux-nfs@vger.kernel.org
|
||||
W: http://client.linux-nfs.org
|
||||
T: git git://git.linux-nfs.org/pub/linux/nfs-2.6.git
|
||||
S: Maintained
|
||||
|
||||
NI5010 NETWORK DRIVER
|
||||
|
@ -410,9 +410,6 @@ static int nfs_create_rpc_client(struct nfs_client *clp, int proto,
|
||||
*/
|
||||
static void nfs_destroy_server(struct nfs_server *server)
|
||||
{
|
||||
if (!IS_ERR(server->client_acl))
|
||||
rpc_shutdown_client(server->client_acl);
|
||||
|
||||
if (!(server->flags & NFS_MOUNT_NONLM))
|
||||
lockd_down(); /* release rpc.lockd */
|
||||
}
|
||||
@ -755,6 +752,9 @@ void nfs_free_server(struct nfs_server *server)
|
||||
|
||||
if (server->destroy != NULL)
|
||||
server->destroy(server);
|
||||
|
||||
if (!IS_ERR(server->client_acl))
|
||||
rpc_shutdown_client(server->client_acl);
|
||||
if (!IS_ERR(server->client))
|
||||
rpc_shutdown_client(server->client);
|
||||
|
||||
|
@ -894,8 +894,6 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, const struct iovec *iov,
|
||||
retval = generic_write_checks(file, &pos, &count, 0);
|
||||
if (retval)
|
||||
goto out;
|
||||
if (!count)
|
||||
goto out; /* return 0 */
|
||||
|
||||
retval = -EINVAL;
|
||||
if ((ssize_t) count < 0)
|
||||
|
@ -57,6 +57,17 @@ static int nfs_superblock_set_dummy_root(struct super_block *sb, struct inode *i
|
||||
}
|
||||
/* Circumvent igrab(): we know the inode is not being freed */
|
||||
atomic_inc(&inode->i_count);
|
||||
/*
|
||||
* Ensure that this dentry is invisible to d_find_alias().
|
||||
* Otherwise, it may be spliced into the tree by
|
||||
* d_materialise_unique if a parent directory from the same
|
||||
* filesystem gets mounted at a later time.
|
||||
* This again causes shrink_dcache_for_umount_subtree() to
|
||||
* Oops, since the test for IS_ROOT() will fail.
|
||||
*/
|
||||
spin_lock(&dcache_lock);
|
||||
list_del_init(&sb->s_root->d_alias);
|
||||
spin_unlock(&dcache_lock);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1475,7 +1475,7 @@ static int nfs_xdev_get_sb(struct file_system_type *fs_type, int flags,
|
||||
error = PTR_ERR(mntroot);
|
||||
goto error_splat_super;
|
||||
}
|
||||
if (mntroot->d_inode->i_op != &nfs_dir_inode_operations) {
|
||||
if (mntroot->d_inode->i_op != server->nfs_client->rpc_ops->dir_inode_ops) {
|
||||
dput(mntroot);
|
||||
error = -ESTALE;
|
||||
goto error_splat_super;
|
||||
|
@ -92,7 +92,6 @@ rpcrdma_convert_iovs(struct xdr_buf *xdrbuf, int pos,
|
||||
seg[n].mr_page = NULL;
|
||||
seg[n].mr_offset = xdrbuf->head[0].iov_base;
|
||||
seg[n].mr_len = xdrbuf->head[0].iov_len;
|
||||
pos += xdrbuf->head[0].iov_len;
|
||||
++n;
|
||||
}
|
||||
|
||||
@ -104,7 +103,6 @@ rpcrdma_convert_iovs(struct xdr_buf *xdrbuf, int pos,
|
||||
seg[n].mr_len = min_t(u32,
|
||||
PAGE_SIZE - xdrbuf->page_base, xdrbuf->page_len);
|
||||
len = xdrbuf->page_len - seg[n].mr_len;
|
||||
pos += len;
|
||||
++n;
|
||||
p = 1;
|
||||
while (len > 0) {
|
||||
@ -119,20 +117,15 @@ rpcrdma_convert_iovs(struct xdr_buf *xdrbuf, int pos,
|
||||
}
|
||||
}
|
||||
|
||||
if (pos < xdrbuf->len && xdrbuf->tail[0].iov_len) {
|
||||
if (xdrbuf->tail[0].iov_len) {
|
||||
if (n == nsegs)
|
||||
return 0;
|
||||
seg[n].mr_page = NULL;
|
||||
seg[n].mr_offset = xdrbuf->tail[0].iov_base;
|
||||
seg[n].mr_len = xdrbuf->tail[0].iov_len;
|
||||
pos += xdrbuf->tail[0].iov_len;
|
||||
++n;
|
||||
}
|
||||
|
||||
if (pos < xdrbuf->len)
|
||||
dprintk("RPC: %s: marshaled only %d of %d\n",
|
||||
__func__, pos, xdrbuf->len);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user