diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-12-17 16:36:17 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-12-17 16:36:17 -0500 |
commit | 2cc3a8f6ac0fb1e6095a47001d31aadcf9722bde (patch) | |
tree | afcc572acff2548cdabdfb0ec488508e1864daf1 /fs | |
parent | 23afc5c67588c92a062b4828a97b119755dffb51 (diff) | |
parent | 78f5815368837ae7e3a0d3709c9f95f74e4d8537 (diff) |
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...
Diffstat (limited to 'fs')
-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 |
4 files changed, 15 insertions, 6 deletions
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; |