• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0
2 
3 #include <stdlib.h>
4 #include <stdio.h>
5 
6 #include "tst_test.h"
7 
8 #define TMPDIR "mntdir"
9 #define MB(x) (x << 20)
10 
11 /*
12  * Checks if two given values differ by less than err% of their
13  * sum. An extra percent is added for every doubling of the page size
14  * to compensate for wastage in page sized allocations.
15  */
values_close(const ssize_t a,const ssize_t b,const ssize_t err)16 static inline int values_close(const ssize_t a,
17 			       const ssize_t b,
18 			       const ssize_t err)
19 {
20 	const size_t page_size = SAFE_SYSCONF(_SC_PAGESIZE);
21 	const ssize_t page_adjusted_err = ffs(page_size >> 13) + err;
22 
23 	return 100 * labs(a - b) <= (a + b) * page_adjusted_err;
24 }
25 
alloc_pagecache(const int fd,size_t size)26 static inline void alloc_pagecache(const int fd, size_t size)
27 {
28 	char buf[BUFSIZ];
29 	size_t i;
30 
31 	SAFE_LSEEK(fd, 0, SEEK_END);
32 
33 	for (i = 0; i < size; i += sizeof(buf))
34 		SAFE_WRITE(SAFE_WRITE_ALL, fd, buf, sizeof(buf));
35 }
36 
alloc_anon(const size_t size)37 static inline void alloc_anon(const size_t size)
38 {
39 	const size_t page_size = SAFE_SYSCONF(_SC_PAGESIZE);
40 	char *const buf = SAFE_MALLOC(size);
41 	size_t i;
42 
43 	for (i = 0; i < size; i += page_size)
44 		buf[i] = 0;
45 
46 	free(buf);
47 }
48