#include "os/os.h"
#include "hash.h"
#include "lib/axmap.h"
+#include "lib/memalign.h"
#ifdef CONFIG_LINUX_FALLOCATE
#include <linux/falloc.h>
switch (td->o.fallocate_mode) {
case FIO_FALLOCATE_NATIVE:
r = native_fallocate(td, f);
- if (r != 0)
+ if (r != 0 && errno != ENOSYS)
log_err("fio: native_fallocate call failed: %s\n",
strerror(errno));
break;
flags |= O_CREAT;
if (new_layout)
flags |= O_TRUNC;
+ if (td->o.odirect)
+ flags |= OS_O_DIRECT;
#ifdef WIN32
flags |= _O_BINARY;
if (err == ENOENT && !td->o.allow_create)
log_err("fio: file creation disallowed by "
"allow_file_create=0\n");
- else
+ else {
+ if (err == EINVAL && (flags & OS_O_DIRECT))
+ log_err("fio: looks like your filesystem "
+ "does not support "
+ "direct=1/buffered=0\n");
+
td_verror(td, err, "open");
+ }
return 1;
}
if (bs > left)
bs = left;
- b = malloc(bs);
+ b = fio_memalign(page_size, bs);
if (!b) {
- td_verror(td, errno, "malloc");
+ td_verror(td, errno, "fio_memalign");
goto err;
}
f->io_size = f->real_file_size;
}
- free(b);
+ fio_memfree(b, bs);
done:
return 0;
err:
close(f->fd);
f->fd = -1;
if (b)
- free(b);
+ fio_memfree(b, bs);
return 1;
}