* [PATCH] ntfs: fix FITRIM range alignment
@ 2026-08-30 0:15 Jacopo Labardi
2026-08-30 2:48 ` Namjae Jeon
0 siblings, 1 reply; 2+ messages in thread
From: Jacopo Labardi @ 2026-08-30 0:15 UTC (permalink / raw)
To: Namjae Jeon, Hyunchul Lee; +Cc: Christoph Hellwig, ntfs, linux-kernel
ntfs_trim_fs() aligns the start of a free extent up to the device discard
granularity, but derives the discard length by aligning the original extent
length down. When the free extent start is not discard-aligned, adding that
length to the aligned start can extend the discard past the free extent and
into allocated clusters.
For example, with 4 KiB clusters and 32 KiB discard granularity, the free
extent [4 KiB, 36 KiB) becomes the discard range [32 KiB, 64 KiB), so
28 KiB beyond the free extent may be discarded.
Align the absolute end of the free extent down and derive the length from
the two aligned endpoints. Skip extents that contain no full discard unit.
Reproduced with a 4 KiB-cluster NTFS filesystem on scsi_debug configured
for 32 KiB discard granularity and read-zero-after-trim. Before this
change, FITRIM zeroed seven allocated 4 KiB clusters following an unaligned
32 KiB hole. With this change, the same data remains intact across FITRIM
and remount.
Fixes: 11ccc9107dc4 ("ntfs: update runlist handling and cluster allocator")
Cc: stable@vger.kernel.org
Assisted-by: OpenAI Codex:GPT-5.6 Sol Max
Signed-off-by: Jacopo Labardi <jacopolabardi@gmail.com>
---
fs/ntfs/bitmap.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/fs/ntfs/bitmap.c b/fs/ntfs/bitmap.c
index b1436b3151b98..1840b7d84c628 100644
--- a/fs/ntfs/bitmap.c
+++ b/fs/ntfs/bitmap.c
@@ -64,7 +64,7 @@ int ntfs_trim_fs(struct ntfs_volume *vol, struct fstrim_range *range)
end = start_buf;
while (end < end_buf) {
- u64 aligned_start, aligned_count;
+ u64 aligned_start, aligned_end, aligned_count;
u64 start = find_next_zero_bit(bitmap, end_buf - start_buf,
end - start_buf) + start_buf;
if (start >= end_buf)
@@ -74,8 +74,10 @@ int ntfs_trim_fs(struct ntfs_volume *vol, struct fstrim_range *range)
start - start_buf) + start_buf;
aligned_start = ALIGN(ntfs_cluster_to_bytes(vol, start), dq);
- aligned_count =
- ALIGN_DOWN(ntfs_cluster_to_bytes(vol, end - start), dq);
+ aligned_end = ALIGN_DOWN(ntfs_cluster_to_bytes(vol, end), dq);
+ if (aligned_start >= aligned_end)
+ continue;
+ aligned_count = aligned_end - aligned_start;
if (aligned_count >= range->minlen) {
ret = blkdev_issue_discard(vol->sb->s_bdev, aligned_start >> 9,
aligned_count >> 9, GFP_NOFS);
base-commit: ac727d86fb84bdc9626ba9c756c26767459f3083
--
2.55.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] ntfs: fix FITRIM range alignment
2026-08-30 0:15 [PATCH] ntfs: fix FITRIM range alignment Jacopo Labardi
@ 2026-08-30 2:48 ` Namjae Jeon
0 siblings, 0 replies; 2+ messages in thread
From: Namjae Jeon @ 2026-08-30 2:48 UTC (permalink / raw)
To: Jacopo Labardi; +Cc: Hyunchul Lee, Christoph Hellwig, ntfs, linux-kernel
On Sun, Aug 30, 2026 at 9:15 AM Jacopo Labardi <jacopolabardi@gmail.com> wrote:
>
> ntfs_trim_fs() aligns the start of a free extent up to the device discard
> granularity, but derives the discard length by aligning the original extent
> length down. When the free extent start is not discard-aligned, adding that
> length to the aligned start can extend the discard past the free extent and
> into allocated clusters.
>
> For example, with 4 KiB clusters and 32 KiB discard granularity, the free
> extent [4 KiB, 36 KiB) becomes the discard range [32 KiB, 64 KiB), so
> 28 KiB beyond the free extent may be discarded.
>
> Align the absolute end of the free extent down and derive the length from
> the two aligned endpoints. Skip extents that contain no full discard unit.
>
> Reproduced with a 4 KiB-cluster NTFS filesystem on scsi_debug configured
> for 32 KiB discard granularity and read-zero-after-trim. Before this
> change, FITRIM zeroed seven allocated 4 KiB clusters following an unaligned
> 32 KiB hole. With this change, the same data remains intact across FITRIM
> and remount.
>
> Fixes: 11ccc9107dc4 ("ntfs: update runlist handling and cluster allocator")
> Cc: stable@vger.kernel.org
> Assisted-by: OpenAI Codex:GPT-5.6 Sol Max
> Signed-off-by: Jacopo Labardi <jacopolabardi@gmail.com>
Applied it to #ntfs-next.
Thanks!
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-30 2:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-30 0:15 [PATCH] ntfs: fix FITRIM range alignment Jacopo Labardi
2026-08-30 2:48 ` Namjae Jeon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®