svn commit: r287623 - in vendor-sys/illumos/dist/uts/common: fs/zfs sys/sysevent
Andriy Gapon
avg at FreeBSD.org
Thu Sep 10 16:00:06 UTC 2015
Author: avg
Date: Thu Sep 10 16:00:04 2015
New Revision: 287623
URL: https://svnweb.freebsd.org/changeset/base/287623
Log:
5997 FRU field not set during pool creation and never updated
illumos/illumos-gate at 1437283407f89cab03860accf49408f94559bc34
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 at nexenta.com>
Reviewed by: Josef Sipek <josef.sipek at nexenta.com>
Reviewed by: Richard Elling <richard.elling at gmail.com>
Reviewed by: George Wilson <george.wilson at delphix.com>
Approved by: Robert Mustacchi <rm at joyent.com>
Author: Hans Rosenfeld <hans.rosenfeld at nexenta.com>
Porting notes: only the kernel bits for the new events are imported
Modified:
vendor-sys/illumos/dist/uts/common/fs/zfs/spa.c
vendor-sys/illumos/dist/uts/common/fs/zfs/vdev.c
vendor-sys/illumos/dist/uts/common/sys/sysevent/eventdefs.h
Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/spa.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/spa.c Thu Sep 10 13:28:08 2015 (r287622)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/spa.c Thu Sep 10 16:00:04 2015 (r287623)
@@ -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 *n
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 *c
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 *c
*/
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 *nvroo
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 gui
*/
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 gui
spa_strfree(oldvdpath);
spa_strfree(newvdpath);
- if (spa->spa_bootfs)
- spa_event_notify(spa, newvd, ESC_ZFS_BOOTFS_VDEV_ATTACH);
-
return (0);
}
Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/vdev.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/vdev.c Thu Sep 10 13:28:08 2015 (r287622)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/vdev.c Thu Sep 10 16:00:04 2015 (r287623)
@@ -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, u
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, u
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));
}
Modified: vendor-sys/illumos/dist/uts/common/sys/sysevent/eventdefs.h
==============================================================================
--- vendor-sys/illumos/dist/uts/common/sys/sysevent/eventdefs.h Thu Sep 10 13:28:08 2015 (r287622)
+++ vendor-sys/illumos/dist/uts/common/sys/sysevent/eventdefs.h Thu Sep 10 16:00:04 2015 (r287623)
@@ -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"
More information about the svn-src-vendor
mailing list