summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Wilson <george.wilson@delphix.com>2013-07-05 19:14:17 +0000
committerBrian Behlendorf <behlendorf1@llnl.gov>2013-08-07 23:13:56 +0000
commitc61f97f426b7e0bc106b7e6795d4ea2ecbd2384d (patch)
tree61ccc170b0ec8585b896d33c10cab1775f642a56
parent78d7a5d780d44708a6e8835a0f1e185cc8ee3dfb (diff)
-rw-r--r--module/zfs/spa_config.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/module/zfs/spa_config.c b/module/zfs/spa_config.c
index 849ae46ec6c8..5e5b4052620d 100644
--- a/module/zfs/spa_config.c
+++ b/module/zfs/spa_config.c
@@ -225,7 +225,15 @@ spa_config_sync(spa_t *target, boolean_t removing, boolean_t postsysevent)
*/
nvl = NULL;
while ((spa = spa_next(spa)) != NULL) {
- if (spa == target && removing)
+ /*
+ * Skip over our own pool if we're about to remove
+ * ourselves from the spa namespace or any pool that
+ * is readonly. Since we cannot guarantee that a
+ * readonly pool would successfully import upon reboot,
+ * we don't allow them to be written to the cache file.
+ */
+ if ((spa == target && removing) ||
+ !spa_writeable(spa))
continue;
mutex_enter(&spa->spa_props_lock);