diff options
author | George Wilson <[email protected]> | 2013-07-05 15:14:17 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2013-08-07 16:13:56 -0700 |
commit | c61f97f426b7e0bc106b7e6795d4ea2ecbd2384d (patch) | |
tree | 61ccc170b0ec8585b896d33c10cab1775f642a56 /module/zfs/spa_config.c | |
parent | 78d7a5d780d44708a6e8835a0f1e185cc8ee3dfb (diff) |
Illumos #3639 zpool.cache should skip over readonly pools
3639 zpool.cache should skip over readonly pools
Reviewed by: Eric Schrock <[email protected]>
Reviewed by: Adam Leventhal <[email protected]>
Reviewed by: Basil Crow <[email protected]>
Approved by: Gordon Ross <[email protected]>
References:
illumos/illumos-gate@fb02ae025247e3b662600e5a9c1b4c33ecab7d72
https://www.illumos.org/issues/3639
Normally we don't list pools that are imported read-only in the cache
file, however you can accidentally get one into the cache file by
importing and exporting a read-write pool while a read-only pool is
imported:
$ zpool import -o readonly test1
$ zpool import test2
$ zpool export test2
$ zdb -C
This is a problem because if the machine reboots we import all pools in
the cache file as read-write.
Ported-by: Richard Yao <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Diffstat (limited to 'module/zfs/spa_config.c')
-rw-r--r-- | module/zfs/spa_config.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/module/zfs/spa_config.c b/module/zfs/spa_config.c index 849ae46ec..5e5b40526 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); |