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()
153 struct fuse_ring_ent *ent, *next; in fuse_uring_destruct() local
163 list_for_each_entry_safe(ent, next, &queue->ent_released, in fuse_uring_destruct()
165 list_del_init(&ent->list); in fuse_uring_destruct()
166 kfree(ent); in fuse_uring_destruct()
284 static void fuse_uring_entry_teardown(struct fuse_ring_ent *ent) in fuse_uring_entry_teardown() argument
289 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_entry_teardown()
292 cmd = ent->cmd; in fuse_uring_entry_teardown()
293 ent->cmd = NULL; in fuse_uring_entry_teardown()
294 req = ent->fuse_req; in fuse_uring_entry_teardown()
295 ent->fuse_req = NULL; in fuse_uring_entry_teardown()
307 list_move(&ent->list, &queue->ent_released); in fuse_uring_entry_teardown()
308 ent->state = FRRS_RELEASED; in fuse_uring_entry_teardown()
323 struct fuse_ring_ent *ent, *next; in fuse_uring_stop_list_entries() local
328 list_for_each_entry_safe(ent, next, head, list) { in fuse_uring_stop_list_entries()
329 if (ent->state != exp_state) { in fuse_uring_stop_list_entries()
331 queue->qid, ent->state, exp_state); in fuse_uring_stop_list_entries()
335 ent->state = FRRS_TEARDOWN; in fuse_uring_stop_list_entries()
336 list_move(&ent->list, &to_teardown); in fuse_uring_stop_list_entries()
341 list_for_each_entry_safe(ent, next, &to_teardown, list) { in fuse_uring_stop_list_entries()
342 fuse_uring_entry_teardown(ent); in fuse_uring_stop_list_entries()
362 struct fuse_ring_ent *ent; in fuse_uring_log_ent_state() local
375 list_for_each_entry(ent, &queue->ent_w_req_queue, list) { in fuse_uring_log_ent_state()
377 ring, qid, ent, ent->state); in fuse_uring_log_ent_state()
379 list_for_each_entry(ent, &queue->ent_commit_queue, list) { in fuse_uring_log_ent_state()
381 ring, qid, ent, ent->state); in fuse_uring_log_ent_state()
459 struct fuse_ring_ent *ent = uring_cmd_to_ring_ent(cmd); in fuse_uring_cancel() local
467 queue = ent->queue; in fuse_uring_cancel()
469 if (ent->state == FRRS_AVAILABLE) { in fuse_uring_cancel()
470 ent->state = FRRS_USERSPACE; in fuse_uring_cancel()
471 list_move(&ent->list, &queue->ent_in_userspace); in fuse_uring_cancel()
473 ent->cmd = NULL; in fuse_uring_cancel()
536 struct fuse_ring_ent *ent) in fuse_uring_copy_from_ring() argument
544 err = copy_from_user(&ring_in_out, &ent->headers->ring_ent_in_out, in fuse_uring_copy_from_ring()
549 err = import_ubuf(ITER_SOURCE, ent->payload, ring->max_payload_sz, in fuse_uring_copy_from_ring()
565 struct fuse_ring_ent *ent) in fuse_uring_args_to_ring() argument
578 err = import_ubuf(ITER_DEST, ent->payload, ring->max_payload_sz, &iter); in fuse_uring_args_to_ring()
594 err = copy_to_user(&ent->headers->op_in, in_args->value, in fuse_uring_args_to_ring()
615 err = copy_to_user(&ent->headers->ring_ent_in_out, &ent_in_out, in fuse_uring_args_to_ring()
620 static int fuse_uring_copy_to_ring(struct fuse_ring_ent *ent, in fuse_uring_copy_to_ring() argument
623 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_copy_to_ring()
628 if (WARN_ON(ent->state != FRRS_FUSE_REQ)) { in fuse_uring_copy_to_ring()
630 queue->qid, ent, ent->state); in fuse_uring_copy_to_ring()
639 err = fuse_uring_args_to_ring(ring, req, ent); in fuse_uring_copy_to_ring()
646 err = copy_to_user(&ent->headers->in_out, &req->in.h, in fuse_uring_copy_to_ring()
656 static int fuse_uring_prepare_send(struct fuse_ring_ent *ent, in fuse_uring_prepare_send() argument
661 err = fuse_uring_copy_to_ring(ent, req); in fuse_uring_prepare_send()
665 fuse_uring_req_end(ent, req, err); in fuse_uring_prepare_send()
675 static int fuse_uring_send_next_to_ring(struct fuse_ring_ent *ent, in fuse_uring_send_next_to_ring() argument
679 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_send_next_to_ring()
683 err = fuse_uring_prepare_send(ent, req); in fuse_uring_send_next_to_ring()
688 cmd = ent->cmd; in fuse_uring_send_next_to_ring()
689 ent->cmd = NULL; in fuse_uring_send_next_to_ring()
690 ent->state = FRRS_USERSPACE; in fuse_uring_send_next_to_ring()
691 list_move(&ent->list, &queue->ent_in_userspace); in fuse_uring_send_next_to_ring()
701 static void fuse_uring_ent_avail(struct fuse_ring_ent *ent, in fuse_uring_ent_avail() argument
704 WARN_ON_ONCE(!ent->cmd); in fuse_uring_ent_avail()
705 list_move(&ent->list, &queue->ent_avail_queue); in fuse_uring_ent_avail()
706 ent->state = FRRS_AVAILABLE; in fuse_uring_ent_avail()
710 static void fuse_uring_add_to_pq(struct fuse_ring_ent *ent, in fuse_uring_add_to_pq() argument
713 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_add_to_pq()
717 req->ring_entry = ent; in fuse_uring_add_to_pq()
725 static void fuse_uring_add_req_to_ring_ent(struct fuse_ring_ent *ent, in fuse_uring_add_req_to_ring_ent() argument
728 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_add_req_to_ring_ent()
732 if (WARN_ON_ONCE(ent->state != FRRS_AVAILABLE && in fuse_uring_add_req_to_ring_ent()
733 ent->state != FRRS_COMMIT)) { in fuse_uring_add_req_to_ring_ent()
734 pr_warn("%s qid=%d state=%d\n", __func__, ent->queue->qid, in fuse_uring_add_req_to_ring_ent()
735 ent->state); in fuse_uring_add_req_to_ring_ent()
739 ent->fuse_req = req; in fuse_uring_add_req_to_ring_ent()
740 ent->state = FRRS_FUSE_REQ; in fuse_uring_add_req_to_ring_ent()
741 list_move(&ent->list, &queue->ent_w_req_queue); in fuse_uring_add_req_to_ring_ent()
742 fuse_uring_add_to_pq(ent, req); in fuse_uring_add_req_to_ring_ent()
746 static struct fuse_req *fuse_uring_ent_assign_req(struct fuse_ring_ent *ent) in fuse_uring_ent_assign_req() argument
750 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_ent_assign_req()
758 fuse_uring_add_req_to_ring_ent(ent, req); in fuse_uring_ent_assign_req()
768 static void fuse_uring_commit(struct fuse_ring_ent *ent, struct fuse_req *req, in fuse_uring_commit() argument
771 struct fuse_ring *ring = ent->queue->ring; in fuse_uring_commit()
775 err = copy_from_user(&req->out.h, &ent->headers->in_out, in fuse_uring_commit()
788 err = fuse_uring_copy_from_ring(ring, req, ent); in fuse_uring_commit()
790 fuse_uring_req_end(ent, req, err); in fuse_uring_commit()
796 static void fuse_uring_next_fuse_req(struct fuse_ring_ent *ent, in fuse_uring_next_fuse_req() argument
805 fuse_uring_ent_avail(ent, queue); in fuse_uring_next_fuse_req()
806 req = fuse_uring_ent_assign_req(ent); in fuse_uring_next_fuse_req()
810 err = fuse_uring_send_next_to_ring(ent, req, issue_flags); in fuse_uring_next_fuse_req()
816 static int fuse_ring_ent_set_commit(struct fuse_ring_ent *ent) in fuse_ring_ent_set_commit() argument
818 struct fuse_ring_queue *queue = ent->queue; in fuse_ring_ent_set_commit()
822 if (WARN_ON_ONCE(ent->state != FRRS_USERSPACE)) in fuse_ring_ent_set_commit()
825 ent->state = FRRS_COMMIT; in fuse_ring_ent_set_commit()
826 list_move(&ent->list, &queue->ent_commit_queue); in fuse_ring_ent_set_commit()
836 struct fuse_ring_ent *ent; in fuse_uring_commit_fetch() local
875 ent = req->ring_entry; in fuse_uring_commit_fetch()
878 err = fuse_ring_ent_set_commit(ent); in fuse_uring_commit_fetch()
881 queue->qid, commit_id, ent->state); in fuse_uring_commit_fetch()
889 ent->cmd = cmd; in fuse_uring_commit_fetch()
893 fuse_uring_prepare_cancel(cmd, issue_flags, ent); in fuse_uring_commit_fetch()
894 fuse_uring_commit(ent, req, issue_flags); in fuse_uring_commit_fetch()
902 fuse_uring_next_fuse_req(ent, queue, issue_flags); in fuse_uring_commit_fetch()
934 static void fuse_uring_do_register(struct fuse_ring_ent *ent, in fuse_uring_do_register() argument
938 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_do_register()
943 fuse_uring_prepare_cancel(cmd, issue_flags, ent); in fuse_uring_do_register()
946 ent->cmd = cmd; in fuse_uring_do_register()
947 fuse_uring_ent_avail(ent, queue); in fuse_uring_do_register()
992 struct fuse_ring_ent *ent; in fuse_uring_create_ring_ent() local
1018 ent = kzalloc(sizeof(*ent), GFP_KERNEL_ACCOUNT); in fuse_uring_create_ring_ent()
1019 if (!ent) in fuse_uring_create_ring_ent()
1022 INIT_LIST_HEAD(&ent->list); in fuse_uring_create_ring_ent()
1024 ent->queue = queue; in fuse_uring_create_ring_ent()
1025 ent->headers = iov[0].iov_base; in fuse_uring_create_ring_ent()
1026 ent->payload = iov[1].iov_base; in fuse_uring_create_ring_ent()
1029 return ent; in fuse_uring_create_ring_ent()
1042 struct fuse_ring_ent *ent; in fuse_uring_register() local
1070 ent = fuse_uring_create_ring_ent(cmd, queue); in fuse_uring_register()
1071 if (IS_ERR(ent)) in fuse_uring_register()
1072 return PTR_ERR(ent); in fuse_uring_register()
1074 fuse_uring_do_register(ent, cmd, issue_flags); in fuse_uring_register()
1150 static void fuse_uring_send(struct fuse_ring_ent *ent, struct io_uring_cmd *cmd, in fuse_uring_send() argument
1153 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_send()
1156 ent->state = FRRS_USERSPACE; in fuse_uring_send()
1157 list_move(&ent->list, &queue->ent_in_userspace); in fuse_uring_send()
1158 ent->cmd = NULL; in fuse_uring_send()
1172 struct fuse_ring_ent *ent = uring_cmd_to_ring_ent(cmd); in fuse_uring_send_in_task() local
1173 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_send_in_task()
1177 err = fuse_uring_prepare_send(ent, ent->fuse_req); in fuse_uring_send_in_task()
1179 fuse_uring_next_fuse_req(ent, queue, issue_flags); in fuse_uring_send_in_task()
1186 fuse_uring_send(ent, cmd, err, issue_flags); in fuse_uring_send_in_task()
1207 static void fuse_uring_dispatch_ent(struct fuse_ring_ent *ent) in fuse_uring_dispatch_ent() argument
1209 struct io_uring_cmd *cmd = ent->cmd; in fuse_uring_dispatch_ent()
1211 uring_cmd_set_ring_ent(cmd, ent); in fuse_uring_dispatch_ent()
1221 struct fuse_ring_ent *ent = NULL; in fuse_uring_queue_fuse_req() local
1239 ent = list_first_entry_or_null(&queue->ent_avail_queue, in fuse_uring_queue_fuse_req()
1241 if (ent) in fuse_uring_queue_fuse_req()
1242 fuse_uring_add_req_to_ring_ent(ent, req); in fuse_uring_queue_fuse_req()
1247 if (ent) in fuse_uring_queue_fuse_req()
1248 fuse_uring_dispatch_ent(ent); in fuse_uring_queue_fuse_req()
1265 struct fuse_ring_ent *ent = NULL; in fuse_uring_queue_bq_req() local
1281 ent = list_first_entry_or_null(&queue->ent_avail_queue, in fuse_uring_queue_bq_req()
1297 if (ent && req) { in fuse_uring_queue_bq_req()
1298 fuse_uring_add_req_to_ring_ent(ent, req); in fuse_uring_queue_bq_req()
1301 fuse_uring_dispatch_ent(ent); in fuse_uring_queue_bq_req()