Skip to content

Commit

Permalink
SUNRPC reverting d03727b ("NFSv4 fix CLOSE not waiting for direct IO …
Browse files Browse the repository at this point in the history
…compeletion")

Reverting commit d03727b "NFSv4 fix CLOSE not waiting for
direct IO compeletion". This patch made it so that fput() by calling
inode_dio_done() in nfs_file_release() would wait uninterruptably
for any outstanding directIO to the file (but that wait on IO should
be killable).

The problem the patch was also trying to address was REMOVE returning
ERR_ACCESS because the file is still opened, is supposed to be resolved
by server returning ERR_FILE_OPEN and not ERR_ACCESS.

Signed-off-by: Olga Kornievskaia <[email protected]>
Signed-off-by: Anna Schumaker <[email protected]>
  • Loading branch information
olgakorn1 authored and amschuma-ntap committed Jul 17, 2020
1 parent 9122884 commit 65caafd
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 10 deletions.
13 changes: 4 additions & 9 deletions fs/nfs/direct.c
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,8 @@ static void nfs_direct_complete(struct nfs_direct_req *dreq)
{
struct inode *inode = dreq->inode;

inode_dio_end(inode);

if (dreq->iocb) {
long res = (long) dreq->error;
if (dreq->count != 0) {
Expand All @@ -278,10 +280,7 @@ static void nfs_direct_complete(struct nfs_direct_req *dreq)

complete(&dreq->completion);

igrab(inode);
nfs_direct_req_release(dreq);
inode_dio_end(inode);
iput(inode);
}

static void nfs_direct_read_completion(struct nfs_pgio_header *hdr)
Expand Down Expand Up @@ -411,10 +410,8 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
* generic layer handle the completion.
*/
if (requested_bytes == 0) {
igrab(inode);
nfs_direct_req_release(dreq);
inode_dio_end(inode);
iput(inode);
nfs_direct_req_release(dreq);
return result < 0 ? result : -EIO;
}

Expand Down Expand Up @@ -867,10 +864,8 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
* generic layer handle the completion.
*/
if (requested_bytes == 0) {
igrab(inode);
nfs_direct_req_release(dreq);
inode_dio_end(inode);
iput(inode);
nfs_direct_req_release(dreq);
return result < 0 ? result : -EIO;
}

Expand Down
1 change: 0 additions & 1 deletion fs/nfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ nfs_file_release(struct inode *inode, struct file *filp)
dprintk("NFS: release(%pD2)\n", filp);

nfs_inc_stats(inode, NFSIOS_VFSRELEASE);
inode_dio_wait(inode);
nfs_file_clear_open_context(filp);
return 0;
}
Expand Down

0 comments on commit 65caafd

Please sign in to comment.