Print this page
10592 misc. metaslab and vdev related ZoL bug fixes
Portions contributed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Giuseppe Di Natale <guss80@gmail.com>
Reviewed by: George Melikov <mail@gmelikov.ru>
Reviewed by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: Pavel Zakharov <pavel.zakharov@delphix.com>
Reviewed by: Tony Hutter <hutter2@llnl.gov>
Reviewed by: Kody Kantor <kody.kantor@joyent.com>
Approved by: Dan McDonald <danmcd@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/vdev_indirect.c
          +++ new/usr/src/uts/common/fs/zfs/vdev_indirect.c
↓ open down ↓ 672 lines elided ↑ open up ↑
 673  673                   * _commit_sync() sync task to be properly registered
 674  674                   * on the first call to _commit_entry(); so it's wise
 675  675                   * to double check and ensure we actually are starting
 676  676                   * with empty lists.
 677  677                   */
 678  678                  ASSERT(list_is_empty(&sci->sci_new_mapping_entries[i]));
 679  679          }
 680  680  
 681  681          VERIFY0(space_map_open(&prev_obsolete_sm, spa->spa_meta_objset,
 682  682              scip->scip_prev_obsolete_sm_object, 0, vd->vdev_asize, 0));
 683      -        space_map_update(prev_obsolete_sm);
 684  683          counts = vdev_indirect_mapping_load_obsolete_counts(old_mapping);
 685  684          if (prev_obsolete_sm != NULL) {
 686  685                  vdev_indirect_mapping_load_obsolete_spacemap(old_mapping,
 687  686                      counts, prev_obsolete_sm);
 688  687          }
 689  688          space_map_close(prev_obsolete_sm);
 690  689  
 691  690          /*
 692  691           * Generate new mapping.  Determine what index to continue from
 693  692           * based on the max offset that we've already written in the
↓ open down ↓ 132 lines elided ↑ open up ↑
 826  825                  ASSERT(vd->vdev_top_zap != 0);
 827  826                  VERIFY0(zap_add(vd->vdev_spa->spa_meta_objset, vd->vdev_top_zap,
 828  827                      VDEV_TOP_ZAP_INDIRECT_OBSOLETE_SM,
 829  828                      sizeof (obsolete_sm_object), 1, &obsolete_sm_object, tx));
 830  829                  ASSERT3U(vdev_obsolete_sm_object(vd), !=, 0);
 831  830  
 832  831                  spa_feature_incr(spa, SPA_FEATURE_OBSOLETE_COUNTS, tx);
 833  832                  VERIFY0(space_map_open(&vd->vdev_obsolete_sm,
 834  833                      spa->spa_meta_objset, obsolete_sm_object,
 835  834                      0, vd->vdev_asize, 0));
 836      -                space_map_update(vd->vdev_obsolete_sm);
 837  835          }
 838  836  
 839  837          ASSERT(vd->vdev_obsolete_sm != NULL);
 840  838          ASSERT3U(vdev_obsolete_sm_object(vd), ==,
 841  839              space_map_object(vd->vdev_obsolete_sm));
 842  840  
 843  841          space_map_write(vd->vdev_obsolete_sm,
 844  842              vd->vdev_obsolete_segments, SM_ALLOC, SM_NO_VDEVID, tx);
 845      -        space_map_update(vd->vdev_obsolete_sm);
 846  843          range_tree_vacate(vd->vdev_obsolete_segments, NULL, NULL);
 847  844  }
 848  845  
 849  846  int
 850  847  spa_condense_init(spa_t *spa)
 851  848  {
 852  849          int error = zap_lookup(spa->spa_meta_objset,
 853  850              DMU_POOL_DIRECTORY_OBJECT,
 854  851              DMU_POOL_CONDENSING_INDIRECT, sizeof (uint64_t),
 855  852              sizeof (spa->spa_condensing_indirect_phys) / sizeof (uint64_t),
↓ open down ↓ 977 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX