aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2019-05-29 11:35:50 -0700
committerGitHub <[email protected]>2019-05-29 11:35:50 -0700
commit1e724f4f346486f27d57051df73361b0dacf5632 (patch)
treee759c30512431e4b38869bb90e2ed98df4023761
parentec4afd27f198d93a7bd32a05cb288708ba754ada (diff)
Exclude log device ashift from normal class
When opening a log device during import its allocation bias will not yet have been set by vdev_load(). This results in the log device's ashift being incorrectly applied to the maximum ashift of the vdevs in the normal class. Which in turn prevents the removal of any top-level devices due to the ashift check in the spa_vdev_remove_top_check() function. This issue is resolved by including vdev_islog in the check since it will be set correctly during vdev_open(). Reviewed-by: Matt Ahrens <[email protected]> Reviewed-by: Igor Kozhukhov <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #8735
-rw-r--r--module/zfs/vdev.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/module/zfs/vdev.c b/module/zfs/vdev.c
index 085ae6873..1c4812cd8 100644
--- a/module/zfs/vdev.c
+++ b/module/zfs/vdev.c
@@ -1852,13 +1852,10 @@ vdev_open(vdev_t *vd)
/*
* Track the min and max ashift values for normal data devices.
- *
- * DJB - TBD these should perhaps be tracked per allocation class
- * (e.g. spa_min_ashift is used to round up post compression buffers)
*/
if (vd->vdev_top == vd && vd->vdev_ashift != 0 &&
vd->vdev_alloc_bias == VDEV_BIAS_NONE &&
- vd->vdev_aux == NULL) {
+ vd->vdev_islog == 0 && vd->vdev_aux == NULL) {
if (vd->vdev_ashift > spa->spa_max_ashift)
spa->spa_max_ashift = vd->vdev_ashift;
if (vd->vdev_ashift < spa->spa_min_ashift)