From: Greg Kroah-Hartman Date: Tue, 20 Jul 2021 09:55:06 +0000 (+0200) Subject: 5.12-stable patches X-Git-Tag: v5.13.4~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8f1534e2f7bcdf3b37b28073d5efec0ef0f5cc6f;p=thirdparty%2Fkernel%2Fstable-queue.git 5.12-stable patches added patches: nfs-ensure-nfs_readpage-returns-promptly-when-internal-error-occurs.patch --- diff --git a/queue-5.12/nfs-ensure-nfs_readpage-returns-promptly-when-internal-error-occurs.patch b/queue-5.12/nfs-ensure-nfs_readpage-returns-promptly-when-internal-error-occurs.patch new file mode 100644 index 00000000000..ced9d240faa --- /dev/null +++ b/queue-5.12/nfs-ensure-nfs_readpage-returns-promptly-when-internal-error-occurs.patch @@ -0,0 +1,39 @@ +From e0340f16a08d031de54ed91d26f57c9a966a776a Mon Sep 17 00:00:00 2001 +From: Dave Wysochanski +Date: Tue, 29 Jun 2021 05:11:28 -0400 +Subject: NFS: Ensure nfs_readpage returns promptly when internal error occurs + +From: Dave Wysochanski + +commit e0340f16a08d031de54ed91d26f57c9a966a776a upstream. + +A previous refactoring of nfs_readpage() might end up calling +wait_on_page_locked_killable() even if readpage_async_filler() failed +with an internal error and pg_error was non-zero (for example, if +nfs_create_request() failed). In the case of an internal error, +skip over wait_on_page_locked_killable() as this is only needed +when the read is sent and an error occurs during completion handling. + +Signed-off-by: Dave Wysochanski +Signed-off-by: Trond Myklebust +Signed-off-by: Greg Kroah-Hartman +--- + fs/nfs/read.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/fs/nfs/read.c ++++ b/fs/nfs/read.c +@@ -374,10 +374,10 @@ int nfs_readpage(struct file *file, stru + &nfs_async_read_completion_ops); + + ret = readpage_async_filler(&desc, page); ++ if (ret) ++ goto out; + +- if (!ret) +- nfs_pageio_complete_read(&desc.pgio, inode); +- ++ nfs_pageio_complete_read(&desc.pgio, inode); + ret = desc.pgio.pg_error < 0 ? desc.pgio.pg_error : 0; + if (!ret) { + ret = wait_on_page_locked_killable(page); diff --git a/queue-5.12/nfs-fix-fscache-read-from-nfs-after-cache-error.patch b/queue-5.12/nfs-fix-fscache-read-from-nfs-after-cache-error.patch index bf6258bd4fe..6664f804cf9 100644 --- a/queue-5.12/nfs-fix-fscache-read-from-nfs-after-cache-error.patch +++ b/queue-5.12/nfs-fix-fscache-read-from-nfs-after-cache-error.patch @@ -24,16 +24,15 @@ Fixes: 1e83b173b266 ("NFS: Add nfs_pageio_complete_read() and remove nfs_readpag Signed-off-by: Dave Wysochanski Signed-off-by: Trond Myklebust Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman --- - fs/nfs/fscache.c | 18 +++++++++++++----- - fs/nfs/read.c | 5 +++-- + fs/nfs/fscache.c | 18 +++++++++++++----- + fs/nfs/read.c | 5 +++-- 2 files changed, 16 insertions(+), 7 deletions(-) -diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c -index c4c021c6ebbd..d743629e05e1 100644 --- a/fs/nfs/fscache.c +++ b/fs/nfs/fscache.c -@@ -385,12 +385,15 @@ static void nfs_readpage_from_fscache_complete(struct page *page, +@@ -385,12 +385,15 @@ static void nfs_readpage_from_fscache_co "NFS: readpage_from_fscache_complete (0x%p/0x%p/%d)\n", page, context, error); @@ -54,7 +53,7 @@ index c4c021c6ebbd..d743629e05e1 100644 } /* -@@ -405,6 +408,11 @@ int __nfs_readpage_from_fscache(struct nfs_open_context *ctx, +@@ -405,6 +408,11 @@ int __nfs_readpage_from_fscache(struct n "NFS: readpage_from_fscache(fsc:%p/p:%p(i:%lx f:%lx)/0x%p)\n", nfs_i_fscache(inode), page, page->index, page->flags, inode); @@ -66,11 +65,9 @@ index c4c021c6ebbd..d743629e05e1 100644 ret = fscache_read_or_alloc_page(nfs_i_fscache(inode), page, nfs_readpage_from_fscache_complete, -diff --git a/fs/nfs/read.c b/fs/nfs/read.c -index d2b6dce1f99f..4ca50b70a7b0 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c -@@ -363,13 +363,13 @@ int nfs_readpage(struct file *file, struct page *page) +@@ -363,13 +363,13 @@ int nfs_readpage(struct file *file, stru } else desc.ctx = get_nfs_open_context(nfs_file_open_context(file)); @@ -86,14 +83,11 @@ index d2b6dce1f99f..4ca50b70a7b0 100644 nfs_pageio_init_read(&desc.pgio, inode, false, &nfs_async_read_completion_ops); -@@ -379,6 +379,7 @@ int nfs_readpage(struct file *file, struct page *page) - nfs_pageio_complete_read(&desc.pgio, inode); +@@ -379,6 +379,7 @@ int nfs_readpage(struct file *file, stru + nfs_pageio_complete_read(&desc.pgio, inode); ret = desc.pgio.pg_error < 0 ? desc.pgio.pg_error : 0; +out_wait: if (!ret) { ret = wait_on_page_locked_killable(page); if (!PageUptodate(page) && !ret) --- -2.30.2 - diff --git a/queue-5.12/series b/queue-5.12/series index 7dd76aceae7..8d67db1462c 100644 --- a/queue-5.12/series +++ b/queue-5.12/series @@ -214,6 +214,7 @@ nfsd-reduce-contention-for-the-nfsd_file-nf_rwsem.patch alsa-isa-fix-error-return-code-in-snd_cmi8330_probe.patch vdpa-mlx5-clear-vq-ready-indication-upon-device-rese.patch virtio-mem-don-t-read-big-block-size-in-sub-block-mo.patch +nfs-ensure-nfs_readpage-returns-promptly-when-internal-error-occurs.patch nfs-fix-fscache-read-from-nfs-after-cache-error.patch nfsv4-pnfs-fix-the-layout-barrier-update.patch nfsv4-pnfs-fix-layoutget-behaviour-after-invalidatio.patch