All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lance Yang <lance.yang@linux.dev>
To: usama.arif@linux.dev, willy@infradead.org
Cc: akpm@linux-foundation.org, linux-fsdevel@vger.kernel.org,
	linux-mm@kvack.org, Lance Yang <lance.yang@linux.dev>
Subject: Re: [PATCH v2 2/6] ntfs: Remove use of __folio_index in handle_bounds_compressed_page()
Date: Sat, 13 Jun 2026 15:06:01 +0800	[thread overview]
Message-ID: <20260613070601.90382-1-lance.yang@linux.dev> (raw)
In-Reply-To: <fda62f90-2c8c-48ec-88ae-310bb5adaa37@linux.dev>


On Tue, Jun 09, 2026 at 04:55:03PM +0100, Usama Arif wrote:
[...]
>> 
>> Are you saying my transformation is non-equivalent (and I have
>> introduced a bug), or are you noting that this is a pre-existing bug?
>> 
>> If the latter, is the error that the else branch exists, or did the
>> author intend to write a different test?
>
>The transformation is non-equivalent.

Right. Let me try to make one case easier to see.

Assume:

  PAGE_SIZE             = 4096
  page->__folio_index   = 2
  pos                   = 8192
  initialized_size      = 9000
  i_size                = 12000

Before the patch, the relevant code was:

	if ((page->__folio_index >= (initialized_size >> PAGE_SHIFT)) &&
			(initialized_size < i_size)) {
[...]

		if (((s64)page->__folio_index << PAGE_SHIFT) >= initialized_size) {
			clear_page(kp);
			return;
		}
		kp_ofs = initialized_size & ~PAGE_MASK;
		memset(kp + kp_ofs, 0, PAGE_SIZE - kp_ofs);
	}

For this page, the outer check was true:

  page->__folio_index >= (initialized_size >> PAGE_SHIFT)
  2 >= (9000 >> 12)
  2 >= 2

and initialized_size < i_size was also true:

  initialized_size < i_size
  9000 < 12000

but the inner check was false:

  ((s64)page->__folio_index << PAGE_SHIFT) >= initialized_size
  (2 << 12) >= 9000
  8192 >= 9000

So the old code reached the tail-zeroing case:

  kp_ofs = 9000 & ~PAGE_MASK = 808

and zeroed page offset 808..4095, i.e. file offset 9000..12287.

After this patch, the outer check became:

loff_t pos = page_offset(page);

if ((pos >= initialized_size) && (initialized_size < i_size)) 

For the same page:

  pos >= initialized_size
  8192 >= 9000

so the first half of the outer check is false, and the block is skipped
entirely.

Cheers, Lance


  reply	other threads:[~2026-06-13  7:06 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-08 21:06 [PATCH v2 0/6] Remove __folio_index again Matthew Wilcox (Oracle)
2026-06-08 21:06 ` [PATCH v2 1/6] ntfs: Inline zero_partial_compressed_page() Matthew Wilcox (Oracle)
2026-06-09  0:18   ` Hyunchul Lee
2026-06-08 21:06 ` [PATCH v2 2/6] ntfs: Remove use of __folio_index in handle_bounds_compressed_page() Matthew Wilcox (Oracle)
2026-06-09  0:19   ` Hyunchul Lee
2026-06-09 13:17   ` Usama Arif
2026-06-09 14:34     ` Matthew Wilcox
2026-06-09 15:55       ` Usama Arif
2026-06-13  7:06         ` Lance Yang [this message]
2026-06-08 21:06 ` [PATCH v2 3/6] ntfs: Use zero_user_segment() " Matthew Wilcox (Oracle)
2026-06-09  0:20   ` Hyunchul Lee
2026-06-09 13:07   ` Usama Arif
2026-06-13  9:41   ` Lance Yang
2026-06-08 21:06 ` [PATCH v2 4/6] ntfs: Remove references to page->__folio_index Matthew Wilcox (Oracle)
2026-06-09  0:22   ` Hyunchul Lee
2026-06-08 21:06 ` [PATCH v2 5/6] show_page_info: Remove printing of page index Matthew Wilcox (Oracle)
2026-06-09 11:59   ` Ye Liu
2026-06-10 20:02     ` Matthew Wilcox
2026-06-13  3:02       ` Ye Liu
2026-06-13  3:18         ` Matthew Wilcox
2026-06-13  4:16           ` Ye Liu
2026-06-13 16:15             ` Matthew Wilcox
2026-06-09 18:44   ` David Hildenbrand (Arm)
2026-06-10  8:23   ` Vishal Moola
2026-06-08 21:06 ` [PATCH v2 6/6] mm: Remove __folio_index Matthew Wilcox (Oracle)
2026-06-09 18:43   ` David Hildenbrand (Arm)
2026-06-10  8:24   ` Vishal Moola
2026-06-09  5:06 ` [PATCH v2 0/6] Remove __folio_index again Namjae Jeon

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=20260613070601.90382-1-lance.yang@linux.dev \
    --to=lance.yang@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=usama.arif@linux.dev \
    --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.