- if (io_u->ddir == DDIR_READ)
- iocb->opcode = IORING_OP_READ;
- else
- iocb->opcode = IORING_OP_WRITE;
- iocb->off = io_u->offset;
- iocb->addr = io_u->xfer_buf;
- iocb->len = io_u->xfer_buflen;
- } else if (ddir_sync(io_u->ddir))
- iocb->opcode = IORING_OP_FSYNC;
+ if (o->fixedbufs) {
+ if (io_u->ddir == DDIR_READ)
+ sqe->opcode = IORING_OP_READ_FIXED;
+ else
+ sqe->opcode = IORING_OP_WRITE_FIXED;
+ sqe->addr = (unsigned long) io_u->xfer_buf;
+ sqe->len = io_u->xfer_buflen;
+ sqe->buf_index = io_u->index;
+ } else {
+ if (io_u->ddir == DDIR_READ)
+ sqe->opcode = IORING_OP_READV;
+ else
+ sqe->opcode = IORING_OP_WRITEV;
+ sqe->addr = (unsigned long) &ld->iovecs[io_u->index];
+ sqe->len = 1;
+ }
+ sqe->off = io_u->offset;
+ } else if (ddir_sync(io_u->ddir)) {
+ sqe->fsync_flags = 0;
+ if (io_u->ddir == DDIR_DATASYNC)
+ sqe->fsync_flags |= IORING_FSYNC_DATASYNC;
+ sqe->opcode = IORING_OP_FSYNC;
+ }