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 611ECC00A8F for ; Tue, 24 Oct 2023 12:03:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9E1FC6B0246; Tue, 24 Oct 2023 08:03:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 96A546B0248; Tue, 24 Oct 2023 08:03:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 831E36B0249; Tue, 24 Oct 2023 08:03:51 -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 6FD926B0246 for ; Tue, 24 Oct 2023 08:03:51 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 39B05160F3A for ; Tue, 24 Oct 2023 12:03:51 +0000 (UTC) X-FDA: 81380221062.08.DC27B68 Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com [209.85.167.178]) by imf30.hostedemail.com (Postfix) with ESMTP id 4CE6480006 for ; Tue, 24 Oct 2023 12:03:49 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="DaoTmru/"; spf=pass (imf30.hostedemail.com: domain of idryomov@gmail.com designates 209.85.167.178 as permitted sender) smtp.mailfrom=idryomov@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1698149029; 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=QYlPiD3AOm3kvpsnrRrWz5bHQ0jndJXS/Z3nE53cRKc=; b=OpjY4tTskpjOLNqRzDNGXZyG590dGYJgOxz33w8zvkPkRzsqt1z3NbFeOwKqp4fLBl2te2 IfqgjCz/ouiM9Apa28RP/TX6lYC7dRR3IX2CsjyTooTfRa97QvmO+0ss5oOSagZjacEosq KZAzRw9a8RExN7qGRTA6Y7YxDHldeiA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1698149029; a=rsa-sha256; cv=none; b=4N5adb+AfWfUZtG9D7p5tadjz2hLZiWxMTK/VNwKEb22t0+dOOHNXhHywc9OJY3tiThsxm G8rp7pMjaxVmzTG8EnxZ8rkIiy5aneIoNkMyc1Lu45nSQhVBL8ww3I5x/VG/L+gfijH0zH sEl3sfCFuNf5jqBlGtL4lTGlMPiO0Nc= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="DaoTmru/"; spf=pass (imf30.hostedemail.com: domain of idryomov@gmail.com designates 209.85.167.178 as permitted sender) smtp.mailfrom=idryomov@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-3b2e07e5f3aso2754312b6e.0 for ; Tue, 24 Oct 2023 05:03:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698149028; x=1698753828; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=QYlPiD3AOm3kvpsnrRrWz5bHQ0jndJXS/Z3nE53cRKc=; b=DaoTmru/mx8zau6smSifWEb/EHDW5J/KKSt94pU0Y08SU1rq5wkEZDXL/PptHocRWP /2Mvax8vwBVY0NAMMtKTLVbU+sBelxpQAj2rB0Fhyuy5PPEnwxQuni8ZBzatrgPkPz5b l4kdC5xMCFS5Uqc4plLnvHLYiUmo5jRc16MnpaakYVfYBS3p265zPrLnqV1sadLbcAiX EFj5Cm2FYkpFKehxFpNmSciWC/RtLlH1nPY05DPHkFuCOKQnm53i3sPhrjXBQhi1RL54 COpdyQL6mZu1ezYs8a1ZaGvxV/v8UgI9wDBg0gPwMshjFGmVbAG8oA064MbFoMkQg9kQ FcbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698149028; x=1698753828; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QYlPiD3AOm3kvpsnrRrWz5bHQ0jndJXS/Z3nE53cRKc=; b=Ua82N3e5XqqOUUTeK/N+NjhEYrFQM0u6m8XjltK+zFrFrSdT7/WNLddC3ED21Lm7EL p/yWS+u2vreK9jcBJzy4dTyW/GJ+jnvht23bAdXYR6KBrEuWqLuYo7bpOa/15745+sh/ jE24sviUaGFHg2jTN1SUP0kp5Mb0D//OgiMhx5EMXXI5GcwbPgh1ByQGJSw+LZd/nnns hWvAtbnJlP1/6zsfskev5nfxRW8+ZEXxsqrc9HL0C50AQla/ICHwkaQrmkhHdB2Q6zDd 2eqi8dgcep2hXDFF0Tz9om3p4P304jeS5NTBw+OnpoZhx1CL/oPuNPsR0+kCHZYdSpqv swWA== X-Gm-Message-State: AOJu0YxoraizD6OE2FKzSm0bXULPoNZFz3gplrDxxUcaedZs71Pe6DlS 3/tmmkm6/S19PtitW2Vvus5F0FDdp46fgKSAcfc= X-Google-Smtp-Source: AGHT+IF7qHX8rlqEc78PjWgepBvMb5h/sz0mu0uPmIp5Ea9VNofsal6HGp4f37Ou4lMCfxNBgoUIDsLyx9ygI6cg3AA= X-Received: by 2002:a05:6808:309c:b0:3b2:e9ae:5d50 with SMTP id bl28-20020a056808309c00b003b2e9ae5d50mr8956263oib.9.1698149028305; Tue, 24 Oct 2023 05:03:48 -0700 (PDT) MIME-Version: 1.0 References: <20231024064416.897956-1-hch@lst.de> <20231024064416.897956-2-hch@lst.de> In-Reply-To: <20231024064416.897956-2-hch@lst.de> From: Ilya Dryomov Date: Tue, 24 Oct 2023 14:03:36 +0200 Message-ID: Subject: Re: [PATCH 1/3] filemap: add a per-mapping stable writes flag To: Christoph Hellwig Cc: Jens Axboe , Matthew Wilcox , Andrew Morton , linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4CE6480006 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: js8j4eswm5fbx9ixst9b737zexj84tap X-HE-Tag: 1698149029-24658 X-HE-Meta: U2FsdGVkX1+q6mTq902LN6wvPTGHulxvS1TgE/mbLqB0EiNGjHW4fbFkHVh0NNNwpHsXA+2YQWSPvjDEFJzkd5otr3rpdqyVW4bW4YtotLIeZS9spZwSiZb64vnDjC3+C4+e3Ve/bJ/HYlHUX/P1tX2bku3ZKDp9NqEC7alE7Dk8zTazkO4MwVeotw+mUFrpO0uLV9aeQDlFAQ+T/abf8HDi0AzdoWuG383osMuRyZxRQjUJOaiK68PTUqyTeRptOlmm1aquX818UhG2dlSvEDBd2TF9dSzUufo0MDVAtr54ahlCRqGdz6aCl1rlH6s1jXV82LuFSTLGoI9Gon/+MpqPNoB4JA0wHvurLvm8OwI/T1n+ON5OR97y2uzKzlxlDsEf3lMRrVYlzzrixm7oHZkQG0ckv0toKDdyzm0qrWTWAlKD7L4IOvkkvOjFkuIg7199f2S3nSkawKwO7t2Mf/2Gp4M4h564RV6fcGedx1Xvq9uJ6KNGl4cxJntzPFc61Xnf11nYCoS+EzOQoxHivRBlSZuL7RA8F3NTcRVBvvA8IrVz29NZa+Z9trrMmFIqm0Hpylcd+AD/qVQU+Hq28E9sK7pChyFjF9Gx6XoaN+sIo9dJezdjnrzVTk/Hf/7OhY+S4No4d/zXDbNoX2rJRA2PYOGS7xxp6UUz219L0NXzcApPj5DblbiR5NkMY7MWOvY6vJbhuwh8EcEegCkRX8W7x53mrq5lWLA54P6Msa0a67ukMOyH8GVG1AOP03pigSv2yH8gm/0EDM1MTI/YbGp0tUXyRuKjkzpfpiIE1O/2z63e3KOEXymqDVPyOcMgr/OREyVt+ZsLezYwogS4LlBaYirbug9A6xkEDGXBy8/QwYcbN+6Swi+AzgzwrtMgC7DYmjsVcVvxPuh2vukdsrnNAwx9PLhgc4JnkPFxafA3a51hntBUXCsge1yuKZ0xW+SGxKcT1ZIFa2JcJop 5LX+5sd2 B1skreciVoczp8gHqsY+LGtZ0cFzdBo8eM7WdUDrSNL+MG+BjvJXJE8bnjmHdmgKDx0SUOecidX/7+GgPRT9pbqLgzgviYacFhm7QjveILN4jJafrqxpKHD+xzsWDQQlebec7LQQQIqerTdV/iEoOlxZt6jM1ZwFwx8iklDpmIlOBefkIhW60QkS+BC2aPqABZD1vQBVlOJPJgjZTTPTHM2Up8t3Ku3RD2wRmWVOpPVd6hRUp5vCgES3UYZwn06te1tZdXUw7no2jaGyqltxw6ldRYW90vNLs6GEI36KVjRDTi8T/4+WlZw06dz2MvyglbNI7q2GAo3O4nZe+KABORddvA+J/aa+5VAAnAhqy6nrhEGdXXoNjgZySrQ== 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 8:44=E2=80=AFAM Christoph Hellwig wrot= e: > > 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 +- > 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 =3D NULL; > inode->i_mapping =3D mapping; > INIT_HLIST_HEAD(&inode->i_dentry); /* buggered by rcu freein= g */ > 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 =3D 5, > AS_LARGE_FOLIO_SUPPORT =3D 6, > AS_RELEASE_ALWAYS, /* Call ->release_folio(), even if no pri= vate data */ > + AS_STABLE_WRITES, /* must wait for writeback before modifyi= ng > + folio contents */ > }; > > /** > @@ -289,6 +291,21 @@ static inline void mapping_clear_release_always(stru= ct address_space *mapping) > clear_bit(AS_RELEASE_ALWAYS, &mapping->flags); > } > > +static inline bool mapping_stable_writes(const struct address_space *map= ping) > +{ > + return test_bit(AS_STABLE_WRITES, &mapping->flags); > +} > + > +static inline void mapping_set_stable_writes(struct address_space *mappi= ng) > +{ > + set_bit(AS_STABLE_WRITES, &mapping->flags); > +} > + > +static inline void mapping_clear_stable_writes(struct address_space *map= ping) Hi Christoph, Nit: mapping_clear_stable_writes() is unused. > +{ > + 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 > Tested with RBD which behaves like a DIF/DIX device (i.e. requires stable pages): Tested-by: Ilya Dryomov Thanks, Ilya