From patchwork Sun May 20 11:45:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 10413351 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0864A6032C for ; Sun, 20 May 2018 11:45:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E1FD1286F6 for ; Sun, 20 May 2018 11:45:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D666D2872C; Sun, 20 May 2018 11:45:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5800E286F6 for ; Sun, 20 May 2018 11:45:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751045AbeETLpf (ORCPT ); Sun, 20 May 2018 07:45:35 -0400 Received: from mail.kernel.org ([198.145.29.99]:51538 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750928AbeETLpe (ORCPT ); Sun, 20 May 2018 07:45:34 -0400 Received: from tleilax.poochiereds.net (cpe-71-70-156-158.nc.res.rr.com [71.70.156.158]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CADFF2075C; Sun, 20 May 2018 11:45:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1526816733; bh=tZDoyqXdIcvPO+zO9I4/UBlEEQ7glQeBOXqY+1iF/R8=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=FB1GuG233AB+YAS+vyCSviIQb3CcQXNxJjyU6Z2+UH4Fm4sqi9QTpMdOiiNLLFOhl yoHQORAzeD5AwlNxFzW+BFwCec4nPKaKFgPWpeQgHDaszlxjJoZZTHaZxuKMdtVNdt ICp7NNUol43wCdniRP8ko0djK+N2ZASBRF5Oc+D8= Message-ID: Subject: Re: [PATCH] fs: clear writeback errors in inode_init_always From: Jeff Layton To: "Theodore Y. Ts'o" , "Darrick J. Wong" Cc: Matthew Wilcox , linux-fsdevel@vger.kernel.org, fstests@vger.kernel.org, xfs Date: Sun, 20 May 2018 07:45:31 -0400 In-Reply-To: <20180519231944.GB23448@thunk.org> References: <20180518225037.GA26206@thunk.org> <630faadb74f608aa5a42649b81657e8b62d46bc3.camel@kernel.org> <20180519152700.GB4507@magnolia> <20180519231944.GB23448@thunk.org> X-Mailer: Evolution 3.28.2 (3.28.2-1.fc28) Mime-Version: 1.0 Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On Sat, 2018-05-19 at 19:19 -0400, Theodore Y. Ts'o wrote: > On Sat, May 19, 2018 at 08:27:00AM -0700, Darrick J. Wong wrote: > > From: Darrick J. Wong > > > > In inode_init_always(), we clear the inode mapping flags, which clears > > any retained error (AS_EIO, AS_ENOSC) bits. Unfortunately, we do not > > also clear wb_err, which means that old mapping errors can leak through > > to new inodes. > > > > This is crucial for the XFS inode allocation path because we recycle old > > in-core inodes and we do not want error state from an old file to leak > > into the new file. This bug was discovered by running generic/036 and > > generic/047 in a loop and noticing that the EIOs generated by the > > collision of direct and buffered writes in generic/036 would survive the > > remount between 036 and 047, and get reported to the fsyncs (on > > different files on a reformatted fs!) in generic/047. > > > > Since we're changing the semantics of inode_init_always, we must also > > change xfs_reinit_inode to retain the writeback error state when we go > > to recover an inode that has been torn down in the vfs but not yet > > disposed of by XFS. > > > > Signed-off-by: Darrick J. Wong > > This may fix the generic/047 failure, but alas, it does not address > the shared/298 failure. > > Jeff's theory that we may need to clear the errseq_t information after > detaching the loop device makes sense to me; and in the case of the > loop device, we wouldn't be initializing the inode, so your patch > wouldn't do anything about that particular case. > > I poked at this a bit this morning and found that if I ran generic/361 twice in a row that I'd see a failure similar to what you were seeing. This patch seems to fix it for me. Ted, could you test this against your reproducer? If this works for you I'll plan to flesh out the patch description and get this into -next and eventually to Linus before the next release. Thanks, Jeff -------------------------8<-------------------- [PATCH] loop: clear wb_err in bd_inode when detaching backing file Signed-off-by: Jeff Layton --- drivers/block/loop.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 5d4e31655d96..55cf554bc914 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1068,6 +1068,7 @@ static int loop_clr_fd(struct loop_device *lo) if (bdev) { bdput(bdev); invalidate_bdev(bdev); + bdev->bd_inode->i_mapping->wb_err = 0; } set_capacity(lo->lo_disk, 0); loop_sysfs_exit(lo);