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 C21E8C77B7E for ; Mon, 29 May 2023 22:44:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 28472900002; Mon, 29 May 2023 18:44:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 20E686B0074; Mon, 29 May 2023 18:44:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0AEB9900002; Mon, 29 May 2023 18:44:55 -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 EC55F6B0072 for ; Mon, 29 May 2023 18:44:54 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id B2B2740354 for ; Mon, 29 May 2023 22:44:54 +0000 (UTC) X-FDA: 80844774108.18.BFEA997 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf18.hostedemail.com (Postfix) with ESMTP id 30EC51C0011 for ; Mon, 29 May 2023 22:44:51 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=lVCx+EOO; spf=none (imf18.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685400293; a=rsa-sha256; cv=none; b=hViKICQUtsmXiXFIeep96F0RflxOpus3ZvlnU7s8Yiw4606pCOIDRk81/4Ro/M9JjinGMT fS7PrxRBpBtI8m4VTiqj2MwYKpvB9dQn/Ebf9v9xdvlhk9a8P/7NroVwxmC7BZTeSseIdE R01YyA49IVe+WHzFvIFQ+1l22Hcitjk= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=lVCx+EOO; spf=none (imf18.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685400293; 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=5FI/wzhm+Y8jftauZUC1bbB7aZylMU+DZ8dqguf4HHw=; b=WZIUUOI6HCI3Y/xUzyu2aTySt8Ouepj3hTQRL7PxatN71OZ3VG4j1BwKk2Jmoro/pWjH4B EQF2zY1YcdZnLLXJWYYPSHlENsPveS2/W7031lS71aEKf0pQQULnXLaa+T3w1rVcyzZe83 FLlxVmMOp7Jd7pxMYDwxh6yIzy13aRk= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=5FI/wzhm+Y8jftauZUC1bbB7aZylMU+DZ8dqguf4HHw=; b=lVCx+EOOgR8EUHWnMJUUnMizmb qpeRIrMaaJmw3gWTcXROdxD4ejrRR6haLCiqopJoZHAaSjGlshBbG0rlor55uno2GZqbIuvuMrw3i A6N/mG0w43572Vm6flIajE2XNsfH2dOKpLm5/+bUGAVpFDsZjLpt3Ep/ANZ+E+rV2fQYMnFUrgvsY i8jhUcKZDtT6dcfO+Pw0aSaAg3JG2maxP7tLHxcIGmTz0aOq1Ua9QWYSSwZa09QgOOX+VCSiBE76r L1b40/UO1RnyUadIMxhy0r4L7KLJnR6fh+ZzE01Bk4jcmAdgdTTn5Si/O+sgtG56jphR7lIt1A3pk ZQmUdIBA==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1q3lbd-005kpR-Kh; Mon, 29 May 2023 22:44:49 +0000 Date: Mon, 29 May 2023 23:44:49 +0100 From: Matthew Wilcox To: Dave Chinner Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org Subject: Re: Splitting dirty fs folios Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 30EC51C0011 X-Stat-Signature: o8wjgqbk7t9xm8xzagpnnpnduw3m6o7q X-Rspam-User: X-HE-Tag: 1685400291-874787 X-HE-Meta: U2FsdGVkX1/9kGqpRTr+F63rM8pmKOaerO4GeVFmHjQTWNgs0Gw4ZR9Y7c5XApdLPTq8l7ECN8bOf/SMRam1wZuNiCf+w9m7EMEE/6FR4bmrkohgY9AgqsyZbJy6zOG7HJWA6V2lxjNU5J69o5Yf7l/uYsg/hxiP84u3WY9PgBZy3Q7Zar9+Be4ogmtTKhd8HPie37USUDWvoPVUMh+jQCBgcncodRYN7kHln+nDX299DAR8OD2j1lGNRo6H00xQxiZus9QInWwMrKfMN376dn0H1RjZXKYVsxj4KcZkTPaox38VySlNdUVZGOA+MKjpRYC9s6dEkqjjG78vlh7h3IfoATW9IkiVM8/XYhU0dwoYhkAnhEDqQoM+1acOCuYN6SwccLVag2091cXdpg4GtROq4LG9LuhMMwYbV92+ho3iHGjsm0UncDlb5X6fTOB0u8dX8U3PPMp7pirV+ImPR9KH9W5J0UcWdttkSciuGcp3CCVyGTcUb8+YEg26vAwp7Qnr4woGYbP/LI3kORXSdpedPT8iyhLUdoCSciiUiiFYyafTZRawU1CDKR2k+ltX4pO0Zpai2teOe+6jHy1Ren8PbuvzT3Et63X3Aq0aKfBl6pslBgKyA//UfyAmGkgwCdThjMHLtS7gBj4TQbpcmxul90gmz16NfJZue1SEwoGFdHzMvlpvdF3lQ9pF6WqiY6EPJM/AGMI/g5uqBbMGYZCcCcy78zSO7H54Gw9P0fLNoDOrgy2zSwpDID55HSWnYRv3V6XzZEo/GDMIwJGaFEOxmh8FU5P4S0zOZZUWUmLiwWE6NGIaEYVqsgqcnU+IlU2AC60+ZuQVQYknni+hq+kUbCoW9bjfqKradDRWV5M0/dI4pPVHVAFT/mjMV9Eu/v2ggojKITWq4Pis9JlsNfBHoycVUMHuzk2xlogiMP2sZ2dz4JzHSqq+I1QZWaMCMxrzsETBY8NTg6dHuvC Yhke1Nxh FAbJ9XHRNEBfU8RMxeSh03vvkyOZRZ96qaAKkK9OW4osjsGKeCplbVhBTzEWsnyq5NurdEibheaIJXsLWAvzPLj80lpkl7uWSTuDPB27G7NEVyOntj+evkfxzubjRmySX1NBRxYz4d3xQJpg= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, May 30, 2023 at 08:39:32AM +1000, Dave Chinner wrote: > > Option 5: If the folio is both dirty and !uptodate, just refuse to split > > it, like if somebody else had a reference on it. A less extreme version > > of #4. > > Also seems like a reasonable first step. > > > I may have missed some other option. Option 5 seems like the least > > amount of work. > > *nod* > > Overall, I think the best way to approach it is to do the simplest, > most obviously correct thing first. If/when we observe performance > problems from the simple approach, then we can decide how to solve > that via one of the more complex approaches... So the good news is that Option 5 seems to have no regressions and the functional part of the patch looks like ... +++ b/fs/iomap/buffered-io.c @@ -510,11 +510,6 @@ void iomap_invalidate_folio(struct folio *folio, size_t off set, size_t len) WARN_ON_ONCE(folio_test_writeback(folio)); folio_cancel_dirty(folio); iomap_page_release(folio); - } else if (folio_test_large(folio)) { - /* Must release the iop so the page can be split */ - VM_WARN_ON_ONCE_FOLIO(!folio_test_uptodate(folio) && - folio_test_dirty(folio), folio); - iomap_page_release(folio); } } EXPORT_SYMBOL_GPL(iomap_invalidate_folio); I need to modify a few comments and document exactly why this works, but it seems like a good next step.