5997 FRU field not set during pool creation and never updated
illumos/illumos-gate@1437283407 https://www.illumos.org/issues/5997 ZFS already supports storing the vdev FRU in a vdev property. There is code in libzfs to work with this property, and there is code in the zfs-retire FMA module that looks for that information. But there is no code actually setting or updating the FRU. To address this, ZFS is changed to send a handful of new events whenever a vdev is added, attached, cleared, or onlined, as well as when a pool is created or imported. The syseventd zfs module will handle these and update the FRU field when necessary. Reviewed by: Dan Fields <dan.fields@nexenta.com> Reviewed by: Josef Sipek <josef.sipek@nexenta.com> Reviewed by: Richard Elling <richard.elling@gmail.com> Reviewed by: George Wilson <george.wilson@delphix.com> Approved by: Robert Mustacchi <rm@joyent.com> Author: Hans Rosenfeld <hans.rosenfeld@nexenta.com> Porting notes: only the kernel bits for the new events are imported
This commit is contained in:
parent
a4b6d5e128
commit
ec598d965c
@ -22,7 +22,7 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2013, 2014, Nexenta Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2015, Nexenta Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
|
||||
*/
|
||||
|
||||
@ -3689,6 +3689,7 @@ spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props,
|
||||
txg_wait_synced(spa->spa_dsl_pool, txg);
|
||||
|
||||
spa_config_sync(spa, B_FALSE, B_TRUE);
|
||||
spa_event_notify(spa, NULL, ESC_ZFS_POOL_CREATE);
|
||||
|
||||
spa_history_log_version(spa, "create");
|
||||
|
||||
@ -3954,6 +3955,7 @@ spa_import(const char *pool, nvlist_t *config, nvlist_t *props, uint64_t flags)
|
||||
spa_configfile_set(spa, props, B_FALSE);
|
||||
|
||||
spa_config_sync(spa, B_FALSE, B_TRUE);
|
||||
spa_event_notify(spa, NULL, ESC_ZFS_POOL_IMPORT);
|
||||
|
||||
mutex_exit(&spa_namespace_lock);
|
||||
return (0);
|
||||
@ -4084,9 +4086,12 @@ spa_import(const char *pool, nvlist_t *config, nvlist_t *props, uint64_t flags)
|
||||
*/
|
||||
spa_async_request(spa, SPA_ASYNC_AUTOEXPAND);
|
||||
|
||||
mutex_exit(&spa_namespace_lock);
|
||||
spa_history_log_version(spa, "import");
|
||||
|
||||
spa_event_notify(spa, NULL, ESC_ZFS_POOL_IMPORT);
|
||||
|
||||
mutex_exit(&spa_namespace_lock);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -4427,6 +4432,7 @@ spa_vdev_add(spa_t *spa, nvlist_t *nvroot)
|
||||
|
||||
mutex_enter(&spa_namespace_lock);
|
||||
spa_config_update(spa, SPA_CONFIG_UPDATE_POOL);
|
||||
spa_event_notify(spa, NULL, ESC_ZFS_VDEV_ADD);
|
||||
mutex_exit(&spa_namespace_lock);
|
||||
|
||||
return (0);
|
||||
@ -4621,6 +4627,11 @@ spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot, int replacing)
|
||||
*/
|
||||
dsl_resilver_restart(spa->spa_dsl_pool, dtl_max_txg);
|
||||
|
||||
if (spa->spa_bootfs)
|
||||
spa_event_notify(spa, newvd, ESC_ZFS_BOOTFS_VDEV_ATTACH);
|
||||
|
||||
spa_event_notify(spa, newvd, ESC_ZFS_VDEV_ATTACH);
|
||||
|
||||
/*
|
||||
* Commit the config
|
||||
*/
|
||||
@ -4635,9 +4646,6 @@ spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot, int replacing)
|
||||
spa_strfree(oldvdpath);
|
||||
spa_strfree(newvdpath);
|
||||
|
||||
if (spa->spa_bootfs)
|
||||
spa_event_notify(spa, newvd, ESC_ZFS_BOOTFS_VDEV_ATTACH);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -2357,6 +2357,7 @@ int
|
||||
vdev_online(spa_t *spa, uint64_t guid, uint64_t flags, vdev_state_t *newstate)
|
||||
{
|
||||
vdev_t *vd, *tvd, *pvd, *rvd = spa->spa_root_vdev;
|
||||
boolean_t postevent = B_FALSE;
|
||||
|
||||
spa_vdev_state_enter(spa, SCL_NONE);
|
||||
|
||||
@ -2366,6 +2367,10 @@ vdev_online(spa_t *spa, uint64_t guid, uint64_t flags, vdev_state_t *newstate)
|
||||
if (!vd->vdev_ops->vdev_op_leaf)
|
||||
return (spa_vdev_state_exit(spa, NULL, ENOTSUP));
|
||||
|
||||
postevent =
|
||||
(vd->vdev_offline == B_TRUE || vd->vdev_tmpoffline == B_TRUE) ?
|
||||
B_TRUE : B_FALSE;
|
||||
|
||||
tvd = vd->vdev_top;
|
||||
vd->vdev_offline = B_FALSE;
|
||||
vd->vdev_tmpoffline = B_FALSE;
|
||||
@ -2401,6 +2406,10 @@ vdev_online(spa_t *spa, uint64_t guid, uint64_t flags, vdev_state_t *newstate)
|
||||
return (spa_vdev_state_exit(spa, vd, ENOTSUP));
|
||||
spa_async_request(spa, SPA_ASYNC_CONFIG_UPDATE);
|
||||
}
|
||||
|
||||
if (postevent)
|
||||
spa_event_notify(spa, vd, ESC_ZFS_VDEV_ONLINE);
|
||||
|
||||
return (spa_vdev_state_exit(spa, vd, 0));
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
|
||||
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_SYSEVENT_EVENTDEFS_H
|
||||
@ -249,9 +249,14 @@ extern "C" {
|
||||
#define ESC_ZFS_RESILVER_START "ESC_ZFS_resilver_start"
|
||||
#define ESC_ZFS_RESILVER_FINISH "ESC_ZFS_resilver_finish"
|
||||
#define ESC_ZFS_VDEV_REMOVE "ESC_ZFS_vdev_remove"
|
||||
#define ESC_ZFS_POOL_CREATE "ESC_ZFS_pool_create"
|
||||
#define ESC_ZFS_POOL_DESTROY "ESC_ZFS_pool_destroy"
|
||||
#define ESC_ZFS_POOL_IMPORT "ESC_ZFS_pool_import"
|
||||
#define ESC_ZFS_VDEV_ADD "ESC_ZFS_vdev_add"
|
||||
#define ESC_ZFS_VDEV_ATTACH "ESC_ZFS_vdev_attach"
|
||||
#define ESC_ZFS_VDEV_CLEAR "ESC_ZFS_vdev_clear"
|
||||
#define ESC_ZFS_VDEV_CHECK "ESC_ZFS_vdev_check"
|
||||
#define ESC_ZFS_VDEV_ONLINE "ESC_ZFS_vdev_online"
|
||||
#define ESC_ZFS_CONFIG_SYNC "ESC_ZFS_config_sync"
|
||||
#define ESC_ZFS_SCRUB_START "ESC_ZFS_scrub_start"
|
||||
#define ESC_ZFS_SCRUB_FINISH "ESC_ZFS_scrub_finish"
|
||||
|
Loading…
Reference in New Issue
Block a user