fiemap: single-ioctl rescan in fiemap_scan_extent - #14
Merged
Conversation
fiemap_scan_extent() only needs the first extent's physical offset, but went through do_fiemap_range(), which issues a count ioctl, a calloc, and a second ioctl to map the whole range. Add fiemap_first_extent_poff(): a single fiemap ioctl into a one-extent stack buffer, no count pass, no allocation. Follow-up to the ranged-fiemap change (port of markfasheh#402). On an extent-dedupe run over a ~400-extent shared region, FIEMAP ioctls during dedupe dropped from 1336 to 660 (~2x on that path). Data is preserved (file digests unchanged) and sharing is unaffected; 39 integration tests pass. Co-Authored-By: Claude Fable 5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to the markfasheh#402 port.
fiemap_scan_extent()only reads the first extent's physical offset, but went throughdo_fiemap_range()— which does a count ioctl, acalloc, then a second ioctl to map the whole range.Adds
fiemap_first_extent_poff(): a singleFS_IOC_FIEMAPioctl into a one-extent stack buffer (no count pass, no allocation), and uses it infiemap_scan_extent(). Keeps the ioctl infiemap.cbehind a documented helper.Measured on an extent-dedupe run over a ~400-extent shared region: FIEMAP ioctls during dedupe 1336 → 660 (~2×) on that path. Data preserved (file digests unchanged before/after), sharing unaffected, 39 integration tests pass.
🤖 Generated with Claude Code