From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8910DC4345F for ; Fri, 26 Apr 2024 11:43:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EB9786B0089; Fri, 26 Apr 2024 07:43:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E68266B008A; Fri, 26 Apr 2024 07:43:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D58186B008C; Fri, 26 Apr 2024 07:43:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id B9F906B0089 for ; Fri, 26 Apr 2024 07:43:29 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 3F479A1EDA for ; Fri, 26 Apr 2024 11:43:29 +0000 (UTC) X-FDA: 82051497738.05.88D1376 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf20.hostedemail.com (Postfix) with ESMTP id DDB011C0005 for ; Fri, 26 Apr 2024 11:43:25 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=BxW0Hd2d; spf=pass (imf20.hostedemail.com: domain of jlayton@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=jlayton@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714131806; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=NcZuoQ+heuoFH+QpaWtr6GiOYTc9kLP4Q6+d28VtaDg=; b=C3uNzSKGTHmskdtfnHFHp3/99m/2oW23EuMCsUfMCs+gZ+CGAyphghw2mIoV5saVHxpOlp pMZ7uQCfcVe7mbc4+XZ3T+9M35GMhBIEG/KVY2MXiFTgATyL30Il7EOhWeF5FP5M3EetqY 2ENvKEdUM5XRCk5+05Bye2fAGIY/GNw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714131806; a=rsa-sha256; cv=none; b=uReQGIMvIvZeyT6iHxO6zoBVJuVFUQpLZ+kSRbyPr7kCY0+PKZypY3cdwi0+N04lahyS5S c3g/wd+I7oz33kf0m+DOuhFFLgTAmUZ/a3CERqep/GZT25aojWmmq63xvVWkPiu/QhhIOQ oEWLa4v4EWRfxsmjpfdPWNumBeOyrJs= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=BxW0Hd2d; spf=pass (imf20.hostedemail.com: domain of jlayton@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=jlayton@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id E4B6DCE1C33; Fri, 26 Apr 2024 11:43:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1BCFC113CD; Fri, 26 Apr 2024 11:43:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714131801; bh=W2Yi4b8UUflYNjFBhKm+kSTDx5VFRPzQrHLBTed65Eo=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=BxW0Hd2dK2F/YPPiVT1xiQG5GFCiDj/hJDpVwiGyocQgdwzxvWmYRYTgWcRy9IkbN 5aRPbbergf3asX5vbt3nG/jmaKq5DM6kYtiEEKlQKHHgO/OBH2gUyAh9CG/R09PVdU WPv/8XRaP0occLuKeiMMsLQ4TheW8WKQQkGABFz7zOpkra4Y1lm0T4iCntWi/6gCj5 /wzXg1efvKb0JjUg8c2/2T3TJKX+ldf8I6IJ2xD1JW97G8HJWIsOugwKTiApeUgkXl mJHH9LPsbfTmuY4ZCA4l9qz5Gg8b8BHu/gvoKR+DEHRNZv4K3EoHs9FDzjHKS4PMPT eqHQZMURSPdBQ== Message-ID: <873caf750d495a1850839f30fb120be7c6b5fd36.camel@kernel.org> Subject: Re: [PATCH] netfs: Fix the pre-flush when appending to a file in writethrough mode From: Jeffrey Layton To: David Howells , Christian Brauner Cc: Eric Van Hensbergen , Latchesar Ionkov , Dominique Martinet , Christian Schoenebeck , Marc Dionne , netfs@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, v9fs@lists.linux.dev, linux-afs@lists.infradead.org, linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org Date: Fri, 26 Apr 2024 07:43:18 -0400 In-Reply-To: <2150448.1714130115@warthog.procyon.org.uk> References: <2150448.1714130115@warthog.procyon.org.uk> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.52.0 (3.52.0-1.fc40app1) MIME-Version: 1.0 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: DDB011C0005 X-Rspam-User: X-Stat-Signature: kagrgbww4h9khpftjerifpjct7c6bdtd X-HE-Tag: 1714131805-887846 X-HE-Meta: U2FsdGVkX19HWqQUg1KaxxgpQZp40ei6xPQev+AKyQaCyu/sSJRPmQilSbrcE4mWEVxE96N+glupE5lV9Ei4lSGpe18CaKhI5lNxvHWP+JvNEzfiBxj6nS3JNeCKhPqX6hPd9gg7IX0a0xaQ8VCe8XAwWSJtX0Ik4rHf8vDHSLNOmC82gQ26tvlf0ckpIrCrvSTDHj2qQjmkRNyHHweoiiGyTjl/8FGxKKwQoA1nCQUwxjADZ4bcO7akuF+eS3AivwoIHFbM8kLm9Km2F3g1l4VcZ7TGLwSqUt+ZJUh1iCCeA9/FKfI2cqPsVRHPqy/tMI86TIPhxK6nVuoXYz0vPUx68w9bH9R99BO8KzcioLwaadpjPuZW+q8lhv4kdoKkevWp02DuKADezkiqPUcMb4xP1iMhR/Lo0c8oTrsO7F8b6DBbQieD5btkZjT0yn3HIn9uln1vjT3ei+1v51u/neK8+W5hkzvahKfkKAj2yTiusDSQrJxM/GT7HyyiudM5uClnyfza6lzwGotWs0w0SxH1/ed6WdV22AvdivqDTO8xKqWpKcd9ucpTH3vPOVgnRDxLl69aInDKc80kRSfqmY5MqU+DQn4p/qEwVnzVr3hV19JKntZtWbywxel0hekAwqzes9aeYbI0LGDdeuJkpw6Pb1afnV4YyXRLtBNp9r5hwWk/yN4GskBDY6nrzmsEK7cw+UP7E5hkHZ3jgJS6qSbv4Hia3kAYjhuiT7/UFL/PDnCQ4KyqizmGHrr7IZNnXhvniMWcQf/DPzqGHWjBzgojTMqdUj8uSycAW8DHwYMkRGNewwB8KVM0lfKGoLiwBeS6pyu+smztpZKRHFVpEODtRyQUs80uXBFzZkvtOwm8zB2dCcFYGLr8d58OgSQowLUHc5MbKrJLs2ikeyFoa9xB7d2q2zdX6clJp8nnSKrLFYwcJ5B0j1Y4G7CUYGsEitGmRf2Nn2bZ3mbCstK oVn5j5xH 6LkfkuGfz2lVL3evRcmqcAkHENjp5V5ZawroBowZ+caUwA2zUwBGcqykAnXtuDAiwg7l0xNkRodgWa5qxHPTEmCzI0/kNehBIzdFFjqXOhpK3MNRxwacMv6b238H5FTfoCbZNnpNPOlHRoQ003fYAm6kcKqd0Jm4KPH55h0twyLTKlAZnTJB/YKfIxJBmBPz5YPMwr3FZ8333vAmaIUK0SiBKBYr8YbAuTpYp1ceqaivNLVQ0VArzPPGca8ca7iLJ5Y6BRySAWFRVbNSl7TM6LSp58e9tdQhuT2+kNFBvQHsLIBI4I4kvb4IH3JToqTLEDiuat6STCSbE2efGjficTYrJrRS975pYFPSGjTDDT/TP0z1Hu/BCMUGrXmrXGZJDuAksdvWLgXQvyi/vOKBZb3KM2jrvjd2J/ia+sW2azBuFRXpX7LH+KWf9AoiuzZP4+0bAJdnJVn8uiH82ikV0BPdXMXKcToYNnFV+QM7wkPLILneGjRvoqY6QmEwtIAzyGd5/3YuSZAD877UcWBs6aKrpVZiyyka8V/kz6vZIo6JFzAWKIWvMSLMtd0i7LRv/rUkIkYZaXLe7tkeKcc2+VwiO+rWEcYynKvGvHcLzL2wRCeVR2KXkB4DYEoVZCyIeCIXjqqAZsGXthn6sk6qNS4ehRg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, 2024-04-26 at 12:15 +0100, David Howells wrote: > In netfs_perform_write(), when the file is marked NETFS_ICTX_WRITETHROUGH > or O_*SYNC or RWF_*SYNC was specified, write-through caching is performed > on a buffered file. When setting up for write-through, we flush any > conflicting writes in the region and wait for the write to complete, > failing if there's a write error to return. >=20 > The issue arises if we're writing at or above the EOF position because we > skip the flush and - more importantly - the wait. This becomes a problem > if there's a partial folio at the end of the file that is being written o= ut > and we want to make a write to it too. Both the already-running write an= d > the write we start both want to clear the writeback mark, but whoever is > second causes a warning looking something like: >=20 > ------------[ cut here ]------------ > R=3D00000012: folio 11 is not under writeback > WARNING: CPU: 34 PID: 654 at fs/netfs/write_collect.c:105 > ... > CPU: 34 PID: 654 Comm: kworker/u386:27 Tainted: G S ... > ... > Workqueue: events_unbound netfs_write_collection_worker > ... > RIP: 0010:netfs_writeback_lookup_folio >=20 > Fix this by making the flush-and-wait unconditional. It will do nothing = if > there are no folios in the pagecache and will return quickly if there are > no folios in the region specified. >=20 > Further, move the WBC attachment above the flush call as the flush is goi= ng > to attach a WBC and detach it again if it is not present - and since we > need one anyway we might as well share it. >=20 > Fixes: 41d8e7673a77 ("netfs: Implement a write-through caching option") > Reported-by: kernel test robot > Closes: https://lore.kernel.org/oe-lkp/202404161031.468b84f-oliver.sang@i= ntel.com > Signed-off-by: David Howells > cc: Eric Van Hensbergen > cc: Latchesar Ionkov > cc: Dominique Martinet > cc: Christian Schoenebeck > cc: Marc Dionne > cc: netfs@lists.linux.dev > cc: linux-fsdevel@vger.kernel.org > cc: linux-mm@kvack.org > cc: v9fs@lists.linux.dev > cc: linux-afs@lists.infradead.org > cc: linux-cifs@vger.kernel.org > --- > fs/netfs/buffered_write.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) >=20 > diff --git a/fs/netfs/buffered_write.c b/fs/netfs/buffered_write.c > index 9a0d32e4b422..07aff231926c 100644 > --- a/fs/netfs/buffered_write.c > +++ b/fs/netfs/buffered_write.c > @@ -172,15 +172,14 @@ ssize_t netfs_perform_write(struct kiocb *iocb, str= uct iov_iter *iter, > if (unlikely(test_bit(NETFS_ICTX_WRITETHROUGH, &ctx->flags) || > iocb->ki_flags & (IOCB_DSYNC | IOCB_SYNC)) > ) { > - if (pos < i_size_read(inode)) { > - ret =3D filemap_write_and_wait_range(mapping, pos, pos + iter->count)= ; > - if (ret < 0) { > - goto out; > - } > - } > - > wbc_attach_fdatawrite_inode(&wbc, mapping->host); > =20 > + ret =3D filemap_write_and_wait_range(mapping, pos, pos + iter->count); > + if (ret < 0) { > + wbc_detach_inode(&wbc); > + goto out; > + } > + > wreq =3D netfs_begin_writethrough(iocb, iter->count); > if (IS_ERR(wreq)) { > wbc_detach_inode(&wbc); >=20 Reviewed-by: Jeffrey Layton