Files
mirror_zfs/module/zfs
John Poduska 41035a0496 Resilver restarts unnecessarily when it encounters errors
When a resilver finishes, vdev_dtl_reassess is called to hopefully
excise DTL_MISSING (amongst other things). If there are errors during
the resilver, they are tracked in DTL_SCRUB, as spelled out in the
block comment in vdev.c. DTL_SCRUB is in-core only, so it can only
be used if the pool was online for the whole resilver. This state is
tracked with the spa_scrub_started flag, which only gets set when
the scan is initialized. Unfortunately, this flag gets cleared right
before vdev_dtl_reassess gets called, so if there are any errors
during the scan, DTL_MISSING will never get excised and the resilver
will just continually restart. This fix simply moves clearing that
flag until after the call to vdev_dtl_reasses.

In addition, if a pool is imported and already has scn_errors > 0,
this change will restart the resilver immediately instead of doing
the rest of the scan and then restarting it from the beginning. On
the other hand, if scn_errors == 0 at import, then no errors have
been encountered so far, so the spa_scrub_started flag can be safely
set.

A test has been added to verify that resilver does not restart when
relevant DTL's are available.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Paul Zuchowski <pzuchowski@datto.com>
Signed-off-by: John Poduska <jpoduska@datto.com>
Closes #10291
2020-05-13 10:54:27 -07:00
..
2020-05-07 16:34:03 -07:00
2019-07-26 10:54:14 -07:00
2019-06-19 09:48:12 -07:00
2019-06-19 09:48:12 -07:00
2020-03-27 09:11:22 -07:00
2020-04-15 11:14:47 -07:00
2019-12-03 09:51:44 -08:00
2020-04-23 10:06:57 -07:00
2020-04-01 10:02:06 -07:00
2020-04-01 10:02:06 -07:00
2020-04-01 10:02:06 -07:00
2019-09-02 17:56:41 -07:00
2017-10-11 16:54:48 -04:00
2019-10-01 13:17:32 -07:00
2015-01-16 14:41:26 -08:00
2019-06-19 09:48:12 -07:00
2019-10-11 10:13:21 -07:00
2010-08-31 13:41:58 -07:00
2019-09-02 17:56:41 -07:00
2020-04-15 11:14:47 -07:00
2019-10-09 10:36:03 -07:00
2020-02-27 09:31:02 -08:00
2019-06-20 18:29:02 -07:00
2020-01-23 11:01:24 -08:00
2020-03-04 15:07:11 -08:00
2019-09-05 14:49:49 -07:00
2019-09-02 17:56:41 -07:00
2019-09-02 17:56:41 -07:00
2019-10-02 09:15:12 -07:00
2019-11-11 09:27:59 -08:00
2019-12-05 13:10:29 -08:00
2020-03-27 09:11:22 -07:00
2018-02-09 10:08:05 -08:00
2019-07-26 10:54:14 -07:00