OpenZFS 7072 - zfs fails to expand if lun added when os is in shutdown state
Authored by: George Wilson <george.wilson@delphix.com> Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com> Reviewed by: Dan Kimmel <dan.kimmel@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Prakash Surya <prakash.surya@delphix.com> Reviewed by: Alex Reece <alex@delphix.com> Approved by: Dan McDonald <danmcd@omniti.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Ported-by: George Melikov <mail@gmelikov.ru> OpenZFS-issue: https://www.illumos.org/issues/7072 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/c39a2aa Closes #5694 Porting notes: - vdev.c: 'vdev_get_stats' changes are moved to 'vdev_get_stats_ex'. - vdev_disk.c: ignored, Linux specific code is different.
This commit is contained in:
parent
3b6425cb5b
commit
0f676dc228
|
@ -413,7 +413,13 @@ metaslab_class_expandable_space(metaslab_class_t *mc)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
space += tvd->vdev_max_asize - tvd->vdev_asize;
|
/*
|
||||||
|
* Calculate if we have enough space to add additional
|
||||||
|
* metaslabs. We report the expandable space in terms
|
||||||
|
* of the metaslab size since that's the unit of expansion.
|
||||||
|
*/
|
||||||
|
space += P2ALIGN(tvd->vdev_max_asize - tvd->vdev_asize,
|
||||||
|
1ULL << tvd->vdev_ms_shift);
|
||||||
}
|
}
|
||||||
spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG);
|
spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG);
|
||||||
return (space);
|
return (space);
|
||||||
|
|
|
@ -2900,6 +2900,7 @@ vdev_get_stats_ex_impl(vdev_t *vd, vdev_stat_t *vs, vdev_stat_ex_t *vsx)
|
||||||
void
|
void
|
||||||
vdev_get_stats_ex(vdev_t *vd, vdev_stat_t *vs, vdev_stat_ex_t *vsx)
|
vdev_get_stats_ex(vdev_t *vd, vdev_stat_t *vs, vdev_stat_ex_t *vsx)
|
||||||
{
|
{
|
||||||
|
vdev_t *tvd = vd->vdev_top;
|
||||||
mutex_enter(&vd->vdev_stat_lock);
|
mutex_enter(&vd->vdev_stat_lock);
|
||||||
if (vs) {
|
if (vs) {
|
||||||
bcopy(&vd->vdev_stat, vs, sizeof (*vs));
|
bcopy(&vd->vdev_stat, vs, sizeof (*vs));
|
||||||
|
@ -2909,6 +2910,17 @@ vdev_get_stats_ex(vdev_t *vd, vdev_stat_t *vs, vdev_stat_ex_t *vsx)
|
||||||
if (vd->vdev_ops->vdev_op_leaf)
|
if (vd->vdev_ops->vdev_op_leaf)
|
||||||
vs->vs_rsize += VDEV_LABEL_START_SIZE +
|
vs->vs_rsize += VDEV_LABEL_START_SIZE +
|
||||||
VDEV_LABEL_END_SIZE;
|
VDEV_LABEL_END_SIZE;
|
||||||
|
/*
|
||||||
|
* Report expandable space on top-level, non-auxillary devices
|
||||||
|
* only. The expandable space is reported in terms of metaslab
|
||||||
|
* sized units since that determines how much space the pool
|
||||||
|
* can expand.
|
||||||
|
*/
|
||||||
|
if (vd->vdev_aux == NULL && tvd != NULL) {
|
||||||
|
vs->vs_esize = P2ALIGN(
|
||||||
|
vd->vdev_max_asize - vd->vdev_asize,
|
||||||
|
1ULL << tvd->vdev_ms_shift);
|
||||||
|
}
|
||||||
vs->vs_esize = vd->vdev_max_asize - vd->vdev_asize;
|
vs->vs_esize = vd->vdev_max_asize - vd->vdev_asize;
|
||||||
if (vd->vdev_aux == NULL && vd == vd->vdev_top &&
|
if (vd->vdev_aux == NULL && vd == vd->vdev_top &&
|
||||||
!vd->vdev_ishole) {
|
!vd->vdev_ishole) {
|
||||||
|
|
Loading…
Reference in New Issue