git: af13904908ee - stable/13 - posixshm_test: add naive page accounting test
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 20 Jan 2023 03:23:39 UTC
The branch stable/13 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=af13904908ee59a0fca89001078af5d6d66c79e4
commit af13904908ee59a0fca89001078af5d6d66c79e4
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2022-12-03 22:54:36 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2023-01-20 03:20:22 +0000
posixshm_test: add naive page accounting test
For MFC, the deallocation part of the test is disabled because it is
not merged to stable/13.
Tested by: pho
(cherry picked from commit 91ddfd352f59beb8262f98c2e8a22722207e5aa6)
---
tests/sys/posixshm/posixshm_test.c | 72 ++++++++++++++++++++++++++++++++++++++
1 file changed, 72 insertions(+)
diff --git a/tests/sys/posixshm/posixshm_test.c b/tests/sys/posixshm/posixshm_test.c
index 06624de7c13c..a7b2e19f38af 100644
--- a/tests/sys/posixshm/posixshm_test.c
+++ b/tests/sys/posixshm/posixshm_test.c
@@ -173,6 +173,37 @@ verify_object(const char *path, char expected_value)
close(fd);
}
+static off_t shm_max_pages = 32;
+static const char byte_to_fill = 0x5f;
+
+static int
+shm_fill(int fd, off_t offset, off_t len)
+{
+ int error;
+ size_t blen, page_size;
+ char *buf;
+
+ error = 0;
+ page_size = getpagesize();
+ buf = malloc(page_size);
+ if (buf == NULL)
+ return (1);
+
+ while (len > 0) {
+ blen = len < (off_t)page_size ? (size_t)len : page_size;
+ memset(buf, byte_to_fill, blen);
+ if (pwrite(fd, buf, blen, offset) != (ssize_t)blen) {
+ error = 1;
+ break;
+ }
+ len -= blen;
+ offset += blen;
+ }
+
+ free(buf);
+ return (error);
+}
+
ATF_TC_WITHOUT_HEAD(remap_object);
ATF_TC_BODY(remap_object, tc)
{
@@ -958,6 +989,40 @@ ATF_TC_BODY(fallocate, tc)
close(fd);
}
+ATF_TC_WITHOUT_HEAD(accounting);
+ATF_TC_BODY(accounting, tc)
+{
+ struct spacectl_range range;
+ struct stat st;
+ off_t shm_sz, len;
+ size_t page_size;
+ int fd, error;
+
+ page_size = getpagesize();
+ shm_sz = shm_max_pages * page_size;
+
+ fd = shm_open("/testtest1", O_RDWR | O_CREAT, 0666);
+ ATF_REQUIRE_MSG(fd >= 0, "shm_open failed; errno:%d", errno);
+ ATF_REQUIRE_MSG((error = posix_fallocate(fd, 0, shm_sz)) == 0,
+ "posix_fallocate failed; error=%d", error);
+
+ ATF_REQUIRE(shm_fill(fd, 0, shm_sz) == 0);
+ ATF_REQUIRE(fstat(fd, &st) == 0);
+ ATF_REQUIRE(st.st_blksize * st.st_blocks == (blkcnt_t)shm_sz);
+
+#if 0
+ range.r_offset = page_size;
+ range.r_len = len = (shm_max_pages - 1) * page_size -
+ range.r_offset;
+ ATF_CHECK_MSG(fspacectl(fd, SPACECTL_DEALLOC, &range, 0, &range) == 0,
+ "SPACECTL_DEALLOC failed; errno=%d", errno);
+ ATF_REQUIRE(fstat(fd, &st) == 0);
+ ATF_REQUIRE(st.st_blksize * st.st_blocks == (blkcnt_t)(shm_sz - len));
+
+ ATF_REQUIRE(close(fd) == 0);
+#endif
+}
+
static int
shm_open_large(int psind, int policy, size_t sz)
{
@@ -1716,6 +1781,13 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, cloexec);
ATF_TP_ADD_TC(tp, mode);
ATF_TP_ADD_TC(tp, fallocate);
+<<<<<<< HEAD
+||||||| parent of 91ddfd352f59 (posixshm_test: add naive page accounting test)
+ ATF_TP_ADD_TC(tp, fspacectl);
+=======
+ ATF_TP_ADD_TC(tp, fspacectl);
+ ATF_TP_ADD_TC(tp, accounting);
+>>>>>>> 91ddfd352f59 (posixshm_test: add naive page accounting test)
ATF_TP_ADD_TC(tp, largepage_basic);
ATF_TP_ADD_TC(tp, largepage_config);
ATF_TP_ADD_TC(tp, largepage_mmap);