From 69721cf81ef1330b7107ddf95fe280b874a5add8 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 23 Jul 2020 20:16:30 +0200 Subject: [PATCH] 5.7-stable patches added patches: sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch --- queue-5.7/series | 1 + ...ot-waiting-for-direct-io-compeletion.patch | 84 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 queue-5.7/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch diff --git a/queue-5.7/series b/queue-5.7/series index 00e6793c394..7964cc31e42 100644 --- a/queue-5.7/series +++ b/queue-5.7/series @@ -23,3 +23,4 @@ drm-amd-display-check-dmcu-exists-before-loading.patch drm-amd-display-add-dmcub-check-on-renoir.patch dm-mpath-pass-io-start-time-to-path-selector.patch dm-do-not-use-waitqueue-for-request-based-dm.patch +sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch diff --git a/queue-5.7/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch b/queue-5.7/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch new file mode 100644 index 00000000000..72577a82f54 --- /dev/null +++ b/queue-5.7/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch @@ -0,0 +1,84 @@ +From 65caafd0d2145d1dd02072c4ced540624daeab40 Mon Sep 17 00:00:00 2001 +From: Olga Kornievskaia +Date: Wed, 15 Jul 2020 13:04:15 -0400 +Subject: SUNRPC reverting d03727b248d0 ("NFSv4 fix CLOSE not waiting for direct IO compeletion") + +From: Olga Kornievskaia + +commit 65caafd0d2145d1dd02072c4ced540624daeab40 upstream. + +Reverting commit d03727b248d0 "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 +Signed-off-by: Anna Schumaker +Signed-off-by: Greg Kroah-Hartman + +--- + fs/nfs/direct.c | 13 ++++--------- + fs/nfs/file.c | 1 - + 2 files changed, 4 insertions(+), 10 deletions(-) + +--- a/fs/nfs/direct.c ++++ b/fs/nfs/direct.c +@@ -267,6 +267,8 @@ static void nfs_direct_complete(struct n + { + struct inode *inode = dreq->inode; + ++ inode_dio_end(inode); ++ + if (dreq->iocb) { + long res = (long) dreq->error; + if (dreq->count != 0) { +@@ -278,10 +280,7 @@ static void nfs_direct_complete(struct n + + 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) +@@ -411,10 +410,8 @@ static ssize_t nfs_direct_read_schedule_ + * 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; + } + +@@ -867,10 +864,8 @@ static ssize_t nfs_direct_write_schedule + * 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; + } + +--- a/fs/nfs/file.c ++++ b/fs/nfs/file.c +@@ -83,7 +83,6 @@ nfs_file_release(struct inode *inode, st + dprintk("NFS: release(%pD2)\n", filp); + + nfs_inc_stats(inode, NFSIOS_VFSRELEASE); +- inode_dio_wait(inode); + nfs_file_clear_open_context(filp); + return 0; + } -- 2.47.3