Compressed receive with different ashift can result in incorrect PSIZE on disk (#8462) #12522
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.
Motivation and Context
See #8462
Description
We round up the
psize
to the nearest multiple of the asize or to the lsize, whichever is smaller. Once that's done, we allocate a new buffer of the appropriate size, zero the tail, and copy the data into it. This adds a small performance cost to these kinds of writes, but fixes the bookkeeping problems.How Has This Been Tested?
Created several filesystems (on a pool with ashift 9) with a variety of file types. Files all compressed to <4k bytes but were several kilobytes in size. FIlesystems were then sent to a pool with ashift forced to 12, and psizes were verified by zdb inspection.
Also passes lint and the zfs-test suite.
Types of changes
Checklist:
Signed-off-by
.