Lines Matching full:req
26 static void io_req_uring_cleanup(struct io_kiocb *req, unsigned int issue_flags)
28 struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
29 struct io_async_cmd *ac = req->async_data;
38 if (io_alloc_cache_put(&req->ctx->cmd_cache, ac)) {
40 io_req_async_data_clear(req, REQ_F_NEED_CLEANUP);
44 void io_uring_cmd_cleanup(struct io_kiocb *req)
46 io_req_uring_cleanup(req, 0);
53 struct io_kiocb *req;
58 hlist_for_each_entry_safe(req, tmp, &ctx->cancelable_uring_cmd,
60 struct io_uring_cmd *cmd = io_kiocb_to_cmd(req,
62 struct file *file = req->file;
64 if (!cancel_all && req->tctx != tctx)
80 struct io_kiocb *req = cmd_to_io_kiocb(cmd);
81 struct io_ring_ctx *ctx = req->ctx;
88 hlist_del(&req->hash_node);
104 struct io_kiocb *req = cmd_to_io_kiocb(cmd);
105 struct io_ring_ctx *ctx = req->ctx;
110 hlist_add_head(&req->hash_node, &ctx->cancelable_uring_cmd);
116 static void io_uring_cmd_work(struct io_kiocb *req, io_tw_token_t tw)
118 struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
121 if (io_should_terminate_tw(req->ctx))
132 struct io_kiocb *req = cmd_to_io_kiocb(ioucmd);
134 if (WARN_ON_ONCE(req->flags & REQ_F_APOLL_MULTISHOT))
138 req->io_task_work.func = io_uring_cmd_work;
139 __io_req_task_work_add(req, flags);
143 static inline void io_req_set_cqe32_extra(struct io_kiocb *req,
146 req->big_cqe.extra1 = extra1;
147 req->big_cqe.extra2 = extra2;
157 struct io_kiocb *req = cmd_to_io_kiocb(ioucmd);
159 if (WARN_ON_ONCE(req->flags & REQ_F_APOLL_MULTISHOT))
165 req_set_fail(req);
167 io_req_set_res(req, ret, 0);
169 if (req->ctx->flags & IORING_SETUP_CQE_MIXED)
170 req->cqe.flags |= IORING_CQE_F_32;
171 io_req_set_cqe32_extra(req, res2, 0);
173 io_req_uring_cleanup(req, issue_flags);
174 if (req->ctx->flags & IORING_SETUP_IOPOLL) {
176 smp_store_release(&req->iopoll_completed, 1);
180 io_req_complete_defer(req);
182 req->io_task_work.func = io_req_task_complete;
183 io_req_task_work_add(req);
188 int io_uring_cmd_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
190 struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
203 req->buf_index = READ_ONCE(sqe->buf_index);
207 !!(req->flags & REQ_F_BUFFER_SELECT))
212 ac = io_uring_alloc_async_data(&req->ctx->cmd_cache, req);
219 void io_uring_cmd_sqe_copy(struct io_kiocb *req)
221 struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
222 struct io_async_cmd *ac = req->async_data;
227 memcpy(ac->sqes, ioucmd->sqe, uring_sqe_size(req->ctx));
231 int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags)
233 struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
234 struct io_ring_ctx *ctx = req->ctx;
235 struct file *file = req->file;
255 req->iopoll_completed = 0;
257 /* make sure every req only blocks once */
258 req->flags &= ~REQ_F_IOPOLL_STATE;
259 req->iopoll_start = ktime_get_ns();
275 req_set_fail(req);
276 io_req_uring_cleanup(req, issue_flags);
277 io_req_set_res(req, ret, 0);
286 struct io_kiocb *req = cmd_to_io_kiocb(ioucmd);
291 return io_import_reg_buf(req, iter, ubuf, len, rw, issue_flags);
301 struct io_kiocb *req = cmd_to_io_kiocb(ioucmd);
302 struct io_async_cmd *ac = req->async_data;
308 ret = io_prep_reg_iovec(req, &ac->vec, uvec, uvec_segs);
312 return io_import_reg_vec(ddir, iter, req, &ac->vec, uvec_segs,
319 struct io_kiocb *req = cmd_to_io_kiocb(ioucmd);
321 io_req_queue_iowq(req);
327 struct io_kiocb *req = cmd_to_io_kiocb(cmd);
330 if (likely(req->flags & REQ_F_APOLL_MULTISHOT))
333 req->flags |= REQ_F_APOLL_MULTISHOT;
336 ret = io_arm_apoll(req, issue_flags, mask);
344 struct io_kiocb *req = cmd_to_io_kiocb(cmd);
348 return io_req_post_cqe32(req, cqe);
359 struct io_kiocb *req = cmd_to_io_kiocb(ioucmd);
364 if (WARN_ON_ONCE(!io_do_buffer_select(req)))
367 return io_buffer_select(req, len, buf_group, issue_flags);
382 struct io_kiocb *req = cmd_to_io_kiocb(ioucmd);
389 cflags = io_put_kbuf(req, sel->val, sel->buf_list);
390 if (io_req_post_cqe(req, sel->val, cflags | IORING_CQE_F_MORE))
394 io_kbuf_recycle(req, sel->buf_list, issue_flags);
396 req_set_fail(req);
397 io_req_set_res(req, sel->val, cflags);