diff options
author | Ryan Moeller <[email protected]> | 2020-12-02 13:20:02 -0500 |
---|---|---|
committer | GitHub <[email protected]> | 2020-12-02 10:20:02 -0800 |
commit | 0aacde2e9a818942f4e25ab765b3a4849aac6de8 (patch) | |
tree | ec4fee617881dfa98eeecb46539f6c7184b4ad7e | |
parent | ec50cd24ba6fd3656229dbbcb78a665197597c91 (diff) |
FreeBSD: notify userspace when a vdev is removed
This is needed for zfsd to autoreplace vdevs.
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Alexander Motin <[email protected]>
Signed-off-by: Ryan Moeller <[email protected]>
Closes #11260
-rw-r--r-- | cmd/zed/agents/zfs_agents.c | 2 | ||||
-rw-r--r-- | module/zfs/spa.c | 3 |
2 files changed, 5 insertions, 0 deletions
diff --git a/cmd/zed/agents/zfs_agents.c b/cmd/zed/agents/zfs_agents.c index 6c40470e8..0e1bcf927 100644 --- a/cmd/zed/agents/zfs_agents.c +++ b/cmd/zed/agents/zfs_agents.c @@ -181,6 +181,8 @@ zfs_agent_post_event(const char *class, const char *subclass, nvlist_t *nvl) * from the vdev_disk layer after a hot unplug. Fortunately we do * get an EC_DEV_REMOVE from our disk monitor and it is a suitable * proxy so we remap it here for the benefit of the diagnosis engine. + * Starting in OpenZFS 2.0, we do get FM_RESOURCE_REMOVED from the spa + * layer. Processing multiple FM_RESOURCE_REMOVED events is not harmful. */ if ((strcmp(class, EC_DEV_REMOVE) == 0) && (strcmp(subclass, ESC_DISK) == 0) && diff --git a/module/zfs/spa.c b/module/zfs/spa.c index ae8964e6f..65c907d9d 100644 --- a/module/zfs/spa.c +++ b/module/zfs/spa.c @@ -7974,6 +7974,9 @@ spa_async_remove(spa_t *spa, vdev_t *vd) vd->vdev_stat.vs_checksum_errors = 0; vdev_state_dirty(vd->vdev_top); + + /* Tell userspace that the vdev is gone. */ + zfs_post_remove(spa, vd); } for (int c = 0; c < vd->vdev_children; c++) |