Skip to content

Commit fd5a27c

Browse files
pcd1193182amotin
authored andcommitted
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 <[email protected]> Signed-off-by: Paul Dagnelie <[email protected]> Closes #17484
1 parent 3ad3f43 commit fd5a27c

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

module/zfs/dmu.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2496,7 +2496,8 @@ dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp, zio_prop_t *zp)
24962496
zp->zp_type = (wp & WP_SPILL) ? dn->dn_bonustype : type;
24972497
zp->zp_level = level;
24982498
zp->zp_copies = MIN(copies, spa_max_replication(os->os_spa));
2499-
zp->zp_gang_copies = MIN(gang_copies, spa_max_replication(os->os_spa));
2499+
zp->zp_gang_copies = MIN(MAX(gang_copies, copies),
2500+
spa_max_replication(os->os_spa));
25002501
zp->zp_dedup = dedup;
25012502
zp->zp_dedup_verify = dedup && dedup_verify;
25022503
zp->zp_nopwrite = nopwrite;

0 commit comments

Comments
 (0)