mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-09-15 13:50:11 +03:00
Ensure that gang_copies is always at least as large as copies
As discussed in the comments of PR #17004, you can theoretically run into a case where a gang child has more copies than the gang header, which can lead to some odd accounting behavior (and even trip a VERIFY). While the accounting code could be changed to handle this, it fundamentally doesn't seem to make a lot of sense to allow this to happen. If the data is supposed to have a certain level of reliability, that isn't actually achieved unless the gang_copies property is set to match it. Sponsored-by: Klara, Inc. Sponsored-by: Wasabi Technology, Inc. Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Paul Dagnelie <paul.dagnelie@klarasystems.com> Closes #17484
This commit is contained in:
parent
3ad3f439bb
commit
fd5a27c9db
@ -2496,7 +2496,8 @@ dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp, zio_prop_t *zp)
|
|||||||
zp->zp_type = (wp & WP_SPILL) ? dn->dn_bonustype : type;
|
zp->zp_type = (wp & WP_SPILL) ? dn->dn_bonustype : type;
|
||||||
zp->zp_level = level;
|
zp->zp_level = level;
|
||||||
zp->zp_copies = MIN(copies, spa_max_replication(os->os_spa));
|
zp->zp_copies = MIN(copies, spa_max_replication(os->os_spa));
|
||||||
zp->zp_gang_copies = MIN(gang_copies, spa_max_replication(os->os_spa));
|
zp->zp_gang_copies = MIN(MAX(gang_copies, copies),
|
||||||
|
spa_max_replication(os->os_spa));
|
||||||
zp->zp_dedup = dedup;
|
zp->zp_dedup = dedup;
|
||||||
zp->zp_dedup_verify = dedup && dedup_verify;
|
zp->zp_dedup_verify = dedup && dedup_verify;
|
||||||
zp->zp_nopwrite = nopwrite;
|
zp->zp_nopwrite = nopwrite;
|
||||||
|
Loading…
Reference in New Issue
Block a user