From patchwork Mon Jun 26 17:35:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13293264 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 9738BEB64DC for ; Mon, 26 Jun 2023 17:35:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 656A08D000D; Mon, 26 Jun 2023 13:35:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5DD5E8D000C; Mon, 26 Jun 2023 13:35:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3E17D8D000D; Mon, 26 Jun 2023 13:35:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 23BF68D000C for ; Mon, 26 Jun 2023 13:35:40 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id F3136AFF60 for ; Mon, 26 Jun 2023 17:35:39 +0000 (UTC) X-FDA: 80945601198.10.61F98AD Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf20.hostedemail.com (Postfix) with ESMTP id 389791C0022 for ; Mon, 26 Jun 2023 17:35:37 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=duXZv5WH; dmarc=none; spf=none (imf20.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687800938; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=QSocI68SnxGROAi6KnsuaQtLU/TknPAXfYvMKgd/IsY=; b=bq67eP9pUA1U0PNzfwtqZRADbnhB5W3A7B/rM0bBeklVMkSGSa2wNYS/b8JF+YXBJbq7cc 2j+y6YltkRYE2zTtS4VNwWndGUYl4xANLGFIGqy3HkQ+gTj7vVAq1VzGy5oJFXPoM+iaVt FO4wtKLAcpcWZyw/bvKOBLXXagf6E2k= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=duXZv5WH; dmarc=none; spf=none (imf20.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687800938; a=rsa-sha256; cv=none; b=JARDnk0IjFp0/+QPoGvwLfWwf0xdQttqaVpOZPrzeceLSqFndV7z7KvGMCkK8FvJ49JARH 0KkqyAMA6+aSM3P5aKAsS3lCef09tJIqEi0/ktIHcUwiVkArZbgrKkp8AT4GRDoorpZbAK 263sO+03hzqZeAV3n37h/xUAV0zt0jE= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:In-Reply-To:References; bh=QSocI68SnxGROAi6KnsuaQtLU/TknPAXfYvMKgd/IsY=; b=duXZv5WH1H74olkGLz6lqhcWMg ycaQBDHoe0qUqHIgblnjFaUpUKwN8MGzm4avigX/QCt4cNL3uCwpYv+DTycTDK9TSw8XUkK7m8QwG Xx1hLohNCFLwjChZBPCwmdd3SfdAwlTEou4IxynYnkaQNaTVGLaSjbkiAj7mOVuqvbl+qv5P/w3Xv UEdx5tcwSg83Nx0/nnHphNfbPqk2EAzCNqIAfrFYAJqBhFMOAYjutv1w4XrJSjWAr7t9LOzNITzdY gijCkd6XiDvCxOfwKpwcTEonef52AtZir2Poqu6PPz0gLJFB0XwmCAgF1n0UVKH9Ow2NVWKicFnsA OfW3NJTg==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qDq7X-001vUx-5v; Mon, 26 Jun 2023 17:35:23 +0000 From: "Matthew Wilcox (Oracle)" To: linux-mm@kvack.org Cc: "Matthew Wilcox (Oracle)" , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Jan Kara , David Howells Subject: [PATCH 00/12] Convert write_cache_pages() to an iterator Date: Mon, 26 Jun 2023 18:35:09 +0100 Message-Id: <20230626173521.459345-1-willy@infradead.org> X-Mailer: git-send-email 2.37.1 MIME-Version: 1.0 X-Rspamd-Queue-Id: 389791C0022 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 3tyt3uwb7ur7yhr4sjmptcc5wf1cmqf4 X-HE-Tag: 1687800937-740406 X-HE-Meta: U2FsdGVkX19V3nOkV04Nmu0KHSZk8hgvAc5X3SNzlbAUM2nhyOOqZl+RHcuGdo6sd1/ybR4T5KMHV7z3MPL75h3/bmpsOxqR4UlSBRVObQug4OQdWcTH3iYkTWusdzymm4c5pT+HIcJeZZar5cw62TAcQ5LUCXSj9+xRCTAZk0cAZeLg5oZClL60kpcOOtXkeHSkE71qvnmnEpf/JScsVOvPjJ3lNti/Tn/6opaYKSXYGoFZYpC7oxO7dEn0FXSRHju5AOuSaPbZzyMagfSDrY2lzAbnRSKCHdT0yagjPgm16t2o9vBWcwPFHIMkfE2IJXbGDnwZfX/WQD+OD8loUNsxXTWJhm0t11nYP7IkNA9zTfVkoQn1WeSpTW/QlETC/ygASkC5GArm/TUkBrw9FDf/++YATe/JctJppdrlAhwYEYfvEkISHdWymZGUeycnVkqlFQrR9JJsuDUcEhk25BN0MsN+W+cILUwD7UPi/DmVya579IDlUz/vC8hfIH2bRmQGAtBVBPKDEiUFj6SqQj0EO4IOhrA6vCbs/IzB6wMxT+yyRuN+pUTaTz90bEiab3qFZ19OMSGo5MLv9LGrbMncFQugrSyY/2BWwV9bFru0N+SIzwUTF+WObWiAKQwWKZkpNumyaYlvp4vQnPQWXtGvMei3q2RQSad7l6dZge/XabPVF8tw28pzGY9lnX4Tpi5JMJw1BzTIIUZedLXKYWT2B7y9xk0MZooKjtfav9qcjVJdS9IMEknR+K6+vfeGFcOQsBb9xAlmp2xI/lLorTKpYTBT2mevyvmtggN8qhk7K3QRFjsYOM4vQO0l7USFEC+bydsIU0iDb5emetkc+k9FgC53z+fwF/Nc5x3Iorq8x/s0nYTb871xitZYUo1YaPfeuHQ2UosCnDpaH/KgK86rVcCz1c/wQql1p2LdGhkTer10O9SXRZZ5wHMs4v20ewUrBADjN9/APMVWXGQ BIPshUzS hnCAIEBPIs1yPL5vDBNSVwumJSIqWf8CN9YN59WC11lGId4nx1yo2NM+M4sLkaWgZJWu7GYnZTMxfcWpsggBnmTm2MvqFC4wo5z51QXSTaKmcS4fSL4KVvAo257ERPz2FSDEGy6nfs/6DGYfAR9POTVAhK7BhI/lk6/wv 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: Dave Howells doesn't like the indirect function call imposed by write_cache_pages(), so refactor it into an iterator. I took the opportunity to add the ability to iterate a folio_batch without having an external variable. This is against next-20230623. If you try to apply it on top of a tree which doesn't include the pagevec removal series, IT WILL CRASH because it won't reinitialise folio_batch->i and the iteration will index out of bounds. I have a feeling the 'done' parameter could have a better name, but I can't think what it might be. Matthew Wilcox (Oracle) (12): writeback: Factor out writeback_finish() writeback: Factor writeback_get_batch() out of write_cache_pages() writeback: Factor should_writeback_folio() out of write_cache_pages() writeback: Simplify the loops in write_cache_pages() pagevec: Add ability to iterate a queue writeback: Use the folio_batch queue iterator writeback: Factor writeback_iter_init() out of write_cache_pages() writeback: Factor writeback_get_folio() out of write_cache_pages() writeback: Factor writeback_iter_next() out of write_cache_pages() writeback: Add for_each_writeback_folio() iomap: Convert iomap_writepages() to use for_each_writeback_folio() writeback: Remove a use of write_cache_pages() from do_writepages() fs/iomap/buffered-io.c | 14 +- include/linux/pagevec.h | 18 +++ include/linux/writeback.h | 22 ++- mm/page-writeback.c | 310 +++++++++++++++++++++----------------- 4 files changed, 216 insertions(+), 148 deletions(-)