Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp3920209pxv; Mon, 28 Jun 2021 16:41:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxPv+ZG8M0wKfkIEn7TEabbctHQmAzyyAkRXJFQndZa6488NE3nz1vaErvNf2b0QaV6cCgf X-Received: by 2002:a05:6638:d4b:: with SMTP id d11mr1762343jak.112.1624923705159; Mon, 28 Jun 2021 16:41:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624923705; cv=none; d=google.com; s=arc-20160816; b=cKqKk3BDuUiB7omQ9d7IQpuFCCfl7M3kv+Q1d+ODULY1IGVDg4ySPevnG8tL5bypOg Oz5qltG2wzqt01VLlGfErAz2q3sN/hEG9C3Tj9Vgec2/obxxkSeks8cA5gzW+vnBhcVF mVzjCUMWnJcv3B6qaIGe+pt9iom8waPU+mbhW+vcBK/cL6jHg9GHG6qHLyk6PCJ+tq3A mWs1GpP2+GxhpnLhKR0rZJbQGJJcEmsz1HIHc8X7U6T9fA/gwIkvNphd2a0rL2j0XchX oFGISTMbIar4Y6M/YdHLJJsIaPct7hu4iSdPj6MYh9K76S5AsBUyUC7fz7x0J8UTIBgh DbEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=Nx6K4Fan5/I+PMlmi1HcnjMHs0gytLj38/acWjz1O7U=; b=j3yNLvE6KmsNdhgW/OjSI06ovfpC5aFAedZ3XqVDSfI2JWcEeyfP3XdEEJxBSeMkzT dshwPvhLXgUQ7VCLtXmemzPq/kwE5fyXR/u4syI+66yf2dG94ykGSHQRcS7WRUj6DJRy QHXutbyzxMAN+GlTMgBMUyvM04Gmnz0mdBh56Z4+mBAO1UyUXUdye1MafQETn9j7NTpY tG9H1ROPd4VHkqsLsmaB6ytW0yDXNfuGZn9sK826LU9CkrDmqeOLYpf3rv3k7X5crkVg PU+4nyCu6H6CLYJI9r3OrOpwrgPf+BZnv/I0XqtsXLuS7D/wQ9ePku9kN54kC8fkEHJ7 IEEQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=CXsLM4u9; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k11si13181475jav.18.2021.06.28.16.41.33; Mon, 28 Jun 2021 16:41:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=CXsLM4u9; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234236AbhF1VPU (ORCPT + 99 others); Mon, 28 Jun 2021 17:15:20 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:48399 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237634AbhF1VPT (ORCPT ); Mon, 28 Jun 2021 17:15:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1624914771; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Nx6K4Fan5/I+PMlmi1HcnjMHs0gytLj38/acWjz1O7U=; b=CXsLM4u9OJavSiNGbaoPVRn5laVTe5V6DUvoMes4XEhu0mFLPHfv+y3PBKL43i/1HeQzGd RIy0zLHdg30dYJ3e1KIHC74ibAosVmBpcMlYEokRbHMHETMSkQPtSJxqGPwr21yB9lf7dV w2bYELdYrx/3/5V9fjZZrg4SiCkfg6M= Received: from mail-ej1-f70.google.com (mail-ej1-f70.google.com [209.85.218.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-470-dJZzS2M7MQ-YLB33YhAtnw-1; Mon, 28 Jun 2021 17:12:50 -0400 X-MC-Unique: dJZzS2M7MQ-YLB33YhAtnw-1 Received: by mail-ej1-f70.google.com with SMTP id g18-20020a1709063952b02904c6c7b11c45so295201eje.2 for ; Mon, 28 Jun 2021 14:12:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Nx6K4Fan5/I+PMlmi1HcnjMHs0gytLj38/acWjz1O7U=; b=Z2kN/DhC3YXTT8iWeL/GMXgLyeuuuejkqGX8qNRA0/wj+wzjaYd871vAXiY8yvUdTY SW+pdU74NH5R1PFyW6ofjBvZDqfEjgL7DOmiZ4vYHRd2yL52NYRdjEDzt+Ybx+YKe1yx +SJmTuawVxt18a6Z5DQXbZVCM1KiC8bckToxQEw4+Tcz5mpw2C2z69EPUrynzXK9joRZ Lp4EFI+Hg9flXFgsekNkeK0r+va9BmDDBakrWYBdeh3lKiX98mPycxps5q+98wcRJIXu xbNIrW8vceZb/XQodqxHw0cAy1mUBnGHOskZV//wuLOdWAzcefhiYQXyQIDsE//n1h4e mdYA== X-Gm-Message-State: AOAM532IbpVfredl3CTuY8ns8VCM7ZtP7v2z25J0vqHEHY4Dzskblq21 AArrlDILKqQT9NseJbYH0EvQyK/yg0aOdkyRNYX8C163nVj9TBTr464C01bNRqguJ/YyA4Y3RdP S9NtFiUzhJY6eWrj4gTFKlhyN+QMBU7XcpDbo X-Received: by 2002:a05:6402:b77:: with SMTP id cb23mr35184842edb.360.1624914768862; Mon, 28 Jun 2021 14:12:48 -0700 (PDT) X-Received: by 2002:a05:6402:b77:: with SMTP id cb23mr35184827edb.360.1624914768630; Mon, 28 Jun 2021 14:12:48 -0700 (PDT) MIME-Version: 1.0 References: <1624901943-20027-1-git-send-email-dwysocha@redhat.com> <1624901943-20027-5-git-send-email-dwysocha@redhat.com> In-Reply-To: From: David Wysochanski Date: Mon, 28 Jun 2021 17:12:11 -0400 Message-ID: Subject: Re: [PATCH 4/4] NFS: Fix fscache read from NFS after cache error To: Trond Myklebust Cc: "anna.schumaker@netapp.com" , "linux-nfs@vger.kernel.org" Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org On Mon, Jun 28, 2021 at 3:09 PM Trond Myklebust wrote: > > 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 > > --- > > 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? > Maybe the below patch is what you had in mind? That way if fscache is enabled, nfs_readpage() should behave the same way as if it's not, for the case where an IO error occurs in the NFS read completion path. If we call into fscache and we get back that the IO has been submitted, wait until it is completed, so we'll catch any IO errors in the read completion path. This does not solve the "catch the internal errors", IOW, the ones that show up as pg_error, that will probably require copying pg_error into nfs_open_context.error field. diff --git a/fs/nfs/read.c b/fs/nfs/read.c index 78b9181e94ba..28e3318080e0 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c @@ -357,13 +357,13 @@ int nfs_readpage(struct file *file, struct page *page) } else desc.ctx = get_nfs_open_context(nfs_file_open_context(file)); + xchg(&desc.ctx->error, 0); if (!IS_SYNC(inode)) { ret = nfs_readpage_from_fscache(desc.ctx, inode, page); if (ret == 0) - goto out; + goto out_wait; } - xchg(&desc.ctx->error, 0); nfs_pageio_init_read(&desc.pgio, inode, false, &nfs_async_read_completion_ops); @@ -373,6 +373,7 @@ int nfs_readpage(struct file *file, struct page *page) nfs_pageio_complete_read(&desc.pgio); 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) > > + > > + nfs_pageio_complete_read(&desc.pgio); > > } > > } > > > > -- > Trond Myklebust > Linux NFS client maintainer, Hammerspace > trond.myklebust@hammerspace.com > >