mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Allow add of raidz and mirror with same redundancy
Allow new members to be added to a pool mixing raidz and mirror vdevs without giving -f, as long as they have matching redundancy. This case was missed in #5915, which only handled zpool create. Add zfstest zpool_add_010_pos.ksh, with test of zpool create followed by zpool add of mixed raidz and mirror vdevs. Add some more mixed raidz and mirror cases to zpool_create_006_pos.ksh. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Haakan Johansson <f96hajo@chalmers.se> Issue #5915 Closes #6181
This commit is contained in:
committed by
Brian Behlendorf
parent
9f7b066bd9
commit
6eb6073a04
+16
-1
@@ -1053,6 +1053,7 @@ check_replication(nvlist_t *config, nvlist_t *newroot)
|
||||
nvlist_t **child;
|
||||
uint_t children;
|
||||
replication_level_t *current = NULL, *new;
|
||||
replication_level_t *raidz, *mirror;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
@@ -1100,7 +1101,21 @@ check_replication(nvlist_t *config, nvlist_t *newroot)
|
||||
*/
|
||||
ret = 0;
|
||||
if (current != NULL) {
|
||||
if (strcmp(current->zprl_type, new->zprl_type) != 0) {
|
||||
if (is_raidz_mirror(current, new, &raidz, &mirror) ||
|
||||
is_raidz_mirror(new, current, &raidz, &mirror)) {
|
||||
if (raidz->zprl_parity != mirror->zprl_children - 1) {
|
||||
vdev_error(gettext(
|
||||
"mismatched replication level: pool and "
|
||||
"new vdev with different redundancy, %s "
|
||||
"and %s vdevs, %llu vs. %llu (%llu-way)\n"),
|
||||
raidz->zprl_type,
|
||||
mirror->zprl_type,
|
||||
raidz->zprl_parity,
|
||||
mirror->zprl_children - 1,
|
||||
mirror->zprl_children);
|
||||
ret = -1;
|
||||
}
|
||||
} else if (strcmp(current->zprl_type, new->zprl_type) != 0) {
|
||||
vdev_error(gettext(
|
||||
"mismatched replication level: pool uses %s "
|
||||
"and new vdev is %s\n"),
|
||||
|
||||
Reference in New Issue
Block a user