From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from imap.thunk.org ([74.207.234.97]:56856 "EHLO imap.thunk.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752280AbeESXTz (ORCPT ); Sat, 19 May 2018 19:19:55 -0400 Date: Sat, 19 May 2018 19:19:44 -0400 From: "Theodore Y. Ts'o" To: "Darrick J. Wong" Cc: Jeff Layton , Matthew Wilcox , linux-fsdevel@vger.kernel.org, fstests@vger.kernel.org, xfs Subject: Re: [PATCH] fs: clear writeback errors in inode_init_always Message-ID: <20180519231944.GB23448@thunk.org> References: <20180518225037.GA26206@thunk.org> <630faadb74f608aa5a42649b81657e8b62d46bc3.camel@kernel.org> <20180519152700.GB4507@magnolia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180519152700.GB4507@magnolia> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: 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. - Ted