A config lock should be held while vdev_count_leaves() walks the tree,
otherwise the pointers reference may become invalid during the walk.
SCL_VDEV is a minimal lock provided for such uses cases.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Olaf Faaland <faaland1@llnl.gov>
Closes #7286
int
vdev_count_leaves(spa_t *spa)
{
- return (vdev_count_leaves_impl(spa->spa_root_vdev));
+ int rc;
+
+ spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER);
+ rc = vdev_count_leaves_impl(spa->spa_root_vdev);
+ spa_config_exit(spa, SCL_VDEV, FTAG);
+
+ return (rc);
}
void