Mercurial > illumos > illumos-gate
changeset 10890:499786962772
6807339 spurious checksum errors when replacing a vdev
author | Eric Taylor <Eric.Taylor@Sun.COM> |
---|---|
date | Tue, 27 Oct 2009 15:14:40 -0600 |
parents | 8b6ec68049bd |
children | 805b7ab7ad22 |
files | usr/src/uts/common/fs/zfs/vdev.c |
diffstat | 1 files changed, 3 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/zfs/vdev.c Tue Oct 27 13:44:45 2009 -0700 +++ b/usr/src/uts/common/fs/zfs/vdev.c Tue Oct 27 15:14:40 2009 -0600 @@ -1628,6 +1628,8 @@ mutex_enter(&vd->vdev_dtl_lock); for (int t = 0; t < DTL_TYPES; t++) { + /* account for child's outage in parent's missing map */ + int s = (t == DTL_MISSING) ? DTL_OUTAGE: t; if (t == DTL_SCRUB) continue; /* leaf vdevs only */ if (t == DTL_PARTIAL) @@ -1640,7 +1642,7 @@ for (int c = 0; c < vd->vdev_children; c++) { vdev_t *cvd = vd->vdev_child[c]; mutex_enter(&cvd->vdev_dtl_lock); - space_map_ref_add_map(&reftree, &cvd->vdev_dtl[t], 1); + space_map_ref_add_map(&reftree, &cvd->vdev_dtl[s], 1); mutex_exit(&cvd->vdev_dtl_lock); } space_map_ref_generate_map(&reftree, &vd->vdev_dtl[t], minref);