summaryrefslogtreecommitdiffstats
path: root/module/zfs/vdev_missing.c
diff options
context:
space:
mode:
authorIsaac Huang <[email protected]>2017-05-12 18:28:03 -0600
committerBrian Behlendorf <[email protected]>2017-05-12 17:28:03 -0700
commit3d6da72d183dc655a7dc8fd59f57748fc5c1806c (patch)
treeca6da500e5b88a5beaf9d4ef265eeb5964ff1a36 /module/zfs/vdev_missing.c
parent8c54ddd33af92e5defc587a10914493ca85ad60c (diff)
Skip spurious resilver IO on raidz vdev
On a raidz vdev, a block that does not span all child vdevs, excluding its skip sectors if any, may not be affected by a child vdev outage or failure. In such cases, the block does not need to be resilvered. However, current resilver algorithm simply resilvers all blocks on a degraded raidz vdev. Such spurious IO is not only wasteful, but also adds the risk of overwriting good data. This patch eliminates such spurious IOs. Reviewed-by: Gvozden Neskovic <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Reviewed by: Matthew Ahrens <[email protected]> Signed-off-by: Isaac Huang <[email protected]> Closes #5316
Diffstat (limited to 'module/zfs/vdev_missing.c')
-rw-r--r--module/zfs/vdev_missing.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/module/zfs/vdev_missing.c b/module/zfs/vdev_missing.c
index 228757334..d7d017fb8 100644
--- a/module/zfs/vdev_missing.c
+++ b/module/zfs/vdev_missing.c
@@ -88,6 +88,7 @@ vdev_ops_t vdev_missing_ops = {
NULL,
NULL,
NULL,
+ NULL,
VDEV_TYPE_MISSING, /* name of this vdev type */
B_TRUE /* leaf vdev */
};
@@ -101,6 +102,7 @@ vdev_ops_t vdev_hole_ops = {
NULL,
NULL,
NULL,
+ NULL,
VDEV_TYPE_HOLE, /* name of this vdev type */
B_TRUE /* leaf vdev */
};