diff options
| author | Namjae Jeon <linkinjeon@kernel.org> | 2026-09-08 15:52:46 +0900 |
|---|---|---|
| committer | Namjae Jeon <linkinjeon@kernel.org> | 2026-09-13 11:41:34 +0900 |
| commit | 6d8c197c9992659a65525a07de4368c8401fdda7 (patch) | |
| tree | 5834c415b8d524717056c7cb7ce392244551df36 /tools/perf/scripts/python/flamegraph.py | |
| parent | bc35965f6940a9bf834d54187b6088b8eb09206d (diff) | |
| download | linux-next-6d8c197c9992659a65525a07de4368c8401fdda7.tar.gz linux-next-6d8c197c9992659a65525a07de4368c8401fdda7.zip | |
ntfs: use dynamic MFT tail reservation
The ntfs MFT allocator historically treated records below 64 as a
permanent extension area and stopped searching for $MFT extent records
after record 400. Windows and ntfs3 do not maintain that on-disk
layout, so an NTFS volume can have free MFT records while ntfs returns
-ENOSPC when $MFT:$DATA needs another mapping-pairs extent.
Use record 24 as the first normal record and maintain an in-memory tail
reserve of up to four initialized records. Normal allocations skip the
reserve, while $MFT metadata extent allocations consume it. When a new
tail is initialized, allocate at least two records and reserve the
following records to avoid recursive allocation during MFT extension.
Existing free runs can seed the reserve on volumes mounted without one.
For $MFT/$DATA, constrain an extent record to a record whose byte offset
is below the new extent lowest VCN byte offset. This preserves bootstrap
reachability without an arbitrary record 400 limit. If no safe record is
available, validate and use reserved records 15, 12, 13, and 14 as
bootstrap candidates while keeping their MFT bitmap entries in use.
This allows existing Windows volumes to extend $MFT using their actual
free records and prevents normal file allocation from consuming
the metadata reserve.
Fixes: 115380f9a2f9 ("ntfs: update mft operations")
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Diffstat (limited to 'tools/perf/scripts/python/flamegraph.py')
0 files changed, 0 insertions, 0 deletions
