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 89AA7C35274 for ; Thu, 21 Dec 2023 11:46:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 200F76B0088; Thu, 21 Dec 2023 06:46:52 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 162216B0089; Thu, 21 Dec 2023 06:46:52 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 050166B008A; Thu, 21 Dec 2023 06:46:52 -0500 (EST) 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 E9E2D6B0088 for ; Thu, 21 Dec 2023 06:46:51 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id C08F140709 for ; Thu, 21 Dec 2023 11:46:51 +0000 (UTC) X-FDA: 81590648622.09.7BC02F0 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by imf20.hostedemail.com (Postfix) with ESMTP id 763E51C0022 for ; Thu, 21 Dec 2023 11:46:49 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=3VQTdVtm; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=5DbusDg5; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=JJ0Lr7Us; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=kZu9TC90; spf=pass (imf20.hostedemail.com: domain of jack@suse.cz designates 195.135.223.130 as permitted sender) smtp.mailfrom=jack@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1703159209; 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=8dO5uqpEU5oXY6n+R8pV+MqdfZSYD5IInOM8E+njSIY=; b=8dqFE/JgJgLIVon2mwjuhi7X61DKs94r7Z7zDJzqChHnwWqarm/iKdTK7MxEEXvyEZKM0E O4gDTFYExMexy8Xzsx3eJIn5dFBZbMxbQlMYRbCSouoCwl5nLeHCzpVFOtfyU0n74WmUH2 QtVnJH7+PknvgVXIYQVXbvLPuUC/kvM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1703159209; a=rsa-sha256; cv=none; b=X0cgkiYmogmv9RXeDZyq7sxyo7kF/vc9TRgBWZJHfuagv/5TEzZg+1W6Tri7w5Oy3dukBk nIEG+PlKhtTK2ajFSrqPpx2avhesEWUDlJOsZnp7h+aDZPQu/ARLs6pSqcRfplZT5Qug2t 8xW+D5dOpaGkwxUjuwW+ZSVNEljhn0o= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=3VQTdVtm; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=5DbusDg5; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=JJ0Lr7Us; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=kZu9TC90; spf=pass (imf20.hostedemail.com: domain of jack@suse.cz designates 195.135.223.130 as permitted sender) smtp.mailfrom=jack@suse.cz; dmarc=none Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id CF7FE21E3E; Thu, 21 Dec 2023 11:46:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1703159208; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=8dO5uqpEU5oXY6n+R8pV+MqdfZSYD5IInOM8E+njSIY=; b=3VQTdVtmBVWQEIaOt/kgB0fFwteyyJUHOYv36c4X/J4elS7A6JsxMu+5OuSGfGssREDOzZ QbUmtKJ/dapZjNDuW60g5RMEOkHTWicJWSzg4nqFQUNm1/+KxPNHIbjt39YjEjoedm5zbx 3nRz60zNeamRVhvlBpHyWiZwaqtDByk= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1703159208; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=8dO5uqpEU5oXY6n+R8pV+MqdfZSYD5IInOM8E+njSIY=; b=5DbusDg5X2MH8j+AeP+ksP1kQDBm6Ua/FfWGC8wE4WTbMcIYz6qBPAN/mEP8cKXlrCG4Zf KYTlfYuBpZ4EniDA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1703159207; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=8dO5uqpEU5oXY6n+R8pV+MqdfZSYD5IInOM8E+njSIY=; b=JJ0Lr7Us+yKSW3d29mG8sL6Dj1h+BW+sSvkYszPHxFvbqTdmWH0CgBKT8wWFQPTPay9GWa H2tpgRaks7Rgdl0XLbU6J7RZCAcTFtT/lHw6tHrR/asZ9cd9hMYYqR066n7pMd6/UA16We 5UgpKoil4VclIp90aOfMiZbJmhXoGGo= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1703159207; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=8dO5uqpEU5oXY6n+R8pV+MqdfZSYD5IInOM8E+njSIY=; b=kZu9TC908huPzG1Xeiz42+19dKlsTpqRO0gIJHTOqUII6xbzpP7lZmm29eOHBFBFwKujqD pvo02p6OkrMJDHAA== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id C3BB313725; Thu, 21 Dec 2023 11:46:47 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id 7FjIL6clhGWCYQAAD6G6ig (envelope-from ); Thu, 21 Dec 2023 11:46:47 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 7C461A07E3; Thu, 21 Dec 2023 12:46:43 +0100 (CET) Date: Thu, 21 Dec 2023 12:46:43 +0100 From: Jan Kara To: Christoph Hellwig Cc: linux-mm@kvack.org, "Matthew Wilcox (Oracle)" , Jan Kara , David Howells , Brian Foster , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 14/17] writeback: Factor writeback_iter_next() out of write_cache_pages() Message-ID: <20231221114643.y5opxgchscyj7rwn@quack3> References: <20231218153553.807799-1-hch@lst.de> <20231218153553.807799-15-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231218153553.807799-15-hch@lst.de> X-Rspamd-Queue-Id: 763E51C0022 X-Rspam-User: X-Stat-Signature: br4ptagkm4fyc9p36rww1ae84pp394mw X-Rspamd-Server: rspam03 X-HE-Tag: 1703159209-505209 X-HE-Meta: U2FsdGVkX1/CnhjHDV8+tksiNBcl0IQf+yYUcHZFUyqbhc8XpeBtbevFIRxrV+nJ0FqKdHa7WAY3bpLBE3ZXCo2+V1B7IJOwPeLDAbZaK4NGyjQQBBauvZ275JUsAhHG/5SwREAKG8Iq/lXFS7ty5ayoJhVy42vIAxwT36Do1NRKQfWte95SZ1KRqg5dgaALfkEsZFNqZn3H4jrHi/MM2Voe9vMUh8VmoV9C7/tnw/Yckfl+8MRkXisDmSQGOGjLzuKdjdK8yoZr0I9Ubel3JjNdLtK8XUKmsdUJz6VbWrqkTDTKi5yxr3v0TLZjI8Ui9bLpLLIIrNhkkFuF6m/qKkSOUFlW7DiqHbnGF9TpD5GjEM84yg/NZA34fARQStfspeusDqeS5ismiPCl9/2K4MZLNyw/6Lxl+gnt7lWGBmGojgFHvJL9IQowcNF9xuU7ozUPUoOtOAbEHH3hRmw6pmM0LvNVFCfGe82epYIyn6Gyt4km2Ybb7NRKpRJaL5wA0E1wS/nwmb9iJIaIUg1HynBtegSb0VKjBZydMAzduqtm8fWXoVJmMGcdtajmw/4xh8TZW+n03vyweDc9Tc/WZuBrt53uDM9ZF6uNjeLRI72vYBnUTbNnKuOmjYOfUDhTl54r6NPwfyelEtHHgN1XZ9+0zrtGjOXxwBXLLvYYT+Y3F29topPjNr1Em9tXrq+32/d5bTrV0I0uo7SKiF/JHdJAGFyvAuv3eHU81cXiX4tKTMlYB4VEf2bmwkyCrzziazmNm65vMvrhO227jZMUosheX7WiC5VyWb4WSgO1cVf+n95/Sa0WQ2zjoO8OJZYBfNEqurjpSTUz3goGZci0/VZgIY/di2alTwX9Vnc+xowKzzGwAj39BIpDlRWmnhw6NwkPd2cv3ndHLGwrfsjpm3LicV7nyOaiRn8+t6Ihrsxcv5Ui/ZXxTrSZe9qwgzZF23kLfbRpVmrmecwYt+E eZG4zP2+ 4lGXEVxR7rq8vBDTqL2VWiGuUOHkv+tQBU1mIY1kPKD3HBAOtd+qRGxJPGJRcQIso2G0zO/wjjYEgY3bQUklFmXY/JzljEuAnsnEotNMq5+cLoxgseaKTggEC1gnjCxgrDJ8nRwa2IaV1vBIC4OhCme6acGWGphC9aSAatb/GQRkvp2mnT/d/IQcE5rrL3ZmhzSwMwTlX8JYPxJ3n7JfIabnlO6CvHwvYdp7ar/6rp31wF4BxLvEoSPu3MWFmHAExljXzbAJ3CBC5EN9GEKhoxldwecOz+cVm8jOJB1h9GepV3fliMCr8rr7P12VlZO+rrBWvcOmzr7qvKluO67JTN2b4/f66Vc0sFSLLZ5c3tBSYbOjgb54tdTbjrhfwVA+EGooprvLGMro1n/pOOb0QkecvChHvYX+EUq3y 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 Mon 18-12-23 16:35:50, Christoph Hellwig wrote: > From: "Matthew Wilcox (Oracle)" > > Pull the post-processing of the writepage_t callback into a > separate function. That means changing writeback_finish() to > return NULL, and writeback_get_next() to call writeback_finish() > when we naturally run out of folios. The part about writeback_finish() does not seem to be true anymore. Otherwise feel free to add: Reviewed-by: Jan Kara Honza > Signed-off-by: Matthew Wilcox (Oracle) > Signed-off-by: Christoph Hellwig > --- > mm/page-writeback.c | 85 ++++++++++++++++++++++++--------------------- > 1 file changed, 45 insertions(+), 40 deletions(-) > > diff --git a/mm/page-writeback.c b/mm/page-writeback.c > index 9d37dd5e58ffb6..0771f19950081f 100644 > --- a/mm/page-writeback.c > +++ b/mm/page-writeback.c > @@ -2449,8 +2449,10 @@ static struct folio *writeback_get_folio(struct address_space *mapping, > > for (;;) { > folio = writeback_get_next(mapping, wbc); > - if (!folio) > + if (!folio) { > + writeback_finish(mapping, wbc, 0); > return NULL; > + } > folio_lock(folio); > if (likely(should_writeback_folio(mapping, wbc, folio))) > break; > @@ -2477,6 +2479,46 @@ static struct folio *writeback_iter_init(struct address_space *mapping, > return writeback_get_folio(mapping, wbc); > } > > +static struct folio *writeback_iter_next(struct address_space *mapping, > + struct writeback_control *wbc, struct folio *folio, int error) > +{ > + unsigned long nr = folio_nr_pages(folio); > + > + wbc->nr_to_write -= nr; > + > + /* > + * Handle the legacy AOP_WRITEPAGE_ACTIVATE magic return value. > + * Eventually all instances should just unlock the folio themselves and > + * return 0; > + */ > + if (error == AOP_WRITEPAGE_ACTIVATE) { > + folio_unlock(folio); > + error = 0; > + } > + > + if (error && !wbc->err) > + wbc->err = error; > + > + /* > + * For integrity sync we have to keep going until we have written all > + * the folios we tagged for writeback prior to entering the writeback > + * loop, even if we run past wbc->nr_to_write or encounter errors. > + * This is because the file system may still have state to clear for > + * each folio. We'll eventually return the first error encountered. > + * > + * For background writeback just push done_index past this folio so that > + * we can just restart where we left off and media errors won't choke > + * writeout for the entire file. > + */ > + if (wbc->sync_mode == WB_SYNC_NONE && > + (wbc->err || wbc->nr_to_write <= 0)) { > + writeback_finish(mapping, wbc, folio->index + nr); > + return NULL; > + } > + > + return writeback_get_folio(mapping, wbc); > +} > + > /** > * write_cache_pages - walk the list of dirty pages of the given address space and write all of them. > * @mapping: address space structure to write > @@ -2517,47 +2559,10 @@ int write_cache_pages(struct address_space *mapping, > > for (folio = writeback_iter_init(mapping, wbc); > folio; > - folio = writeback_get_folio(mapping, wbc)) { > - unsigned long nr; > - > + folio = writeback_iter_next(mapping, wbc, folio, error)) > error = writepage(folio, wbc, data); > - nr = folio_nr_pages(folio); > - wbc->nr_to_write -= nr; > - > - /* > - * Handle the legacy AOP_WRITEPAGE_ACTIVATE magic return value. > - * Eventually all instances should just unlock the folio > - * themselves and return 0; > - */ > - if (error == AOP_WRITEPAGE_ACTIVATE) { > - folio_unlock(folio); > - error = 0; > - } > - > - if (error && !wbc->err) > - wbc->err = error; > > - /* > - * For integrity sync we have to keep going until we have > - * written all the folios we tagged for writeback prior to > - * entering this loop, even if we run past wbc->nr_to_write or > - * encounter errors. This is because the file system may still > - * have state to clear for each folio. We'll eventually return > - * the first error encountered. > - * > - * For background writeback just push done_index past this folio > - * so that we can just restart where we left off and media > - * errors won't choke writeout for the entire file. > - */ > - if (wbc->sync_mode == WB_SYNC_NONE && > - (wbc->err || wbc->nr_to_write <= 0)) { > - writeback_finish(mapping, wbc, folio->index + nr); > - return error; > - } > - } > - > - writeback_finish(mapping, wbc, 0); > - return 0; > + return wbc->err; > } > EXPORT_SYMBOL(write_cache_pages); > > -- > 2.39.2 > -- Jan Kara SUSE Labs, CR