diff options
-rw-r--r-- | module/zfs/metaslab.c | 5 | ||||
-rw-r--r-- | module/zfs/vdev.c | 6 |
2 files changed, 9 insertions, 2 deletions
diff --git a/module/zfs/metaslab.c b/module/zfs/metaslab.c index f9eef272b..43d3b211e 100644 --- a/module/zfs/metaslab.c +++ b/module/zfs/metaslab.c @@ -1255,9 +1255,10 @@ metaslab_init(metaslab_group_t *mg, uint64_t id, uint64_t object, uint64_t txg, /* * We only open space map objects that already exist. All others - * will be opened when we finally allocate an object for it. + * will be opened when we finally allocate an object for it. For + * readonly pools there is no need to open the space map object. */ - if (object != 0) { + if (object != 0 && spa_writeable(vd->vdev_spa)) { error = space_map_open(&ms->ms_sm, mos, object, ms->ms_start, ms->ms_size, vd->vdev_ashift, &ms->ms_lock); diff --git a/module/zfs/vdev.c b/module/zfs/vdev.c index 52198261e..834cc1a48 100644 --- a/module/zfs/vdev.c +++ b/module/zfs/vdev.c @@ -1906,6 +1906,12 @@ vdev_dtl_load(vdev_t *vd) if (vd->vdev_ops->vdev_op_leaf && vd->vdev_dtl_object != 0) { ASSERT(!vd->vdev_ishole); + /* + * If the dtl cannot be sync'd there is no need to open it. + */ + if (!spa_writeable(spa)) + return (0); + error = space_map_open(&vd->vdev_dtl_sm, mos, vd->vdev_dtl_object, 0, -1ULL, 0, &vd->vdev_dtl_lock); if (error) |