Lines Matching refs:ent
28 struct fuse_ring_ent *ent; member
39 pdu->ent = ring_ent; in uring_cmd_set_ring_ent()
47 return pdu->ent; in uring_cmd_to_ring_ent()
78 static void fuse_uring_req_end(struct fuse_ring_ent *ent, struct fuse_req *req, in fuse_uring_req_end() argument
81 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_req_end()
87 ent->fuse_req = NULL; in fuse_uring_req_end()
180 struct fuse_ring_ent *ent, *next; in fuse_uring_destruct() local
190 list_for_each_entry_safe(ent, next, &queue->ent_released, in fuse_uring_destruct()
192 list_del_init(&ent->list); in fuse_uring_destruct()
193 kfree(ent); in fuse_uring_destruct()
310 static void fuse_uring_entry_teardown(struct fuse_ring_ent *ent) in fuse_uring_entry_teardown() argument
315 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_entry_teardown()
318 cmd = ent->cmd; in fuse_uring_entry_teardown()
319 ent->cmd = NULL; in fuse_uring_entry_teardown()
320 req = ent->fuse_req; in fuse_uring_entry_teardown()
321 ent->fuse_req = NULL; in fuse_uring_entry_teardown()
333 list_move(&ent->list, &queue->ent_released); in fuse_uring_entry_teardown()
334 ent->state = FRRS_RELEASED; in fuse_uring_entry_teardown()
349 struct fuse_ring_ent *ent, *next; in fuse_uring_stop_list_entries() local
354 list_for_each_entry_safe(ent, next, head, list) { in fuse_uring_stop_list_entries()
355 if (ent->state != exp_state) { in fuse_uring_stop_list_entries()
357 queue->qid, ent->state, exp_state); in fuse_uring_stop_list_entries()
361 ent->state = FRRS_TEARDOWN; in fuse_uring_stop_list_entries()
362 list_move(&ent->list, &to_teardown); in fuse_uring_stop_list_entries()
367 list_for_each_entry_safe(ent, next, &to_teardown, list) { in fuse_uring_stop_list_entries()
368 fuse_uring_entry_teardown(ent); in fuse_uring_stop_list_entries()
388 struct fuse_ring_ent *ent; in fuse_uring_log_ent_state() local
401 list_for_each_entry(ent, &queue->ent_w_req_queue, list) { in fuse_uring_log_ent_state()
403 ring, qid, ent, ent->state); in fuse_uring_log_ent_state()
405 list_for_each_entry(ent, &queue->ent_commit_queue, list) { in fuse_uring_log_ent_state()
407 ring, qid, ent, ent->state); in fuse_uring_log_ent_state()
485 struct fuse_ring_ent *ent = uring_cmd_to_ring_ent(cmd); in fuse_uring_cancel() local
493 queue = ent->queue; in fuse_uring_cancel()
495 if (ent->state == FRRS_AVAILABLE) { in fuse_uring_cancel()
496 ent->state = FRRS_USERSPACE; in fuse_uring_cancel()
497 list_move(&ent->list, &queue->ent_in_userspace); in fuse_uring_cancel()
499 ent->cmd = NULL; in fuse_uring_cancel()
562 struct fuse_ring_ent *ent) in fuse_uring_copy_from_ring() argument
570 err = copy_from_user(&ring_in_out, &ent->headers->ring_ent_in_out, in fuse_uring_copy_from_ring()
575 err = import_ubuf(ITER_SOURCE, ent->payload, ring->max_payload_sz, in fuse_uring_copy_from_ring()
591 struct fuse_ring_ent *ent) in fuse_uring_args_to_ring() argument
604 err = import_ubuf(ITER_DEST, ent->payload, ring->max_payload_sz, &iter); in fuse_uring_args_to_ring()
620 err = copy_to_user(&ent->headers->op_in, in_args->value, in fuse_uring_args_to_ring()
641 err = copy_to_user(&ent->headers->ring_ent_in_out, &ent_in_out, in fuse_uring_args_to_ring()
646 static int fuse_uring_copy_to_ring(struct fuse_ring_ent *ent, in fuse_uring_copy_to_ring() argument
649 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_copy_to_ring()
654 if (WARN_ON(ent->state != FRRS_FUSE_REQ)) { in fuse_uring_copy_to_ring()
656 queue->qid, ent, ent->state); in fuse_uring_copy_to_ring()
665 err = fuse_uring_args_to_ring(ring, req, ent); in fuse_uring_copy_to_ring()
672 err = copy_to_user(&ent->headers->in_out, &req->in.h, in fuse_uring_copy_to_ring()
682 static int fuse_uring_prepare_send(struct fuse_ring_ent *ent, in fuse_uring_prepare_send() argument
687 err = fuse_uring_copy_to_ring(ent, req); in fuse_uring_prepare_send()
691 fuse_uring_req_end(ent, req, err); in fuse_uring_prepare_send()
701 static int fuse_uring_send_next_to_ring(struct fuse_ring_ent *ent, in fuse_uring_send_next_to_ring() argument
705 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_send_next_to_ring()
709 err = fuse_uring_prepare_send(ent, req); in fuse_uring_send_next_to_ring()
714 cmd = ent->cmd; in fuse_uring_send_next_to_ring()
715 ent->cmd = NULL; in fuse_uring_send_next_to_ring()
716 ent->state = FRRS_USERSPACE; in fuse_uring_send_next_to_ring()
717 list_move(&ent->list, &queue->ent_in_userspace); in fuse_uring_send_next_to_ring()
727 static void fuse_uring_ent_avail(struct fuse_ring_ent *ent, in fuse_uring_ent_avail() argument
730 WARN_ON_ONCE(!ent->cmd); in fuse_uring_ent_avail()
731 list_move(&ent->list, &queue->ent_avail_queue); in fuse_uring_ent_avail()
732 ent->state = FRRS_AVAILABLE; in fuse_uring_ent_avail()
736 static void fuse_uring_add_to_pq(struct fuse_ring_ent *ent, in fuse_uring_add_to_pq() argument
739 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_add_to_pq()
743 req->ring_entry = ent; in fuse_uring_add_to_pq()
751 static void fuse_uring_add_req_to_ring_ent(struct fuse_ring_ent *ent, in fuse_uring_add_req_to_ring_ent() argument
754 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_add_req_to_ring_ent()
758 if (WARN_ON_ONCE(ent->state != FRRS_AVAILABLE && in fuse_uring_add_req_to_ring_ent()
759 ent->state != FRRS_COMMIT)) { in fuse_uring_add_req_to_ring_ent()
760 pr_warn("%s qid=%d state=%d\n", __func__, ent->queue->qid, in fuse_uring_add_req_to_ring_ent()
761 ent->state); in fuse_uring_add_req_to_ring_ent()
765 ent->fuse_req = req; in fuse_uring_add_req_to_ring_ent()
766 ent->state = FRRS_FUSE_REQ; in fuse_uring_add_req_to_ring_ent()
767 list_move(&ent->list, &queue->ent_w_req_queue); in fuse_uring_add_req_to_ring_ent()
768 fuse_uring_add_to_pq(ent, req); in fuse_uring_add_req_to_ring_ent()
772 static struct fuse_req *fuse_uring_ent_assign_req(struct fuse_ring_ent *ent) in fuse_uring_ent_assign_req() argument
776 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_ent_assign_req()
784 fuse_uring_add_req_to_ring_ent(ent, req); in fuse_uring_ent_assign_req()
794 static void fuse_uring_commit(struct fuse_ring_ent *ent, struct fuse_req *req, in fuse_uring_commit() argument
797 struct fuse_ring *ring = ent->queue->ring; in fuse_uring_commit()
801 err = copy_from_user(&req->out.h, &ent->headers->in_out, in fuse_uring_commit()
814 err = fuse_uring_copy_from_ring(ring, req, ent); in fuse_uring_commit()
816 fuse_uring_req_end(ent, req, err); in fuse_uring_commit()
822 static void fuse_uring_next_fuse_req(struct fuse_ring_ent *ent, in fuse_uring_next_fuse_req() argument
831 fuse_uring_ent_avail(ent, queue); in fuse_uring_next_fuse_req()
832 req = fuse_uring_ent_assign_req(ent); in fuse_uring_next_fuse_req()
836 err = fuse_uring_send_next_to_ring(ent, req, issue_flags); in fuse_uring_next_fuse_req()
842 static int fuse_ring_ent_set_commit(struct fuse_ring_ent *ent) in fuse_ring_ent_set_commit() argument
844 struct fuse_ring_queue *queue = ent->queue; in fuse_ring_ent_set_commit()
848 if (WARN_ON_ONCE(ent->state != FRRS_USERSPACE)) in fuse_ring_ent_set_commit()
851 ent->state = FRRS_COMMIT; in fuse_ring_ent_set_commit()
852 list_move(&ent->list, &queue->ent_commit_queue); in fuse_ring_ent_set_commit()
862 struct fuse_ring_ent *ent; in fuse_uring_commit_fetch() local
901 ent = req->ring_entry; in fuse_uring_commit_fetch()
904 err = fuse_ring_ent_set_commit(ent); in fuse_uring_commit_fetch()
907 queue->qid, commit_id, ent->state); in fuse_uring_commit_fetch()
915 ent->cmd = cmd; in fuse_uring_commit_fetch()
919 fuse_uring_prepare_cancel(cmd, issue_flags, ent); in fuse_uring_commit_fetch()
920 fuse_uring_commit(ent, req, issue_flags); in fuse_uring_commit_fetch()
928 fuse_uring_next_fuse_req(ent, queue, issue_flags); in fuse_uring_commit_fetch()
960 static void fuse_uring_do_register(struct fuse_ring_ent *ent, in fuse_uring_do_register() argument
964 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_do_register()
969 fuse_uring_prepare_cancel(cmd, issue_flags, ent); in fuse_uring_do_register()
972 ent->cmd = cmd; in fuse_uring_do_register()
973 fuse_uring_ent_avail(ent, queue); in fuse_uring_do_register()
1018 struct fuse_ring_ent *ent; in fuse_uring_create_ring_ent() local
1044 ent = kzalloc(sizeof(*ent), GFP_KERNEL_ACCOUNT); in fuse_uring_create_ring_ent()
1045 if (!ent) in fuse_uring_create_ring_ent()
1048 INIT_LIST_HEAD(&ent->list); in fuse_uring_create_ring_ent()
1050 ent->queue = queue; in fuse_uring_create_ring_ent()
1051 ent->headers = iov[0].iov_base; in fuse_uring_create_ring_ent()
1052 ent->payload = iov[1].iov_base; in fuse_uring_create_ring_ent()
1055 return ent; in fuse_uring_create_ring_ent()
1068 struct fuse_ring_ent *ent; in fuse_uring_register() local
1096 ent = fuse_uring_create_ring_ent(cmd, queue); in fuse_uring_register()
1097 if (IS_ERR(ent)) in fuse_uring_register()
1098 return PTR_ERR(ent); in fuse_uring_register()
1100 fuse_uring_do_register(ent, cmd, issue_flags); in fuse_uring_register()
1176 static void fuse_uring_send(struct fuse_ring_ent *ent, struct io_uring_cmd *cmd, in fuse_uring_send() argument
1179 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_send()
1182 ent->state = FRRS_USERSPACE; in fuse_uring_send()
1183 list_move(&ent->list, &queue->ent_in_userspace); in fuse_uring_send()
1184 ent->cmd = NULL; in fuse_uring_send()
1198 struct fuse_ring_ent *ent = uring_cmd_to_ring_ent(cmd); in fuse_uring_send_in_task() local
1199 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_send_in_task()
1203 err = fuse_uring_prepare_send(ent, ent->fuse_req); in fuse_uring_send_in_task()
1205 fuse_uring_next_fuse_req(ent, queue, issue_flags); in fuse_uring_send_in_task()
1212 fuse_uring_send(ent, cmd, err, issue_flags); in fuse_uring_send_in_task()
1233 static void fuse_uring_dispatch_ent(struct fuse_ring_ent *ent) in fuse_uring_dispatch_ent() argument
1235 struct io_uring_cmd *cmd = ent->cmd; in fuse_uring_dispatch_ent()
1237 uring_cmd_set_ring_ent(cmd, ent); in fuse_uring_dispatch_ent()
1247 struct fuse_ring_ent *ent = NULL; in fuse_uring_queue_fuse_req() local
1265 ent = list_first_entry_or_null(&queue->ent_avail_queue, in fuse_uring_queue_fuse_req()
1267 if (ent) in fuse_uring_queue_fuse_req()
1268 fuse_uring_add_req_to_ring_ent(ent, req); in fuse_uring_queue_fuse_req()
1273 if (ent) in fuse_uring_queue_fuse_req()
1274 fuse_uring_dispatch_ent(ent); in fuse_uring_queue_fuse_req()
1291 struct fuse_ring_ent *ent = NULL; in fuse_uring_queue_bq_req() local
1307 ent = list_first_entry_or_null(&queue->ent_avail_queue, in fuse_uring_queue_bq_req()
1323 if (ent && req) { in fuse_uring_queue_bq_req()
1324 fuse_uring_add_req_to_ring_ent(ent, req); in fuse_uring_queue_bq_req()
1327 fuse_uring_dispatch_ent(ent); in fuse_uring_queue_bq_req()