From 1e724f4f346486f27d57051df73361b0dacf5632 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Wed, 29 May 2019 11:35:50 -0700 Subject: [PATCH] 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 Reviewed-by: Igor Kozhukhov Signed-off-by: Brian Behlendorf Closes #8735 --- module/zfs/vdev.c | 5 +---- 1 file changed, 1 insertion(+), 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) -- 2.40.0