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 9DCE2C25B48 for ; Tue, 24 Oct 2023 15:01:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 007A66B02B4; Tue, 24 Oct 2023 11:01:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EFA306B02B5; Tue, 24 Oct 2023 11:01:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DE88E6B02B6; Tue, 24 Oct 2023 11:01:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id CF6A36B02B4 for ; Tue, 24 Oct 2023 11:01:00 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 867021201D5 for ; Tue, 24 Oct 2023 15:01:00 +0000 (UTC) X-FDA: 81380667480.24.E5C8971 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by imf29.hostedemail.com (Postfix) with ESMTP id 5C4B512004C for ; Tue, 24 Oct 2023 15:00:56 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=gCgiTpzW; spf=pass (imf29.hostedemail.com: domain of djwong@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=djwong@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=1698159656; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Pz28/BLAME7jtGp3uKITZhabgJmNMZcOZwJ9VQHPJHM=; b=QIMXysx9n/LvLYcB+Qt0jzP6dj8dAz2A/T7tME6pC/i8gGNX1mSUW7L5Bek711/XVWEb27 9hGtMMW0uL/A5ykBw7O1b5Lz6LMjlXzBNV/5Q8ExQhR9OMModfJgF2DJHyzzDUe0C06cA9 lPJFEdAkjWl9zIWpmuGeJYECyavrUI0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1698159656; a=rsa-sha256; cv=none; b=5vUaqlNJFGvVL8V33+JxtNA+5JXM/D0pLnjgYyOWkdbhjU0MCN43JK5IncOcjb1Lh+bV/6 CMeHeUmCkusRFlMFhcjlOC9S4VxbMfbBNf2OWS3pz0bSUfZlSNLzpqYf3iF5dpbf+hO+51 CUZu5TJGsL6RrQpmqloQqQiegHW70+o= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=gCgiTpzW; spf=pass (imf29.hostedemail.com: domain of djwong@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=djwong@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 6346FB811B1; Tue, 24 Oct 2023 15:00:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B7F6BC433C8; Tue, 24 Oct 2023 15:00:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698159653; bh=1er9HDGuyZurPRrSEMxddQ3gFQVJxN7X/63TVQfVyDM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=gCgiTpzW+N0zqUe1030TfPCtTzFbG2nIDdcPEgBtxnHx3Q4IcfKswjDuxXnOO/iLX CpreOOIL3IF/282EdX3MV7RK3en1zf9Qx0KLe1qfjZaE9dHZgcA8bI2InlExVuP/Y8 LossIoICrvSkNYgqxTxj57G00NyG6zRFwn+nAqSzPWqonzLutkbcFaFQcTkwwTp7Wr YTCz5/kNWXt0O7B7K63Lu1HqdMovwrvZ7bZjhs0jcOO8NAxdQubQVIXt8qXzYE6aEf yrSnMPWRyyJl65YpTF39U90ePMG9hSQ+ljD6CZ+ZnIQCpPgqpMqD0its6wU319jJWT Ei9hGlPoFSvZQ== Date: Tue, 24 Oct 2023 08:00:53 -0700 From: "Darrick J. Wong" To: Christoph Hellwig Cc: Jens Axboe , Matthew Wilcox , Ilya Dryomov , Andrew Morton , linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH 1/3] filemap: add a per-mapping stable writes flag Message-ID: <20231024150053.GY3195650@frogsfrogsfrogs> References: <20231024064416.897956-1-hch@lst.de> <20231024064416.897956-2-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231024064416.897956-2-hch@lst.de> X-Stat-Signature: d4jjj3re3d51picfk87gjq8gw6c4y6r7 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 5C4B512004C X-Rspam-User: X-HE-Tag: 1698159656-938006 X-HE-Meta: U2FsdGVkX1/RtKtmb2W6ZUCArAY1GCuSixMBAFsfi72h4aOcG3BDVAXGl+60XBAvqqhSWq7yguJpNvwoAKvlxIeEhJ4VuEDGOs6tyF3uJLQJzSOaXdgg61LKXGlpYdEKsgUK+V8oybtBpulOfUA0USQwYGBO02q+Bi1eEnh4yiTUqVe61AnqvwZn4iNbc8lgYieg8ULhWZ2p3MCHkLGy49OfkILoYCLGZaaBaCcSxYNIzO6VilmurzvMbTgbau6PXWkySOgxVlUueXJ+7NKPWhLgADIBMYMcgzYHfl73N2OLrdlB/7D0brzI1aCoUmxDfzVQqZuZq+hvvH/cYB4hTJwF0wVbp1Dxo41tjFlAAvtT5LVw6K1YcAxKipf7Rx34iZVeEs4r4zjv+eSZzKOvieKv7h2Ojji3HALyGCAMzGAf6JHm+iVXTcKi85FaiRKEO+tMCm84rfai700ZoRZtomYTyEcttii1eVLYPeKGuHNO1BqD2gYuZqcp/hTs07fun1Z9PjhOksly2Zx+lwZa5D/m4ZpS6gqCtnZnLfzyi1Gfg7EKhqxFwPqg5eL/WowMFmDYtpJ3o2bkfaYgf28WS1tCgm/opRul8UMx6mz0V8oKzUdFuliriQAnOrdSjzttlmXXx/riK6ozdaU6WSE1fpGIVfU5nfitu1mJ6yidMyv61DRsk8UTbz8dOxTvum3cwLXaTyZt84smzUjnzFKzzvG72ovSuVCPr43BZ/C4f24HhWO76CrSEtH43N6j9r44q6EQEnpRxkX6EQ7iIgRJkPzcjIE+8s5aD1ZsdgKfjF3c5CI21c6Mjn82m307ol+omX+Uf9QCey+Pn0TcjkvY3eAqbpbLix8z74S4gYTUJ5CO6lS4D6TcGvRE+zXGWEKGxBqE2A5YOsINhDo375+uEr34tVqIbX6j01IrFQDjRHg0zcT+6o/hM9uaQi9INqSDyIDedyZ4p5iZQekGfjF KtTjokwf 3dC8SE3S+Eq2kvEhnslK7xezYbww6tqCPsj9n1zCLjrioLiboaGm9zzIU0apjcvCnctbdr9X9Pm7MVThfbkVtkBems9JRMkFRZRdCyU6uAVf11lw+fVRDxXUws32asBNNvir/A6JuIdguzZRPT4IJhwrOxC65U11O3Kw0TuYvVCc6tGy/YfiXDWJKQ8uX8SKDBHmOgr163JXIOiqmP1lHEwsHR2dCbGD+KXxdnp/OSaQEuptIyAm6/GOBCA== 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 Tue, Oct 24, 2023 at 08:44:14AM +0200, Christoph Hellwig wrote: > folio_wait_stable waits for writeback to finish before modifying the > contents of a folio again, e.g. to support check summing of the data > in the block integrity code. > > Currently this behavior is controlled by the SB_I_STABLE_WRITES flag > on the super_block, which means it is uniform for the entire file system. > This is wrong for the block device pseudofs which is shared by all > block devices, or file systems that can use multiple devices like XFS > witht the RT subvolume or btrfs (although btrfs currently reimplements > folio_wait_stable anyway). > > Add a per-address_space AS_STABLE_WRITES flag to control the behavior > in a more fine grained way. The existing SB_I_STABLE_WRITES is kept > to initialize AS_STABLE_WRITES to the existing default which covers > most cases. > > Signed-off-by: Christoph Hellwig > --- > fs/inode.c | 2 ++ > include/linux/pagemap.h | 17 +++++++++++++++++ > mm/page-writeback.c | 2 +- For a hot second I wondered if we could get rid of SB_I_STABLE_WRITES too, but then had an AHA moment when I saw that NFS also sets it. This looks reasonable, Reviewed-by: Darrick J. Wong --D > 3 files changed, 20 insertions(+), 1 deletion(-) > > diff --git a/fs/inode.c b/fs/inode.c > index 84bc3c76e5ccb5..ae1a6410b53d7e 100644 > --- a/fs/inode.c > +++ b/fs/inode.c > @@ -215,6 +215,8 @@ int inode_init_always(struct super_block *sb, struct inode *inode) > lockdep_set_class_and_name(&mapping->invalidate_lock, > &sb->s_type->invalidate_lock_key, > "mapping.invalidate_lock"); > + if (sb->s_iflags & SB_I_STABLE_WRITES) > + mapping_set_stable_writes(mapping); > inode->i_private = NULL; > inode->i_mapping = mapping; > INIT_HLIST_HEAD(&inode->i_dentry); /* buggered by rcu freeing */ > diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h > index 351c3b7f93a14e..8c9608b217b000 100644 > --- a/include/linux/pagemap.h > +++ b/include/linux/pagemap.h > @@ -204,6 +204,8 @@ enum mapping_flags { > AS_NO_WRITEBACK_TAGS = 5, > AS_LARGE_FOLIO_SUPPORT = 6, > AS_RELEASE_ALWAYS, /* Call ->release_folio(), even if no private data */ > + AS_STABLE_WRITES, /* must wait for writeback before modifying > + folio contents */ > }; > > /** > @@ -289,6 +291,21 @@ static inline void mapping_clear_release_always(struct address_space *mapping) > clear_bit(AS_RELEASE_ALWAYS, &mapping->flags); > } > > +static inline bool mapping_stable_writes(const struct address_space *mapping) > +{ > + return test_bit(AS_STABLE_WRITES, &mapping->flags); > +} > + > +static inline void mapping_set_stable_writes(struct address_space *mapping) > +{ > + set_bit(AS_STABLE_WRITES, &mapping->flags); > +} > + > +static inline void mapping_clear_stable_writes(struct address_space *mapping) > +{ > + clear_bit(AS_STABLE_WRITES, &mapping->flags); > +} > + > static inline gfp_t mapping_gfp_mask(struct address_space * mapping) > { > return mapping->gfp_mask; > diff --git a/mm/page-writeback.c b/mm/page-writeback.c > index b8d3d7040a506a..4656534b8f5cc6 100644 > --- a/mm/page-writeback.c > +++ b/mm/page-writeback.c > @@ -3110,7 +3110,7 @@ EXPORT_SYMBOL_GPL(folio_wait_writeback_killable); > */ > void folio_wait_stable(struct folio *folio) > { > - if (folio_inode(folio)->i_sb->s_iflags & SB_I_STABLE_WRITES) > + if (mapping_stable_writes(folio_mapping(folio))) > folio_wait_writeback(folio); > } > EXPORT_SYMBOL_GPL(folio_wait_stable); > -- > 2.39.2 >