But RWF_SYNC applies only to individual write operations. Cached writes already are handled asynchronously by the kernel. SQLite does not care about individual writes, only that all of them have finished, and fsync() is the correct API for that. Using an asynchronous API like libaio makes sense only when you have multiple parallel (read) requests, and when you can handle that the results become available in arbitrary order. This is not how the SQLite VFS works.