Illumos #2619 and #2747
[zfs.git] / lib / libzfs / libzfs_status.c
index d56baf0..ef6a641 100644 (file)
  *
  * CDDL HEADER END
  */
+
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
  */
 
 /*
@@ -215,6 +217,20 @@ check_status(nvlist_t *config, boolean_t isimport)
                return (ZPOOL_STATUS_VERSION_NEWER);
 
        /*
+        * Unsupported feature(s).
+        */
+       if (vs->vs_state == VDEV_STATE_CANT_OPEN &&
+           vs->vs_aux == VDEV_AUX_UNSUP_FEAT) {
+               nvlist_t *nvinfo;
+
+               verify(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_LOAD_INFO,
+                   &nvinfo) == 0);
+               if (nvlist_exists(nvinfo, ZPOOL_CONFIG_CAN_RDONLY))
+                       return (ZPOOL_STATUS_UNSUP_FEAT_WRITE);
+               return (ZPOOL_STATUS_UNSUP_FEAT_READ);
+       }
+
+       /*
         * Check that the config is complete.
         */
        if (vs->vs_state == VDEV_STATE_CANT_OPEN &&
@@ -301,7 +317,7 @@ check_status(nvlist_t *config, boolean_t isimport)
        /*
         * Outdated, but usable, version
         */
-       if (version < SPA_VERSION)
+       if (SPA_VERSION_IS_SUPPORTED(version) && version != SPA_VERSION)
                return (ZPOOL_STATUS_VERSION_OLDER);
 
        return (ZPOOL_STATUS_OK);