Files
mirror_zfs/module/zfs
Brian Behlendorf 4d0ba94113 Correct missing zil_claim() DTL updates
Commit a1d477c2 accidentally disabled DTL updates for the zil_claim()
case described at the end of vdev_stat_update() by unconditionally
disabling all DTL updates when loading.  This was done to avoid
a deadlock on the vd_dtl_lock when loading the DTLs from disk.

    vdev_dtl_contains <--- Takes vd->vd_dtl_lock
    vdev_mirror_child_missing
    vdev_mirror_io_start
    zio_vdev_io_start
    __zio_execute
    arc_read
    dbuf_issue_final_prefetch
    dbuf_prefetch_impl
    dbuf_prefetch
    dmu_prefetch
    space_map_iterate
    space_map_load_length
    space_map_load
    vdev_dtl_load <--- Takes vd->vd_dtl_lock
    vdev_load
    spa_ld_load_vdev_metadata
    spa_tryimport

The missing DTL updates can be restored by moving the space_map_load()
call outside the vd_dtl_lock.  A private range tree is populated by
reading the space map and then merged in to the DTL_MISSING tree
under the lock.

Furthermore, the SPA_LOAD_NONE check in vdev_dtl_contains() leads to an
additional problem.  Any resilvering which occurs before SPA_LOAD_NONE
is set will incorrectly determine that there's nothing to repair.  This
can result in full redundancy not being restored for some blocks.

Reviewed-by: Matt Ahrens <matt@delphix.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #11218
2020-11-20 13:14:45 -08:00
..
2020-11-13 13:51:51 -08:00
2020-11-02 11:51:12 -08:00
2020-11-16 09:08:11 -08:00
2020-08-20 10:30:06 -07:00
2019-07-26 10:54:14 -07:00
2020-07-29 16:35:33 -07:00
2020-07-29 16:35:33 -07:00
2019-06-19 09:48:12 -07:00
2020-08-17 15:25:37 -07:00
2020-06-18 12:21:18 -07:00
2019-12-03 09:51:44 -08:00
2020-11-02 11:51:12 -08:00
2020-08-20 10:30:06 -07:00
2020-11-10 10:37:10 -08:00
2020-10-30 10:00:33 -07:00
2020-06-09 21:24:09 -07:00
2020-08-20 10:30:06 -07:00
2020-06-18 12:20:38 -07:00
2020-11-13 13:51:51 -08:00
2020-09-04 10:29:39 -07:00
2020-06-18 12:21:25 -07:00
2020-09-04 10:34:28 -07:00
2020-06-18 12:21:25 -07:00
2017-10-11 16:54:48 -04:00
2020-06-18 12:21:25 -07:00
2020-11-13 13:51:51 -08:00
2020-11-13 13:51:51 -08:00
2020-11-13 13:51:51 -08:00
2019-06-19 09:48:12 -07:00
2020-07-29 16:35:33 -07:00
2020-07-29 16:35:33 -07:00
2020-08-26 21:41:09 -07:00
2020-06-18 12:21:25 -07:00
2020-06-18 12:21:25 -07:00
2020-06-18 12:21:25 -07:00
2019-09-02 17:56:41 -07:00
2020-11-13 13:51:51 -08:00
2020-11-13 13:51:51 -08:00
2020-11-02 11:51:12 -08:00
2019-10-09 10:36:03 -07:00
2020-11-13 13:51:51 -08:00
2020-11-13 13:51:51 -08:00
2020-11-13 13:51:51 -08:00
2020-11-13 13:51:51 -08:00
2020-11-13 13:51:51 -08:00
2020-11-13 13:51:51 -08:00
2020-11-20 13:14:45 -08:00
2020-07-29 16:35:33 -07:00
2020-06-18 12:21:25 -07:00
2019-09-02 17:56:41 -07:00
2020-10-02 17:44:10 -07:00
2020-06-18 12:20:38 -07:00
2020-11-13 13:51:51 -08:00
2020-10-02 17:44:10 -07:00
2020-11-18 15:06:59 -08:00
2020-06-18 12:20:38 -07:00
2020-11-13 13:51:51 -08:00
2020-11-13 13:51:51 -08:00
2020-06-18 12:21:25 -07:00
2020-06-18 12:21:18 -07:00
2020-09-03 20:09:52 -07:00
2020-11-17 09:50:52 -08:00