Lines Matching refs:data
69 static void queue_prepped(struct io_uring *ring, struct io_data *data)
76 if (data->read)
77 io_uring_prep_readv(sqe, infd, &data->iov, 1, data->offset);
79 io_uring_prep_writev(sqe, outfd, &data->iov, 1, data->offset);
81 io_uring_sqe_set_data(sqe, data);
87 struct io_data *data;
89 data = malloc(size + sizeof(*data));
90 if (!data)
95 free(data);
99 data->read = 1;
100 data->offset = data->first_offset = offset;
102 data->iov.iov_base = data + 1;
103 data->iov.iov_len = size;
104 data->first_len = size;
106 io_uring_prep_readv(sqe, infd, &data->iov, 1, offset);
107 io_uring_sqe_set_data(sqe, data);
111 static void queue_write(struct io_uring *ring, struct io_data *data)
113 data->read = 0;
114 data->offset = data->first_offset;
116 data->iov.iov_base = data + 1;
117 data->iov.iov_len = data->first_len;
119 queue_prepped(ring, data);
172 struct io_data *data;
187 data = io_uring_cqe_get_data(cqe);
190 queue_prepped(ring, data);
197 } else if ((size_t) cqe->res != data->iov.iov_len) {
199 data->iov.iov_base += cqe->res;
200 data->iov.iov_len -= cqe->res;
201 data->offset += cqe->res;
202 queue_prepped(ring, data);
211 if (data->read) {
212 queue_write(ring, data);
213 write_left -= data->first_len;
217 free(data);