From patchwork Mon Jun 26 17:35:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13293266 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 2A863EB64DC for ; Mon, 26 Jun 2023 17:35:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2F9CD8D000F; Mon, 26 Jun 2023 13:35:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 281CF8D000C; Mon, 26 Jun 2023 13:35:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0ADCB8D000F; Mon, 26 Jun 2023 13:35:46 -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 E74508D000C for ; Mon, 26 Jun 2023 13:35:45 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id AF1BCAFF60 for ; Mon, 26 Jun 2023 17:35:45 +0000 (UTC) X-FDA: 80945601450.11.4869B43 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf05.hostedemail.com (Postfix) with ESMTP id 12C59100002 for ; Mon, 26 Jun 2023 17:35:43 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=I8BvqJCH; dmarc=none; spf=none (imf05.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=1687800944; 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:in-reply-to:references:references:dkim-signature; bh=Eb8+i22W56HZAod8nWQSK472UiI/gYMP48K8do/ME/8=; b=y26Qak9ru5bY3sINCl0kftKnY53NPaDok79iNUeqATKroSvKkwutNDRuUdELVVdLh9MMKE So+ASb6OlrJFjfyoHw0bIvi5kB3lUZLgvzFHujwaZC/cniZ6vMJQNsbr76a+0sZ7K+MQ9Y /+AHEa0Koy/R+xJ6qoWLaVwzSEe9PUM= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=I8BvqJCH; dmarc=none; spf=none (imf05.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=1687800944; a=rsa-sha256; cv=none; b=VNXG9pQO/mwK5yYosGuP0XUNxhvOa3J1fv0gNtFlABc2wk6/0QZCTVChqz2wg9QU7bmCF5 1i9p5klZGbIlmoPcQhwp/G5/FiQCVF2dDb/mdnlz7YB2yHI9KuN/yygXoc4sYvjcngvYuO sqXAR+m4w1jG5MRo3e0PRegsNskjZnc= 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: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=Eb8+i22W56HZAod8nWQSK472UiI/gYMP48K8do/ME/8=; b=I8BvqJCHhBej30amkNnVaHN6rH u9uO/sVt2f+jz7JcGOSx+zl/f70NIeziA/OlCB4o62GnbbwwGLVv/hBjABtamZ47YbH1j4ZOO4hoc QRtJcd7ZjBN83uepkFoGD0dLghMKRhe+wpJC6dFdWan3E0U1OHu3sqtiCt8ZD7+zxqDSwb0Vbi5uq nOyJHt2ANqAHJbdn5QtHLs8S1Ecyurt3g/m+y5pugk3uH39x/eU2jWFeYf7aR2cgIn9Y2zwwl/ozy mNgR7J1eV9HCBuDFaS061IwieX96E0vWyEzjHBhaHEzX9wLQ2iAiERfPCLB4uIn1bhmMDv7lULBmZ j2uURkZQ==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qDq7X-001vV1-CW; 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 02/12] writeback: Factor writeback_get_batch() out of write_cache_pages() Date: Mon, 26 Jun 2023 18:35:11 +0100 Message-Id: <20230626173521.459345-3-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230626173521.459345-1-willy@infradead.org> References: <20230626173521.459345-1-willy@infradead.org> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 12C59100002 X-Stat-Signature: i3kfu4qyhasiaf579isbwskzeqqxo1a4 X-Rspam-User: X-HE-Tag: 1687800943-72610 X-HE-Meta: U2FsdGVkX198YIVeSaN5B6sgEVBSGvkZr/gSRsEOAjtzKwoHF5KCBYSCtYOBLxWNdqc+MAiOXkgrP1diwHew7gUipbsSkdm1bQyg8DriMv2w/2xRewA5hwfJ/LQdDBg1S1xfP6kOw+93Qsw8xzXaodRIoOMeqtds5NKM7xBfHgfKUv/ij2IY8HSMhrYrJKYwXhz+19b7y2OZQdpM07klgU7JE35Uzj+UDfHJ0EGuM1qbwTvYNNRHCc6ktcpuyFGNrSHRS5Ogi7Hjle6nK4CilA7hQ2qucs52Oawdr8iGvKPBm9sU72B54lpJBl5ZIfiw9V1jL+nblv6w+OBz+Ihi5KNv+ZO9UhuuejGZWfEfK56X/Y6e1I6/STgSpb58Ebwk/ZsANNG2zAXTrgDSl6y2B9/HL4q8em1DIXW8sZw2G80bD45cV3PyX+s2bX/fAlAWmu4gFLxcuE3oslRWqq+2eB3LsB4/Bz5YeqSIJp8lEL9/9dlbrQ0jMvkt1wwJKreeih5RRdjd0NXOrX91+m3sHSHSugX0jo7bN0TXf9gz6SHg7/d07ZmL/8cmtXcI1Fl59AAJIa6QyAJFKcpzbA4XhvbZSVinp15lpp0iBzc0Xq0hDH7PGcoyTpxLCEGYd+bB8D51Qf/xagI/hbAV6H2EZ7JhkbnihfsHcXVp6pqwPjX2uGtt9vG2xKWQHEJs9ZjaCCHPTMd8ZLGG6oFJrj6cKO9n6sZNkZSSTCjfLx1443RERJKL3gjQ7EJBw1u4EJD7j2mrJ7WM70nR6vo5fwz099+Ixc/46jEDiRyBo49+cTUvI/PSHfWWOj3ofxybUq+baIgVB8yxGfPOLa3g0pmI0CrHrOndci/WjxyP76XCGTQ0R33XGg9eyQRWO1850jV26XQBDETfiitDS3nZKFSMHnry4EAKLvsapVqNpYqKoFahDzj/VU2tO65eSfkAzoE/lo+e9GBkRSHPcdDGJmi XMUvDr99 yWtGAgpazRxHjzxR9UM/oT8kF/sSb03ciEbWwlh0fm/KhUadrf4G0moDVSqzDn0wFJ/qpiGZ+V4Gyil9c6TV3Ohvhjv+XSGwKB6BS2hcMkgyF6EVDRhVw5E8Y42Tlnv0bzpGdO3UdF7vPEyrctt2ix44iSslJveSYcbqBfkqrUzfRcAwJsq10Ll4eje4U7PGQ8/YcwjAtnvchwYEnmI2aBcj/zjnH09tRLmpc 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: This simple helper will be the basis of the writeback iterator. To make this work, we need to remember the current index and end positions in writeback_control. Signed-off-by: Matthew Wilcox (Oracle) --- include/linux/writeback.h | 2 ++ mm/page-writeback.c | 49 +++++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 5b7d11f54013..7dd050b40e4b 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h @@ -54,6 +54,8 @@ struct writeback_control { loff_t range_end; struct folio_batch fbatch; + pgoff_t index; + pgoff_t end; /* Inclusive */ pgoff_t done_index; int err; diff --git a/mm/page-writeback.c b/mm/page-writeback.c index abd7c0eebc72..67c7f1564727 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -2378,6 +2378,22 @@ static int writeback_finish(struct address_space *mapping, return wbc->err; } +static void writeback_get_batch(struct address_space *mapping, + struct writeback_control *wbc) +{ + xa_mark_t tag; + + if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages) + tag = PAGECACHE_TAG_TOWRITE; + else + tag = PAGECACHE_TAG_DIRTY; + + folio_batch_release(&wbc->fbatch); + cond_resched(); + filemap_get_folios_tag(mapping, &wbc->index, wbc->end, tag, + &wbc->fbatch); +} + /** * 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 @@ -2414,41 +2430,32 @@ int write_cache_pages(struct address_space *mapping, void *data) { int error; - int nr_folios; - pgoff_t index; - pgoff_t end; /* Inclusive */ - xa_mark_t tag; if (wbc->range_cyclic) { - index = mapping->writeback_index; /* prev offset */ - end = -1; + wbc->index = mapping->writeback_index; /* prev offset */ + wbc->end = -1; } else { - index = wbc->range_start >> PAGE_SHIFT; - end = wbc->range_end >> PAGE_SHIFT; + wbc->index = wbc->range_start >> PAGE_SHIFT; + wbc->end = wbc->range_end >> PAGE_SHIFT; if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) wbc->range_whole = 1; } - if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages) { - tag_pages_for_writeback(mapping, index, end); - tag = PAGECACHE_TAG_TOWRITE; - } else { - tag = PAGECACHE_TAG_DIRTY; - } + if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages) + tag_pages_for_writeback(mapping, wbc->index, wbc->end); - wbc->done_index = index; + wbc->done_index = wbc->index; folio_batch_init(&wbc->fbatch); wbc->err = 0; - while (index <= end) { + while (wbc->index <= wbc->end) { int i; - nr_folios = filemap_get_folios_tag(mapping, &index, end, - tag, &wbc->fbatch); + writeback_get_batch(mapping, wbc); - if (nr_folios == 0) + if (wbc->fbatch.nr == 0) break; - for (i = 0; i < nr_folios; i++) { + for (i = 0; i < wbc->fbatch.nr; i++) { struct folio *folio = wbc->fbatch.folios[i]; wbc->done_index = folio->index; @@ -2524,8 +2531,6 @@ int write_cache_pages(struct address_space *mapping, wbc->sync_mode == WB_SYNC_NONE) return writeback_finish(mapping, wbc, true); } - folio_batch_release(&wbc->fbatch); - cond_resched(); } return writeback_finish(mapping, wbc, false);