diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-09-04 15:17:53 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-09-04 16:54:29 -0400 |
commit | 4eae50143bcbfda819c650b7ed6739f3b6338ffc (patch) | |
tree | 61a335f9bcd639676317891587edda76c249fe2a /fs | |
parent | 5cf9d70659594e1a75b34d18619d0bb6e0cbbafa (diff) |
Revert "NFS: Make close(2) asynchronous when closing NFS O_DIRECT files"
This reverts commit f895c53f8ace3c3e49ebf9def90e63fc6d46d2bf.
This commit causes a NFSv4 regression in that close()+unlink() can end
up failing. The reason is that we no longer have a guarantee that the
CLOSE has completed on the server, meaning that the subsequent call to
REMOVE may fail with NFS4ERR_FILE_OPEN if the server implements Windows
unlink() semantics.
Reported-by: <Olga Kornievskaia <aglo@umich.edu>
Cc: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfs/inode.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 6307d8de103d..326d9e10d833 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -853,6 +853,11 @@ void put_nfs_open_context(struct nfs_open_context *ctx) | |||
853 | } | 853 | } |
854 | EXPORT_SYMBOL_GPL(put_nfs_open_context); | 854 | EXPORT_SYMBOL_GPL(put_nfs_open_context); |
855 | 855 | ||
856 | static void put_nfs_open_context_sync(struct nfs_open_context *ctx) | ||
857 | { | ||
858 | __put_nfs_open_context(ctx, 1); | ||
859 | } | ||
860 | |||
856 | /* | 861 | /* |
857 | * Ensure that mmap has a recent RPC credential for use when writing out | 862 | * Ensure that mmap has a recent RPC credential for use when writing out |
858 | * shared pages | 863 | * shared pages |
@@ -908,7 +913,7 @@ void nfs_file_clear_open_context(struct file *filp) | |||
908 | spin_lock(&inode->i_lock); | 913 | spin_lock(&inode->i_lock); |
909 | list_move_tail(&ctx->list, &NFS_I(inode)->open_files); | 914 | list_move_tail(&ctx->list, &NFS_I(inode)->open_files); |
910 | spin_unlock(&inode->i_lock); | 915 | spin_unlock(&inode->i_lock); |
911 | __put_nfs_open_context(ctx, filp->f_flags & O_DIRECT ? 0 : 1); | 916 | put_nfs_open_context_sync(ctx); |
912 | } | 917 | } |
913 | } | 918 | } |
914 | 919 | ||