From: Greg Kroah-Hartman Date: Thu, 23 Jul 2020 18:15:46 +0000 (+0200) Subject: 4.14-stable patches X-Git-Tag: v4.14.190~49 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=06b205d600eb925e783fa10c9be6b1cf82713c41;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch --- diff --git a/queue-4.14/series b/queue-4.14/series index df5eab1d883..408015a8aab 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -9,3 +9,4 @@ drivers-net-wan-lapbether-fixed-the-value-of-hard_he.patch net-sky2-initialize-return-of-gm_phy_read.patch drm-nouveau-i2c-g94-increase-nv_pmgr_dp_auxctl_trans.patch irqdomain-treewide-keep-firmware-node-unconditionall.patch +sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch diff --git a/queue-4.14/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch b/queue-4.14/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch new file mode 100644 index 00000000000..edc532829ba --- /dev/null +++ b/queue-4.14/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 +@@ -396,6 +396,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) { +@@ -407,10 +409,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) +@@ -540,10 +539,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; + } + +@@ -960,10 +957,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 +@@ -82,7 +82,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; + }