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 AC4AEEB64D9 for ; Mon, 26 Jun 2023 17:35:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 93C2C8D0010; Mon, 26 Jun 2023 13:35:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 89BC28D000C; Mon, 26 Jun 2023 13:35:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6EF2C8D0010; Mon, 26 Jun 2023 13:35:49 -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 5386C8D000C for ; Mon, 26 Jun 2023 13:35:49 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 1B2831A0358 for ; Mon, 26 Jun 2023 17:35:49 +0000 (UTC) X-FDA: 80945601618.26.5DAFB5B Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf14.hostedemail.com (Postfix) with ESMTP id 20BB7100003 for ; Mon, 26 Jun 2023 17:35:46 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=GH5JrXCe; dmarc=none; spf=none (imf14.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=1687800947; 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=v6PqW+r7ocyNrYaEadNjC9yXbOPBKSknhOaHoHVmJpk=; b=w0LKBtd1SFIxFWNBwdAovKwqb8kVR6cZQVjd3UEbEAnTAwXby/97JJoRTiHV2hHhOXV5fG Ibr2j5Cerm2w3Ws4FqAqU6NNJ2nFjObEwIO0PnG6aLp7bZe6HIO+/V+RyhvnekXuU+qTa+ jJVin2y8bq07IDz63DnMHxhs3ysb4ms= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=GH5JrXCe; dmarc=none; spf=none (imf14.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=1687800947; a=rsa-sha256; cv=none; b=G/tzRQkix9dqtnNHIBrE7dOQoBEWWJCeLaj7KJLQ++HgZQ4ATVrEEQvUJ9iQc3TS2jPUw5 r2cMhkylE2cW7tYuRUMpijCm7/mZf9EhZZxAvn0rhCW4q7R0SkMi3pkz4+a68aCaRV4DNQ xlLtzkKoGR3AGxQF2BfYD6ZO82a0KMM= 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=v6PqW+r7ocyNrYaEadNjC9yXbOPBKSknhOaHoHVmJpk=; b=GH5JrXCeoj/GgOPu3iWjttA4pE R9WD1MiCBTid7jEiZMHLeGsbpndBGL7pWST3FhxBWC5vruJtb8/vXrvH0+f62gbXnsXZRlsky8pJq 9+M9D8g1czSuBHKCI6CMEd9w5TLyOR/pLQ95L/J/rI+M7DmyKqKs1a6+MLyLQd2/ds8H1fO846FuZ n8cEC0dArDnoP6JGY1ECb59L60b5jQv8FpFk5u65nzfMXMt5F7+6Z/YkjT4frnabjEqYJXLozDGS7 3U7dQlvwCi5sQU/ji6nNPG8IbAEl5U5k7LHM+ju+XzD5CgDWD6fjTcbsn7X1Y6zVcs+D6Xlzu9mZ+ XAvaJBew==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qDq7X-001vV3-FD; 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 03/12] writeback: Factor should_writeback_folio() out of write_cache_pages() Date: Mon, 26 Jun 2023 18:35:12 +0100 Message-Id: <20230626173521.459345-4-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 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 20BB7100003 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: y38g4mymcaeh65cs7ku98yn1f4484d1o X-HE-Tag: 1687800946-942413 X-HE-Meta: U2FsdGVkX18L9jSFdd+fg+waoeCYGlLAmWYoihoLWCsBwcdjm4oMZK9uzynleLpFNMeeFjhEgqhvOgaBbAfvLLUmH8sJLMnRzgUYy1YX5HN2fO8W7sHgZ1sZwnjxf47QZ6CMXw2FHmnlAK5x1fHy1XR7sjVwE5Femol4VNNbczIRCMMUY5FFlnwhdTP7/n9c7JOEEGHnSISxqOkvVlFdWsiiHOLCjBSmuO8g2ipE9UR3nSHjTM/EBWUd6PIoj4iVNhrV1onJFzl/NZWGkig4qPLh4wticyIUG0qh0HwtBXTjZC5UCCqGMR34gjk/zeBG9MVjvJxPcdCjgSM4GAZ0qonlVFD1tyei8XHMMUtOken75SwrWfXgSrhBpKhWvjGP1B/xK0m3YdbpZvRY08Iy76I9kyXnOeuQBjA/8/n4tqV5RZqDIDLfonHKfS4Y4pDue9JTcuWL1TVn1R/hiiLsnzwcKhVBVo8Pp1neKc/ecuaUVP3HkfKY4INy0uFu+KTPKxGRyVA55vk8KJb4NLkM4JDp0FAuYQTlJFwRWJgThUcLbxVxYqOMhC9Pd8MQwAj8gBbMP+sDkXBzV4JVxn7XgmbWENZksegTeaM6HMZB6S4c2Y6d4KkAgL5arwACSkcdmLyl2ZL8PWD8/a3djmmVA6ymTgTyvUchyFkyUUjWBgpywqKxfQ3VovpX7L+mL6O5pKudfT6p710vsge8swiUhaPGo/ljCwM8hSf3xREI/KgUk6ES4bbMgp6EODlKWg6t90fhOypLeis1BQtdh3c8KADAilfcODCNL1qlC+K2HgHFKbi20+TRTdxR1j3cuQ0OP/Ua6tMwaMgte7OlXgPlSx7zr6RvKnc6iGjrIK6bs0cr1XzTFZSxqwlvVtk5eVVHbCN99j6sBtBDH2IUzM9EvJPJHSUJDrlE3iwyZgHU1GOersRteoxV7nzjNuzSXHl0hyiuOrWV52c67bNpzTP Tb/jV58M sA7Mz4q5VCc2SUMZ81VvWHPqDuKt8DcoUIeo8AzMAbricNL1JrsD9HIyAfH71o8+GNOL0JncHmXt38jCr6tcwTvxxHa39MW8RKZwLLZLNywW0mbCpx9I2sguCZpLegSmzMzdy/FXU0XqEwOCUlC3Sfe6Hqz7jzEGjfoDuEpWuySELnnsSWXNMARpq2hafVQHy+M0yTxqAFcSfKtGa959xdWqoO38MDAVyQsPU 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: Reduce write_cache_pages() by about 30 lines; much of it is commentary, but it all bundles nicely into an obvious function. Signed-off-by: Matthew Wilcox (Oracle) --- mm/page-writeback.c | 60 +++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 67c7f1564727..54f2972dab45 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -2394,6 +2394,37 @@ static void writeback_get_batch(struct address_space *mapping, &wbc->fbatch); } +static bool should_writeback_folio(struct address_space *mapping, + struct writeback_control *wbc, struct folio *folio) +{ + /* + * Folio truncated or invalidated. We can freely skip it then, + * even for data integrity operations: the folio has disappeared + * concurrently, so there could be no real expectation of this + * data integrity operation even if there is now a new, dirty + * folio at the same pagecache index. + */ + if (unlikely(folio->mapping != mapping)) + return false; + + /* Did somebody write it for us? */ + if (!folio_test_dirty(folio)) + return false; + + if (folio_test_writeback(folio)) { + if (wbc->sync_mode != WB_SYNC_NONE) + folio_wait_writeback(folio); + else + return false; + } + + BUG_ON(folio_test_writeback(folio)); + if (!folio_clear_dirty_for_io(folio)) + return false; + + return true; +} + /** * 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 @@ -2461,38 +2492,13 @@ int write_cache_pages(struct address_space *mapping, wbc->done_index = folio->index; folio_lock(folio); - - /* - * Page truncated or invalidated. We can freely skip it - * then, even for data integrity operations: the page - * has disappeared concurrently, so there could be no - * real expectation of this data integrity operation - * even if there is now a new, dirty page at the same - * pagecache address. - */ - if (unlikely(folio->mapping != mapping)) { -continue_unlock: + if (!should_writeback_folio(mapping, wbc, folio)) { folio_unlock(folio); continue; } - if (!folio_test_dirty(folio)) { - /* someone wrote it for us */ - goto continue_unlock; - } - - if (folio_test_writeback(folio)) { - if (wbc->sync_mode != WB_SYNC_NONE) - folio_wait_writeback(folio); - else - goto continue_unlock; - } - - BUG_ON(folio_test_writeback(folio)); - if (!folio_clear_dirty_for_io(folio)) - goto continue_unlock; - trace_wbc_writepage(wbc, inode_to_bdi(mapping->host)); + error = writepage(folio, wbc, data); if (unlikely(error)) { /* -- 2.39.2