usr/src/cmd/ztest/ztest.c
changeset 13700 2889e2596bd6
parent 13571 a5771a96228c
child 13743 95aba6e49b9f
equal deleted inserted replaced
13699:733714f4dc24 13700:2889e2596bd6
   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>
  5570 static nvlist_t *
  5571 static nvlist_t *
  5571 make_random_props()
  5572 make_random_props()
  5572 {
  5573 {
  5573 	nvlist_t *props;
  5574 	nvlist_t *props;
  5574 
  5575 
       
  5576 	VERIFY(nvlist_alloc(&props, NV_UNIQUE_NAME, 0) == 0);
  5575 	if (ztest_random(2) == 0)
  5577 	if (ztest_random(2) == 0)
  5576 		return (NULL);
  5578 		return (props);
  5577 
       
  5578 	VERIFY(nvlist_alloc(&props, NV_UNIQUE_NAME, 0) == 0);
       
  5579 	VERIFY(nvlist_add_uint64(props, "autoreplace", 1) == 0);
  5579 	VERIFY(nvlist_add_uint64(props, "autoreplace", 1) == 0);
  5580 
  5580 
  5581 	return (props);
  5581 	return (props);
  5582 }
  5582 }
  5583 
  5583 
  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);