From 05b2b3b80d84f3c379ea0df61a0f73fd87db2748 Mon Sep 17 00:00:00 2001 From: mishra Date: Thu, 22 Feb 2007 13:40:56 -0800 Subject: 6456888 zpool scrubbing leads to memory exhaustion and system hang --- usr/src/uts/common/fs/zfs/vdev.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'usr/src/uts/common/fs/zfs/vdev.c') diff --git a/usr/src/uts/common/fs/zfs/vdev.c b/usr/src/uts/common/fs/zfs/vdev.c index 0e96289ef4..03bf05d6ae 100644 --- a/usr/src/uts/common/fs/zfs/vdev.c +++ b/usr/src/uts/common/fs/zfs/vdev.c @@ -57,6 +57,9 @@ static vdev_ops_t *vdev_ops_table[] = { NULL }; +/* maximum scrub/resilver I/O queue */ +int zfs_scrub_limit = 70; + /* * Given a vdev type, return the appropriate ops vector. */ @@ -194,6 +197,9 @@ vdev_add_child(vdev_t *pvd, vdev_t *cvd) */ for (; pvd != NULL; pvd = pvd->vdev_parent) pvd->vdev_guid_sum += cvd->vdev_guid_sum; + + if (cvd->vdev_ops->vdev_op_leaf) + cvd->vdev_spa->spa_scrub_maxinflight += zfs_scrub_limit; } void @@ -228,6 +234,9 @@ vdev_remove_child(vdev_t *pvd, vdev_t *cvd) */ for (; pvd != NULL; pvd = pvd->vdev_parent) pvd->vdev_guid_sum -= cvd->vdev_guid_sum; + + if (cvd->vdev_ops->vdev_op_leaf) + cvd->vdev_spa->spa_scrub_maxinflight -= zfs_scrub_limit; } /* -- cgit v1.2.3