td->orig_buffer_size = max_bs * max_units;
if (td->mem_type == MEM_SHMHUGE)
- td->orig_buffer_size = (td->orig_buffer_size + FIO_HUGE_PAGE - 1) & ~FIO_HUGE_PAGE;
+ td->orig_buffer_size = (td->orig_buffer_size + FIO_HUGE_PAGE - 1) & ~(FIO_HUGE_PAGE - 1);
else
td->orig_buffer_size += MASK;
if (!strncmp(mem, "malloc", 6)) {
td->mem_type = MEM_MALLOC;
return 0;
- } else if (!strncmp(mem, "shm", 3)) {
- td->mem_type = MEM_SHM;
- return 0;
} else if (!strncmp(mem, "mmap", 4)) {
td->mem_type = MEM_MMAP;
return 0;
log_err("fio: shmhuge not available\n");
return 1;
#endif
+ } else if (!strncmp(mem, "shm", 3)) {
+ td->mem_type = MEM_SHM;
+ return 0;
}
log_err("fio: mem type: malloc, shm, mmap, shmhuge\n");
{
if (td->mem_type == MEM_MALLOC)
free(td->orig_buffer);
- else if (td->mem_type == MEM_SHM) {
+ else if (td->mem_type == MEM_SHM || td->mem_type == MEM_SHMHUGE) {
struct shmid_ds sbuf;
shmdt(td->orig_buffer);