Bug #9952
closedBlock size change during zfs receive drops spill block
0%
Description
Replication code in receive_object() falsely assumes that if received object block size is different from local, then it must be a new object and calls dmu_object_reclaim() to wipe it out. In most cases it is not a problem, since all dnode, bonus buffer and data block(s) are immediately rewritten any way, but the problem is that spill block (if used) is not. This means loss of ACLs, extended attributes, etc.
This issue can be triggered in very simple way:
1. create 4KB file with 10+ ACL entries;
2. take snapshot and send it to different dataset;
3. append another 4KB to the file;
4. take another snapshot and send incrementally;
5. witness ACL loss on receive side.
Related issues
Updated by Jerry Jelinek about 2 years ago
This is a duplicate of openzfs#8668:
caf9dd209 Fix send/recv lost spill block
We pulled this fix in to illumos as part of the integration of:
eb633035c8 8727 Native data and metadata encryption for zfs
That commit included a large set of openzfs commits, including caf9dd209.
Updated by Jerry Jelinek about 2 years ago
- Related to Feature #8727: Native data and metadata encryption for zfs added
Updated by Jerry Jelinek about 2 years ago
- Status changed from In Progress to Duplicate
Updated by Joshua M. Clulow about 2 years ago
- Is duplicate of Feature #8727: Native data and metadata encryption for zfs added
Updated by Joshua M. Clulow about 2 years ago
- Related to deleted (Feature #8727: Native data and metadata encryption for zfs)