Print this page
2619 asynchronous destruction of ZFS file systems
2747 SPA versioning with zfs feature flags
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <gwilson@delphix.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Reviewed by: Dan Kruchinin <dan.kruchinin@gmail.com>
Approved by: Dan McDonald <danmcd@nexenta.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/vdev.c
          +++ new/usr/src/uts/common/fs/zfs/vdev.c
↓ open down ↓ 1320 lines elided ↑ open up ↑
1321 1321  
1322 1322          /*
1323 1323           * If the device has already failed, or was marked offline, don't do
1324 1324           * any further validation.  Otherwise, label I/O will fail and we will
1325 1325           * overwrite the previous state.
1326 1326           */
1327 1327          if (vd->vdev_ops->vdev_op_leaf && vdev_readable(vd)) {
1328 1328                  uint64_t aux_guid = 0;
1329 1329                  nvlist_t *nvl;
1330 1330  
1331      -                if ((label = vdev_label_read_config(vd)) == NULL) {
     1331 +                if ((label = vdev_label_read_config(vd, VDEV_BEST_LABEL)) ==
     1332 +                    NULL) {
1332 1333                          vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN,
1333 1334                              VDEV_AUX_BAD_LABEL);
1334 1335                          return (0);
1335 1336                  }
1336 1337  
1337 1338                  /*
1338 1339                   * Determine if this vdev has been split off into another
1339 1340                   * pool.  If so, then refuse to open it.
1340 1341                   */
1341 1342                  if (nvlist_lookup_uint64(label, ZPOOL_CONFIG_SPLIT_GUID,
↓ open down ↓ 620 lines elided ↑ open up ↑
1962 1963  int
1963 1964  vdev_validate_aux(vdev_t *vd)
1964 1965  {
1965 1966          nvlist_t *label;
1966 1967          uint64_t guid, version;
1967 1968          uint64_t state;
1968 1969  
1969 1970          if (!vdev_readable(vd))
1970 1971                  return (0);
1971 1972  
1972      -        if ((label = vdev_label_read_config(vd)) == NULL) {
     1973 +        if ((label = vdev_label_read_config(vd, VDEV_BEST_LABEL)) == NULL) {
1973 1974                  vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN,
1974 1975                      VDEV_AUX_CORRUPT_DATA);
1975 1976                  return (-1);
1976 1977          }
1977 1978  
1978 1979          if (nvlist_lookup_uint64(label, ZPOOL_CONFIG_VERSION, &version) != 0 ||
1979      -            version > SPA_VERSION ||
     1980 +            !SPA_VERSION_IS_SUPPORTED(version) ||
1980 1981              nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, &guid) != 0 ||
1981 1982              guid != vd->vdev_guid ||
1982 1983              nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_STATE, &state) != 0) {
1983 1984                  vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN,
1984 1985                      VDEV_AUX_CORRUPT_DATA);
1985 1986                  nvlist_free(label);
1986 1987                  return (-1);
1987 1988          }
1988 1989  
1989 1990          /*
↓ open down ↓ 1165 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX