diff options
author | Christopher Siden <[email protected]> | 2012-05-21 12:11:39 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-10-04 13:19:09 -0700 |
commit | 22257dc0d5582035347320130e9ee03b33dffb6f (patch) | |
tree | 4d380322486b87a0105a1bf426908636da2f4c1c /cmd | |
parent | c242c188fd7df8ecdb793a3d12ed584cbe3ff424 (diff) |
Fix mmap() usage in ztest.
illumos/illumos-gate@ad135b5d644628e791c3188a6ecbd9c257961ef8
Illumos changeset: 13700:2889e2596bd6
Note that this is only a partial port of the aforementioned Illumos
changeset.
Reviewed by: Matt Ahrens <[email protected]>
Reviewed by: George Wilson <[email protected]>
Reviewed by: Richard Lowe <[email protected]>
Reviewed by: Dan Kruchinin <[email protected]>
Approved by: Eric Schrock <[email protected]>
Ported to zfsonlinux by: Etienne Dechamps <[email protected]>
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/ztest/ztest.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/cmd/ztest/ztest.c b/cmd/ztest/ztest.c index 8655b237c..9da15a185 100644 --- a/cmd/ztest/ztest.c +++ b/cmd/ztest/ztest.c @@ -5822,7 +5822,6 @@ setup_fds(void) char *tmp = tempnam(NULL, NULL); fd = open(tmp, O_RDWR | O_CREAT, 0700); ASSERT3S(fd, >=, 0); - VERIFY3S(ftruncate(fd, sizeof (ztest_shared_hdr_t)), ==, 0); if (fd != ZTEST_FD_DATA) { VERIFY3S(dup2(fd, ZTEST_FD_DATA), ==, ZTEST_FD_DATA); close(fd); @@ -5838,15 +5837,32 @@ setup_fds(void) } } +static int +shared_data_size(ztest_shared_hdr_t *hdr) +{ + int size; + + size = hdr->zh_hdr_size; + size += hdr->zh_opts_size; + size += hdr->zh_size; + size += hdr->zh_stats_size * hdr->zh_stats_count; + size += hdr->zh_ds_size * hdr->zh_ds_count; + + return (size); +} + static void setup_hdr(void) { + int size; ztest_shared_hdr_t *hdr; hdr = (void *)mmap(0, P2ROUNDUP(sizeof (*hdr), getpagesize()), PROT_READ | PROT_WRITE, MAP_SHARED, ZTEST_FD_DATA, 0); ASSERT(hdr != MAP_FAILED); + VERIFY3U(0, ==, ftruncate(ZTEST_FD_DATA, sizeof (ztest_shared_hdr_t))); + hdr->zh_hdr_size = sizeof (ztest_shared_hdr_t); hdr->zh_opts_size = sizeof (ztest_shared_opts_t); hdr->zh_size = sizeof (ztest_shared_t); @@ -5855,6 +5871,9 @@ setup_hdr(void) hdr->zh_ds_size = sizeof (ztest_shared_ds_t); hdr->zh_ds_count = ztest_opts.zo_datasets; + size = shared_data_size(hdr); + VERIFY3U(0, ==, ftruncate(ZTEST_FD_DATA, size)); + (void) munmap((caddr_t)hdr, P2ROUNDUP(sizeof (*hdr), getpagesize())); } @@ -5869,11 +5888,7 @@ setup_data(void) PROT_READ, MAP_SHARED, ZTEST_FD_DATA, 0); ASSERT(hdr != MAP_FAILED); - size = hdr->zh_hdr_size; - size += hdr->zh_opts_size; - size += hdr->zh_size; - size += hdr->zh_stats_size * hdr->zh_stats_count; - size += hdr->zh_ds_size * hdr->zh_ds_count; + size = shared_data_size(hdr); (void) munmap((caddr_t)hdr, P2ROUNDUP(sizeof (*hdr), getpagesize())); hdr = ztest_shared_hdr = (void *)mmap(0, P2ROUNDUP(size, getpagesize()), |