static struct ioengine_ops ioengine = {
.name = "io_uring",
.version = FIO_IOOPS_VERSION,
+ .flags = FIO_ASYNCIO_SYNC_TRIM,
.init = fio_ioring_init,
.post_init = fio_ioring_post_init,
.io_u_init = fio_ioring_io_u_init,
static struct ioengine_ops ioengine = {
.name = "libaio",
.version = FIO_IOOPS_VERSION,
+ .flags = FIO_ASYNCIO_SYNC_TRIM,
.init = fio_libaio_init,
.post_init = fio_libaio_post_init,
.prep = fio_libaio_prep,
static struct ioengine_ops ioengine = {
.name = "posixaio",
.version = FIO_IOOPS_VERSION,
+ .flags = FIO_ASYNCIO_SYNC_TRIM,
.init = fio_posixaio_init,
.prep = fio_posixaio_prep,
.queue = fio_posixaio_queue,
io_u->error = 0;
io_u->resid = 0;
- if (td_ioengine_flagged(td, FIO_SYNCIO)) {
+ if (td_ioengine_flagged(td, FIO_SYNCIO) ||
+ (td_ioengine_flagged(td, FIO_ASYNCIO_SYNC_TRIM) &&
+ io_u->ddir == DDIR_TRIM)) {
if (fio_fill_issue_time(td))
fio_gettime(&io_u->issue_time, NULL);
td_io_commit(td);
}
- if (!td_ioengine_flagged(td, FIO_SYNCIO)) {
+ if (!td_ioengine_flagged(td, FIO_SYNCIO) &&
+ (!td_ioengine_flagged(td, FIO_ASYNCIO_SYNC_TRIM) ||
+ io_u->ddir != DDIR_TRIM)) {
if (fio_fill_issue_time(td))
fio_gettime(&io_u->issue_time, NULL);
FIO_FAKEIO = 1 << 11, /* engine pretends to do IO */
FIO_NOSTATS = 1 << 12, /* don't do IO stats */
FIO_NOFILEHASH = 1 << 13, /* doesn't hash the files for lookup later. */
+ FIO_ASYNCIO_SYNC_TRIM
+ = 1 << 14 /* io engine has async ->queue except for trim */
};
/*