diff options
| author | Darrick J. Wong <djwong@kernel.org> | 2026-07-13 23:04:08 -0700 |
|---|---|---|
| committer | Carlos Maiolino <cem@kernel.org> | 2026-07-14 11:01:47 +0200 |
| commit | a1caeeadbf57ff86dfc3454398c46de86056a74e (patch) | |
| tree | be9b311ed109934a358280644620293ddcd1f515 /scripts/Makefile.thinlto | |
| parent | 2f4acd0fcd862e22eab45690ec2c08c80b6ef2e7 (diff) | |
xfs: don't replace the wrong part of the cow fork
LOLLM points out that xfs_iext_lookup_extent can return a @got where
got->br_startoff < startoff. In this case, xrep_cow_replace_range
replaces the entire mapping instead of just the part that had been
marked bad in the bitmap, but advances the bitmap cursor in
xrep_cow_replace by the amount replaced. As a result, we fail to
replace the end of the bad range, and replace part of the good range.
Fix this by rewriting the replace method to handle replacing the middle
of a cow fork mapping. This we do by returning both the current mapping
as @got, and the subset of the mapping that we want to replace as @rep,
using @rep to store the results of the new allocation, and comparing
@rep to @got to figure out the exact transformations needed.
Cc: stable@vger.kernel.org # v6.8
Fixes: dbbdbd0086320a ("xfs: repair problems in CoW forks")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Assisted-by: LOLLM # finding obvious bugs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions
