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; + + nfs_pageio_complete_read(&desc.pgio); } } -- 1.8.3.1