104 #include <sys/dsl_prop.h> |
104 #include <sys/dsl_prop.h> |
105 #include <sys/dsl_dataset.h> |
105 #include <sys/dsl_dataset.h> |
106 #include <sys/dsl_scan.h> |
106 #include <sys/dsl_scan.h> |
107 #include <sys/zio_checksum.h> |
107 #include <sys/zio_checksum.h> |
108 #include <sys/refcount.h> |
108 #include <sys/refcount.h> |
|
109 #include <sys/zfeature.h> |
109 #include <stdio.h> |
110 #include <stdio.h> |
110 #include <stdio_ext.h> |
111 #include <stdio_ext.h> |
111 #include <stdlib.h> |
112 #include <stdlib.h> |
112 #include <unistd.h> |
113 #include <unistd.h> |
113 #include <signal.h> |
114 #include <signal.h> |
5604 zs->zs_splits = 0; |
5604 zs->zs_splits = 0; |
5605 zs->zs_mirrors = ztest_opts.zo_mirrors; |
5605 zs->zs_mirrors = ztest_opts.zo_mirrors; |
5606 nvroot = make_vdev_root(NULL, NULL, ztest_opts.zo_vdev_size, 0, |
5606 nvroot = make_vdev_root(NULL, NULL, ztest_opts.zo_vdev_size, 0, |
5607 0, ztest_opts.zo_raidz, zs->zs_mirrors, 1); |
5607 0, ztest_opts.zo_raidz, zs->zs_mirrors, 1); |
5608 props = make_random_props(); |
5608 props = make_random_props(); |
|
5609 for (int i = 0; i < SPA_FEATURES; i++) { |
|
5610 char buf[1024]; |
|
5611 (void) snprintf(buf, sizeof (buf), "feature@%s", |
|
5612 spa_feature_table[i].fi_uname); |
|
5613 VERIFY3U(0, ==, nvlist_add_uint64(props, buf, 0)); |
|
5614 } |
5609 VERIFY3U(0, ==, spa_create(ztest_opts.zo_pool, nvroot, props, |
5615 VERIFY3U(0, ==, spa_create(ztest_opts.zo_pool, nvroot, props, |
5610 NULL, NULL)); |
5616 NULL, NULL)); |
5611 nvlist_free(nvroot); |
5617 nvlist_free(nvroot); |
5612 |
5618 |
5613 VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG)); |
5619 VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG)); |
5614 zs->zs_metaslab_sz = |
5620 zs->zs_metaslab_sz = |
5615 1ULL << spa->spa_root_vdev->vdev_child[0]->vdev_ms_shift; |
5621 1ULL << spa->spa_root_vdev->vdev_child[0]->vdev_ms_shift; |
|
5622 |
5616 spa_close(spa, FTAG); |
5623 spa_close(spa, FTAG); |
5617 |
5624 |
5618 kernel_fini(); |
5625 kernel_fini(); |
5619 |
5626 |
5620 ztest_run_zdb(ztest_opts.zo_pool); |
5627 ztest_run_zdb(ztest_opts.zo_pool); |
5640 |
5647 |
5641 fd = open("/dev/urandom", O_RDONLY); |
5648 fd = open("/dev/urandom", O_RDONLY); |
5642 ASSERT3U(fd, ==, ZTEST_FD_RAND); |
5649 ASSERT3U(fd, ==, ZTEST_FD_RAND); |
5643 } |
5650 } |
5644 |
5651 |
|
5652 static int |
|
5653 shared_data_size(ztest_shared_hdr_t *hdr) |
|
5654 { |
|
5655 int size; |
|
5656 |
|
5657 size = hdr->zh_hdr_size; |
|
5658 size += hdr->zh_opts_size; |
|
5659 size += hdr->zh_size; |
|
5660 size += hdr->zh_stats_size * hdr->zh_stats_count; |
|
5661 size += hdr->zh_ds_size * hdr->zh_ds_count; |
|
5662 |
|
5663 return (size); |
|
5664 } |
|
5665 |
5645 static void |
5666 static void |
5646 setup_hdr(void) |
5667 setup_hdr(void) |
5647 { |
5668 { |
|
5669 int size; |
5648 ztest_shared_hdr_t *hdr; |
5670 ztest_shared_hdr_t *hdr; |
5649 |
5671 |
5650 hdr = (void *)mmap(0, P2ROUNDUP(sizeof (*hdr), getpagesize()), |
5672 hdr = (void *)mmap(0, P2ROUNDUP(sizeof (*hdr), getpagesize()), |
5651 PROT_READ | PROT_WRITE, MAP_SHARED, ZTEST_FD_DATA, 0); |
5673 PROT_READ | PROT_WRITE, MAP_SHARED, ZTEST_FD_DATA, 0); |
5652 ASSERT(hdr != MAP_FAILED); |
5674 ASSERT(hdr != MAP_FAILED); |
|
5675 |
|
5676 VERIFY3U(0, ==, ftruncate(ZTEST_FD_DATA, sizeof (ztest_shared_hdr_t))); |
5653 |
5677 |
5654 hdr->zh_hdr_size = sizeof (ztest_shared_hdr_t); |
5678 hdr->zh_hdr_size = sizeof (ztest_shared_hdr_t); |
5655 hdr->zh_opts_size = sizeof (ztest_shared_opts_t); |
5679 hdr->zh_opts_size = sizeof (ztest_shared_opts_t); |
5656 hdr->zh_size = sizeof (ztest_shared_t); |
5680 hdr->zh_size = sizeof (ztest_shared_t); |
5657 hdr->zh_stats_size = sizeof (ztest_shared_callstate_t); |
5681 hdr->zh_stats_size = sizeof (ztest_shared_callstate_t); |
5658 hdr->zh_stats_count = ZTEST_FUNCS; |
5682 hdr->zh_stats_count = ZTEST_FUNCS; |
5659 hdr->zh_ds_size = sizeof (ztest_shared_ds_t); |
5683 hdr->zh_ds_size = sizeof (ztest_shared_ds_t); |
5660 hdr->zh_ds_count = ztest_opts.zo_datasets; |
5684 hdr->zh_ds_count = ztest_opts.zo_datasets; |
5661 |
5685 |
|
5686 size = shared_data_size(hdr); |
|
5687 VERIFY3U(0, ==, ftruncate(ZTEST_FD_DATA, size)); |
|
5688 |
5662 (void) munmap((caddr_t)hdr, P2ROUNDUP(sizeof (*hdr), getpagesize())); |
5689 (void) munmap((caddr_t)hdr, P2ROUNDUP(sizeof (*hdr), getpagesize())); |
5663 } |
5690 } |
5664 |
5691 |
5665 static void |
5692 static void |
5666 setup_data(void) |
5693 setup_data(void) |
5671 |
5698 |
5672 hdr = (void *)mmap(0, P2ROUNDUP(sizeof (*hdr), getpagesize()), |
5699 hdr = (void *)mmap(0, P2ROUNDUP(sizeof (*hdr), getpagesize()), |
5673 PROT_READ, MAP_SHARED, ZTEST_FD_DATA, 0); |
5700 PROT_READ, MAP_SHARED, ZTEST_FD_DATA, 0); |
5674 ASSERT(hdr != MAP_FAILED); |
5701 ASSERT(hdr != MAP_FAILED); |
5675 |
5702 |
5676 size = hdr->zh_hdr_size; |
5703 size = shared_data_size(hdr); |
5677 size += hdr->zh_opts_size; |
|
5678 size += hdr->zh_size; |
|
5679 size += hdr->zh_stats_size * hdr->zh_stats_count; |
|
5680 size += hdr->zh_ds_size * hdr->zh_ds_count; |
|
5681 |
5704 |
5682 (void) munmap((caddr_t)hdr, P2ROUNDUP(sizeof (*hdr), getpagesize())); |
5705 (void) munmap((caddr_t)hdr, P2ROUNDUP(sizeof (*hdr), getpagesize())); |
5683 hdr = ztest_shared_hdr = (void *)mmap(0, P2ROUNDUP(size, getpagesize()), |
5706 hdr = ztest_shared_hdr = (void *)mmap(0, P2ROUNDUP(size, getpagesize()), |
5684 PROT_READ | PROT_WRITE, MAP_SHARED, ZTEST_FD_DATA, 0); |
5707 PROT_READ | PROT_WRITE, MAP_SHARED, ZTEST_FD_DATA, 0); |
5685 ASSERT(hdr != MAP_FAILED); |
5708 ASSERT(hdr != MAP_FAILED); |