From: Greg Kroah-Hartman Date: Thu, 23 Jul 2020 18:16:15 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v4.14.190~47 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2194b0695a466daa5c906f9269868b85eea51b79;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch --- diff --git a/queue-5.4/series b/queue-5.4/series index 7064e40945d..056aa040d3e 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -23,3 +23,4 @@ dmabuf-use-spinlock-to-access-dmabuf-name.patch drm-amd-display-check-dmcu-exists-before-loading.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.4/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch b/queue-5.4/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch new file mode 100644 index 00000000000..c33479659bb --- /dev/null +++ b/queue-5.4/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 +@@ -367,6 +367,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) { +@@ -378,10 +380,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) +@@ -511,10 +510,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; + } + +@@ -926,10 +923,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; + }