On Mon, 2021-06-28 at 13:39 -0400, Dave Wysochanski wrote: > Earlier commits refactored some NFS read code and removed > nfs_readpage_async(), but neglected to properly fixup > nfs_readpage_from_fscache_complete(). The code path is > only hit when something unusual occurs with the cachefiles > backing filesystem, such as an IO error or while a cookie > is being invalidated. > > Signed-off-by: Dave Wysochanski <dwysocha@xxxxxxxxxx> > --- > fs/nfs/fscache.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c > index c4c021c6ebbd..d308cb7e1dd4 100644 > --- a/fs/nfs/fscache.c > +++ b/fs/nfs/fscache.c > @@ -381,15 +381,25 @@ static void > nfs_readpage_from_fscache_complete(struct page *page, > void *context, > int error) > { > + struct nfs_readdesc desc; > + struct inode *inode = page->mapping->host; > + > dfprintk(FSCACHE, > "NFS: readpage_from_fscache_complete > (0x%p/0x%p/%d)\n", > page, context, error); > > - /* if the read completes with an error, we just unlock the > page and let > - * the VM reissue the readpage */ > if (!error) { > SetPageUptodate(page); > unlock_page(page); > + } else { > + desc.ctx = context; > + nfs_pageio_init_read(&desc.pgio, inode, false, > + &nfs_async_read_completion_ops); > + error = readpage_async_filler(&desc, page); > + if (error) > + return; This code path can clearly fail too. Why can we not fix this code to allow it to return that reported error so that we can handle the failure case in nfs_readpage() instead of dead-ending here? > + > + nfs_pageio_complete_read(&desc.pgio); > } > } > -- Trond Myklebust Linux NFS client maintainer, Hammerspace trond.myklebust@xxxxxxxxxxxxxxx