From: Qu Wenruo <wqu@suse.com>
To: Tal Zussman <tz2294@columbia.edu>,
Qu Wenruo <quwenruo.btrfs@gmx.com>,
David Sterba <dsterba@suse.com>, Chris Mason <mason@kernel.org>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 10/10] btrfs: rename io_ctl page helpers to folio helpers
Date: Mon, 7 Sep 2026 09:53:14 +0930 [thread overview]
Message-ID: <e1dd5a75-9a67-4bc6-b8d8-bfff79b5b907@suse.com> (raw)
In-Reply-To: <ee1e1ce6-123b-4f98-bf1c-ef8e5d892baa@columbia.edu>
在 2026/9/7 08:50, Tal Zussman 写道:
> On 9/7/26 2:12 AM, Qu Wenruo wrote:
>> 在 2026/9/7 07:59, Tal Zussman 写道:
>>> These functions now operate on folios. Rename them and update comments
>>> accordingly.
>>
>> Again, v1 space cache is fully disabled since commit 545e560a5b0f
>> ("btrfs: disable v1 space cache"), it would make more sense to remove
>> those functions other than doing a rename for codes that we're going to
>> remove anyway.
>>
>
> No problem, I can drop this and patch 8. I wasn't sure what the removal
> timeline looked like and wanted to keep things consistent.
Would appreciate a lot if you are also interested in removing those v1
space cache code.
>
>>>
>>> Signed-off-by: Tal Zussman <tz2294@columbia.edu>
>>> ---
>>> fs/btrfs/free-space-cache.c | 78 ++++++++++++++++++++++-----------------------
>>> 1 file changed, 39 insertions(+), 39 deletions(-)
>>>
>>> diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
>>> index ab933ee6f19c..73cfc1d1a5c1 100644
>>> --- a/fs/btrfs/free-space-cache.c
>>> +++ b/fs/btrfs/free-space-cache.c
>>> @@ -406,7 +406,7 @@ static void io_ctl_free(struct btrfs_io_ctl *io_ctl)
>>> io_ctl->folios = NULL;
>>> }
>>>
>>> -static void io_ctl_unmap_page(struct btrfs_io_ctl *io_ctl)
>>> +static void io_ctl_unmap_folio(struct btrfs_io_ctl *io_ctl)
>>> {
>>> if (io_ctl->cur) {
>>> io_ctl->cur = NULL;
>>> @@ -414,7 +414,7 @@ static void io_ctl_unmap_page(struct btrfs_io_ctl *io_ctl)
>>> }
>>> }
>>>
>>> -static void io_ctl_map_page(struct btrfs_io_ctl *io_ctl, int clear)
>>> +static void io_ctl_map_folio(struct btrfs_io_ctl *io_ctl, int clear)
>>> {
>>> ASSERT(io_ctl->index < io_ctl->num_folios);
>>> io_ctl->folio = io_ctl->folios[io_ctl->index++];
>>> @@ -425,11 +425,11 @@ static void io_ctl_map_page(struct btrfs_io_ctl *io_ctl, int clear)
>>> clear_page(io_ctl->cur);
>>> }
>>>
>>> -static void io_ctl_drop_pages(struct btrfs_io_ctl *io_ctl)
>>> +static void io_ctl_drop_folios(struct btrfs_io_ctl *io_ctl)
>>> {
>>> int i;
>>>
>>> - io_ctl_unmap_page(io_ctl);
>>> + io_ctl_unmap_folio(io_ctl);
>>>
>>> for (i = 0; i < io_ctl->num_folios; i++) {
>>> if (io_ctl->folios[i]) {
>>> @@ -439,7 +439,7 @@ static void io_ctl_drop_pages(struct btrfs_io_ctl *io_ctl)
>>> }
>>> }
>>>
>>> -static int io_ctl_prepare_pages(struct btrfs_io_ctl *io_ctl, bool uptodate)
>>> +static int io_ctl_prepare_folios(struct btrfs_io_ctl *io_ctl, bool uptodate)
>>> {
>>> struct folio *folio;
>>> struct inode *inode = io_ctl->inode;
>>> @@ -453,7 +453,7 @@ static int io_ctl_prepare_pages(struct btrfs_io_ctl *io_ctl, bool uptodate)
>>> FGP_LOCK | FGP_ACCESSED | FGP_CREAT,
>>> mask);
>>> if (IS_ERR(folio)) {
>>> - io_ctl_drop_pages(io_ctl);
>>> + io_ctl_drop_folios(io_ctl);
>>> return PTR_ERR(folio);
>>> }
>>>
>>> @@ -461,7 +461,7 @@ static int io_ctl_prepare_pages(struct btrfs_io_ctl *io_ctl, bool uptodate)
>>> if (ret < 0) {
>>> folio_unlock(folio);
>>> folio_put(folio);
>>> - io_ctl_drop_pages(io_ctl);
>>> + io_ctl_drop_folios(io_ctl);
>>> return ret;
>>> }
>>>
>>> @@ -472,13 +472,13 @@ static int io_ctl_prepare_pages(struct btrfs_io_ctl *io_ctl, bool uptodate)
>>> if (folio->mapping != inode->i_mapping) {
>>> btrfs_err(BTRFS_I(inode)->root->fs_info,
>>> "free space cache page truncated");
>>> - io_ctl_drop_pages(io_ctl);
>>> + io_ctl_drop_folios(io_ctl);
>>> return -EIO;
>>> }
>>> if (!folio_test_uptodate(folio)) {
>>> btrfs_err(BTRFS_I(inode)->root->fs_info,
>>> "error reading free space cache");
>>> - io_ctl_drop_pages(io_ctl);
>>> + io_ctl_drop_folios(io_ctl);
>>> return -EIO;
>>> }
>>> }
>>> @@ -492,7 +492,7 @@ static int io_ctl_prepare_pages(struct btrfs_io_ctl *io_ctl, bool uptodate)
>>>
>>> static void io_ctl_set_generation(struct btrfs_io_ctl *io_ctl, u64 generation)
>>> {
>>> - io_ctl_map_page(io_ctl, 1);
>>> + io_ctl_map_folio(io_ctl, 1);
>>>
>>> /*
>>> * Skip the csum areas. If we don't check crcs then we just have a
>>> @@ -521,7 +521,7 @@ static int io_ctl_check_generation(struct btrfs_io_ctl *io_ctl, u64 generation)
>>> btrfs_err_rl(io_ctl->fs_info,
>>> "space cache generation (%llu) does not match inode (%llu)",
>>> cache_gen, generation);
>>> - io_ctl_unmap_page(io_ctl);
>>> + io_ctl_unmap_folio(io_ctl);
>>> return -EIO;
>>> }
>>> io_ctl->cur += sizeof(u64);
>>> @@ -539,7 +539,7 @@ static void io_ctl_set_crc(struct btrfs_io_ctl *io_ctl, int index)
>>>
>>> crc = crc32c(crc, io_ctl->orig + offset, PAGE_SIZE - offset);
>>> btrfs_crc32c_final(crc, (u8 *)&crc);
>>> - io_ctl_unmap_page(io_ctl);
>>> + io_ctl_unmap_folio(io_ctl);
>>> tmp = folio_address(io_ctl->folios[0]);
>>> tmp += index;
>>> *tmp = crc;
>>> @@ -561,13 +561,13 @@ static int io_ctl_check_crc(struct btrfs_io_ctl *io_ctl, int index)
>>> tmp += index;
>>> val = *tmp;
>>>
>>> - io_ctl_map_page(io_ctl, 0);
>>> + io_ctl_map_folio(io_ctl, 0);
>>> crc = crc32c(crc, io_ctl->orig + offset, PAGE_SIZE - offset);
>>> btrfs_crc32c_final(crc, (u8 *)&crc);
>>> if (val != crc) {
>>> btrfs_err_rl(io_ctl->fs_info,
>>> "csum mismatch on free space cache");
>>> - io_ctl_unmap_page(io_ctl);
>>> + io_ctl_unmap_folio(io_ctl);
>>> return -EIO;
>>> }
>>>
>>> @@ -595,12 +595,12 @@ static int io_ctl_add_entry(struct btrfs_io_ctl *io_ctl, u64 offset, u64 bytes,
>>>
>>> io_ctl_set_crc(io_ctl, io_ctl->index - 1);
>>>
>>> - /* No more pages to map */
>>> + /* No more folios to map */
>>> if (io_ctl->index >= io_ctl->num_folios)
>>> return 0;
>>>
>>> - /* map the next page */
>>> - io_ctl_map_page(io_ctl, 1);
>>> + /* map the next folio */
>>> + io_ctl_map_folio(io_ctl, 1);
>>> return 0;
>>> }
>>>
>>> @@ -610,24 +610,24 @@ static int io_ctl_add_bitmap(struct btrfs_io_ctl *io_ctl, void *bitmap)
>>> return -ENOSPC;
>>>
>>> /*
>>> - * If we aren't at the start of the current page, unmap this one and
>>> + * If we aren't at the start of the current folio, unmap this one and
>>> * map the next one if there is any left.
>>> */
>>> if (io_ctl->cur != io_ctl->orig) {
>>> io_ctl_set_crc(io_ctl, io_ctl->index - 1);
>>> if (io_ctl->index >= io_ctl->num_folios)
>>> return -ENOSPC;
>>> - io_ctl_map_page(io_ctl, 0);
>>> + io_ctl_map_folio(io_ctl, 0);
>>> }
>>>
>>> copy_page(io_ctl->cur, bitmap);
>>> io_ctl_set_crc(io_ctl, io_ctl->index - 1);
>>> if (io_ctl->index < io_ctl->num_folios)
>>> - io_ctl_map_page(io_ctl, 0);
>>> + io_ctl_map_folio(io_ctl, 0);
>>> return 0;
>>> }
>>>
>>> -static void io_ctl_zero_remaining_pages(struct btrfs_io_ctl *io_ctl)
>>> +static void io_ctl_zero_remaining_folios(struct btrfs_io_ctl *io_ctl)
>>> {
>>> /*
>>> * If we're not on the boundary we know we've modified the page and we
>>> @@ -636,10 +636,10 @@ static void io_ctl_zero_remaining_pages(struct btrfs_io_ctl *io_ctl)
>>> if (io_ctl->cur != io_ctl->orig)
>>> io_ctl_set_crc(io_ctl, io_ctl->index - 1);
>>> else
>>> - io_ctl_unmap_page(io_ctl);
>>> + io_ctl_unmap_folio(io_ctl);
>>>
>>> while (io_ctl->index < io_ctl->num_folios) {
>>> - io_ctl_map_page(io_ctl, 1);
>>> + io_ctl_map_folio(io_ctl, 1);
>>> io_ctl_set_crc(io_ctl, io_ctl->index - 1);
>>> }
>>> }
>>> @@ -666,7 +666,7 @@ static int io_ctl_read_entry(struct btrfs_io_ctl *io_ctl,
>>> if (io_ctl->size >= sizeof(struct btrfs_free_space_entry))
>>> return 0;
>>>
>>> - io_ctl_unmap_page(io_ctl);
>>> + io_ctl_unmap_folio(io_ctl);
>>>
>>> return 0;
>>> }
>>> @@ -681,7 +681,7 @@ static int io_ctl_read_bitmap(struct btrfs_io_ctl *io_ctl,
>>> return ret;
>>>
>>> copy_page(entry->bitmap, io_ctl->cur);
>>> - io_ctl_unmap_page(io_ctl);
>>> + io_ctl_unmap_folio(io_ctl);
>>>
>>> return 0;
>>> }
>>> @@ -797,7 +797,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
>>>
>>> readahead_cache(inode);
>>>
>>> - ret = io_ctl_prepare_pages(&io_ctl, true);
>>> + ret = io_ctl_prepare_folios(&io_ctl, true);
>>> if (ret)
>>> goto out;
>>>
>>> @@ -869,7 +869,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
>>> num_entries--;
>>> }
>>>
>>> - io_ctl_unmap_page(&io_ctl);
>>> + io_ctl_unmap_folio(&io_ctl);
>>>
>>> /*
>>> * We add the bitmaps at the end of the entries in order that
>>> @@ -882,13 +882,13 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
>>> goto free_cache;
>>> }
>>>
>>> - io_ctl_drop_pages(&io_ctl);
>>> + io_ctl_drop_folios(&io_ctl);
>>> ret = 1;
>>> out:
>>> io_ctl_free(&io_ctl);
>>> return ret;
>>> free_cache:
>>> - io_ctl_drop_pages(&io_ctl);
>>> + io_ctl_drop_folios(&io_ctl);
>>>
>>> spin_lock(&ctl->tree_lock);
>>> __btrfs_remove_free_space_cache(ctl);
>>> @@ -1280,7 +1280,7 @@ cleanup_write_cache_enospc(struct inode *inode,
>>> struct btrfs_io_ctl *io_ctl,
>>> struct extent_state **cached_state)
>>> {
>>> - io_ctl_drop_pages(io_ctl);
>>> + io_ctl_drop_folios(io_ctl);
>>> btrfs_unlock_extent(&BTRFS_I(inode)->io_tree, 0, i_size_read(inode) - 1,
>>> cached_state);
>>> }
>>> @@ -1297,7 +1297,7 @@ static int __btrfs_wait_cache_io(struct btrfs_root *root,
>>> if (!inode)
>>> return 0;
>>>
>>> - /* Flush the dirty pages in the cache file. */
>>> + /* Flush the dirty folios in the cache file. */
>>> ret = flush_dirty_cache(inode);
>>> if (ret)
>>> goto out;
>>> @@ -1402,8 +1402,8 @@ static int __btrfs_write_out_cache(struct inode *inode,
>>> spin_unlock(&block_group->lock);
>>> }
>>>
>>> - /* Lock all pages first so we can lock the extent safely. */
>>> - ret = io_ctl_prepare_pages(io_ctl, false);
>>> + /* Lock all folios first so we can lock the extent safely. */
>>> + ret = io_ctl_prepare_folios(io_ctl, false);
>>> if (ret)
>>> goto out_unlock;
>>>
>>> @@ -1443,10 +1443,10 @@ static int __btrfs_write_out_cache(struct inode *inode,
>>> if (ret)
>>> goto out_nospc;
>>>
>>> - /* Zero out the rest of the pages just to make sure */
>>> - io_ctl_zero_remaining_pages(io_ctl);
>>> + /* Zero out the rest of the folios just to make sure */
>>> + io_ctl_zero_remaining_folios(io_ctl);
>>>
>>> - /* Everything is written out, now we dirty the pages in the file. */
>>> + /* Everything is written out, now we dirty the folios in the file. */
>>> i_size = i_size_read(inode);
>>> for (int i = 0; i < round_up(i_size, PAGE_SIZE) / PAGE_SIZE; i++) {
>>> u64 dirty_start = i * PAGE_SIZE;
>>> @@ -1461,17 +1461,17 @@ static int __btrfs_write_out_cache(struct inode *inode,
>>> if (block_group->flags & BTRFS_BLOCK_GROUP_DATA)
>>> up_write(&block_group->data_rwsem);
>>> /*
>>> - * Release the pages and unlock the extent, we will flush
>>> + * Release the folios and unlock the extent, we will flush
>>> * them out later
>>> */
>>> - io_ctl_drop_pages(io_ctl);
>>> + io_ctl_drop_folios(io_ctl);
>>> io_ctl_free(io_ctl);
>>>
>>> btrfs_unlock_extent(&BTRFS_I(inode)->io_tree, 0, i_size_read(inode) - 1,
>>> &cached_state);
>>>
>>> /*
>>> - * at this point the pages are under IO and we're happy,
>>> + * at this point the folios are under IO and we're happy,
>>> * The caller is responsible for waiting on them and updating
>>> * the cache and the inode
>>> */
>>>
>>
>
next prev parent reply other threads:[~2026-09-07 0:23 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-06 22:29 [PATCH 00/10] btrfs: convert some struct page users to folios Tal Zussman
2026-09-06 22:29 ` [PATCH 01/10] btrfs: tests: rename process_page_range() to process_folio_range() Tal Zussman
2026-09-07 6:30 ` Qu Wenruo
2026-09-06 22:29 ` [PATCH 02/10] btrfs: tests: convert test_find_delalloc() to use folios Tal Zussman
2026-09-07 6:29 ` Qu Wenruo
2026-09-06 22:29 ` [PATCH 03/10] btrfs: tests: use eb folio helpers in extent buffer memory checks Tal Zussman
2026-09-07 6:33 ` Qu Wenruo
2026-09-06 22:29 ` [PATCH 04/10] btrfs: convert btrfs_compr_pool_scan() to use folios Tal Zussman
2026-09-07 6:36 ` Qu Wenruo
2026-09-06 22:29 ` [PATCH 05/10] btrfs: convert heuristic_collect_sample() " Tal Zussman
2026-09-07 6:44 ` Qu Wenruo
2026-09-06 22:29 ` [PATCH 06/10] btrfs: fix stale function references in compression comments Tal Zussman
2026-09-07 6:44 ` Qu Wenruo
2026-09-06 22:29 ` [PATCH 07/10] btrfs: use folios for reading super blocks from the block device Tal Zussman
2026-09-07 6:51 ` Qu Wenruo
2026-09-06 22:29 ` [PATCH 08/10] btrfs: keep the free space cache inode mapping at order 0 Tal Zussman
2026-09-06 23:10 ` Qu Wenruo
2026-09-06 22:29 ` [PATCH 09/10] btrfs: convert struct btrfs_io_ctl to use folios Tal Zussman
2026-09-06 22:29 ` [PATCH 10/10] btrfs: rename io_ctl page helpers to folio helpers Tal Zussman
2026-09-06 23:12 ` Qu Wenruo
2026-09-06 23:20 ` Tal Zussman
2026-09-07 0:23 ` Qu Wenruo [this message]
2026-09-07 0:58 ` Tal Zussman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e1dd5a75-9a67-4bc6-b8d8-bfff79b5b907@suse.com \
--to=wqu@suse.com \
--cc=dsterba@suse.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mason@kernel.org \
--cc=quwenruo.btrfs@gmx.com \
--cc=tz2294@columbia.edu \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.