Author: mav
Date: Tue Aug  6 14:41:41 2013
New Revision: 253993
URL: http://svnweb.freebsd.org/changeset/base/253993

Log:
  Block reporting of ZFS features for suspended pools.
  
  Before executing any subcommand, zpool tool fetches pools configuration from
  the kernel.  Before features support was added, kernel was regenerating that
  configuration based on data always present in memory.  Unfortunately, pool
  features list and activity counters are not such. They are stored in ZAP,
  that normally resides in ARC, but under heavy memory pressure may be swapped
  out.  If pool is suspended at this point, there is no way to recover it back
  since any zpool command will stuck.
  
  This change has one predictable flaw: `zpool upgrade` always wish to upgrade
  suspended pools, but fortunately it can't do it due to the suspension.

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c   Tue Aug  6 
14:30:28 2013        (r253992)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c   Tue Aug  6 
14:41:41 2013        (r253993)
@@ -3060,6 +3060,10 @@ spa_add_feature_stats(spa_t *spa, nvlist
        ASSERT(spa_config_held(spa, SCL_CONFIG, RW_READER));
        VERIFY(nvlist_alloc(&features, NV_UNIQUE_NAME, KM_SLEEP) == 0);
 
+       /* We may be unable to read features if pool is suspended. */
+       if (spa_suspended(spa))
+               goto out;
+
        if (spa->spa_feat_for_read_obj != 0) {
                for (zap_cursor_init(&zc, spa->spa_meta_objset,
                    spa->spa_feat_for_read_obj);
@@ -3086,6 +3090,7 @@ spa_add_feature_stats(spa_t *spa, nvlist
                zap_cursor_fini(&zc);
        }
 
+out:
        VERIFY(nvlist_add_nvlist(config, ZPOOL_CONFIG_FEATURE_STATS,
            features) == 0);
        nvlist_free(features);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to