+static int alloc_mem_malloc(struct thread_data *td)
+{
+ unsigned int bsize = td->orig_buffer_size;
+
+ if (td->o.odirect)
+ bsize += page_mask;
+
+ td->orig_buffer = malloc(bsize);
+ dprint(FD_MEM, "malloc %u %p\n", bsize, td->orig_buffer);
+ if (td->orig_buffer)
+ return 0;
+
+ return 1;
+}
+
+/*
+ * Setup the buffer area we need for io.
+ */
+int allocate_io_mem(struct thread_data *td)
+{
+ int ret = 0;
+
+ if (td->io_ops->flags & FIO_NOIO)
+ return 0;
+
+ if (td->o.mem_type == MEM_MALLOC)
+ ret = alloc_mem_malloc(td);
+ else if (td->o.mem_type == MEM_SHM || td->o.mem_type == MEM_SHMHUGE)
+ ret = alloc_mem_shm(td);
+ else if (td->o.mem_type == MEM_MMAP || td->o.mem_type == MEM_MMAPHUGE)
+ ret = alloc_mem_mmap(td);
+ else {
+ log_err("fio: bad mem type: %d\n", td->o.mem_type);
+ ret = 1;
+ }
+
+ if (ret)
+ td_verror(td, ENOMEM, "iomem allocation");
+
+ return ret;
+}
+