From: Greg Kroah-Hartman Date: Thu, 23 Jul 2020 18:15:18 +0000 (+0200) Subject: 4.4-stable patches X-Git-Tag: v4.14.190~51 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8d32aed8d155ece1b04db9a1340fb9a988472ab1;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch --- diff --git a/queue-4.4/series b/queue-4.4/series index 0704bea9544..c8951fd39d9 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -6,3 +6,4 @@ xtensa-update-pos-in-cpuinfo_op.next.patch 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 +sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch diff --git a/queue-4.4/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch b/queue-4.4/sunrpc-reverting-d03727b248d0-nfsv4-fix-close-not-waiting-for-direct-io-compeletion.patch new file mode 100644 index 00000000000..4cf635cbe09 --- /dev/null +++ b/queue-4.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 +@@ -385,6 +385,8 @@ static void nfs_direct_complete(struct n + if (write) + nfs_zap_mapping(inode, inode->i_mapping); + ++ inode_dio_end(inode); ++ + if (dreq->iocb) { + long res = (long) dreq->error; + if (!res) +@@ -394,10 +396,7 @@ static void nfs_direct_complete(struct n + + complete_all(&dreq->completion); + +- igrab(inode); + nfs_direct_req_release(dreq); +- inode_dio_end(inode); +- iput(inode); + } + + static void nfs_direct_readpage_release(struct nfs_page *req) +@@ -538,10 +537,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; + } + +@@ -942,10 +939,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; + }