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()
145 struct fuse_ring_ent *ent; in ent_list_request_expired() local
148 ent = list_first_entry_or_null(list, struct fuse_ring_ent, list); in ent_list_request_expired()
149 if (!ent) in ent_list_request_expired()
152 req = ent->fuse_req; in ent_list_request_expired()
196 struct fuse_ring_ent *ent, *next; in fuse_uring_destruct() local
206 list_for_each_entry_safe(ent, next, &queue->ent_released, in fuse_uring_destruct()
208 list_del_init(&ent->list); in fuse_uring_destruct()
209 kfree(ent); in fuse_uring_destruct()
326 static void fuse_uring_entry_teardown(struct fuse_ring_ent *ent) in fuse_uring_entry_teardown() argument
331 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_entry_teardown()
334 cmd = ent->cmd; in fuse_uring_entry_teardown()
335 ent->cmd = NULL; in fuse_uring_entry_teardown()
336 req = ent->fuse_req; in fuse_uring_entry_teardown()
337 ent->fuse_req = NULL; in fuse_uring_entry_teardown()
349 list_move(&ent->list, &queue->ent_released); in fuse_uring_entry_teardown()
350 ent->state = FRRS_RELEASED; in fuse_uring_entry_teardown()
365 struct fuse_ring_ent *ent, *next; in fuse_uring_stop_list_entries() local
370 list_for_each_entry_safe(ent, next, head, list) { in fuse_uring_stop_list_entries()
371 if (ent->state != exp_state) { in fuse_uring_stop_list_entries()
373 queue->qid, ent->state, exp_state); in fuse_uring_stop_list_entries()
377 ent->state = FRRS_TEARDOWN; in fuse_uring_stop_list_entries()
378 list_move(&ent->list, &to_teardown); in fuse_uring_stop_list_entries()
383 list_for_each_entry_safe(ent, next, &to_teardown, list) { in fuse_uring_stop_list_entries()
384 fuse_uring_entry_teardown(ent); in fuse_uring_stop_list_entries()
404 struct fuse_ring_ent *ent; in fuse_uring_log_ent_state() local
417 list_for_each_entry(ent, &queue->ent_w_req_queue, list) { in fuse_uring_log_ent_state()
419 ring, qid, ent, ent->state); in fuse_uring_log_ent_state()
421 list_for_each_entry(ent, &queue->ent_commit_queue, list) { in fuse_uring_log_ent_state()
423 ring, qid, ent, ent->state); in fuse_uring_log_ent_state()
501 struct fuse_ring_ent *ent = uring_cmd_to_ring_ent(cmd); in fuse_uring_cancel() local
509 queue = ent->queue; in fuse_uring_cancel()
511 if (ent->state == FRRS_AVAILABLE) { in fuse_uring_cancel()
512 ent->state = FRRS_USERSPACE; in fuse_uring_cancel()
513 list_move_tail(&ent->list, &queue->ent_in_userspace); in fuse_uring_cancel()
515 ent->cmd = NULL; in fuse_uring_cancel()
578 struct fuse_ring_ent *ent) in fuse_uring_copy_from_ring() argument
586 err = copy_from_user(&ring_in_out, &ent->headers->ring_ent_in_out, in fuse_uring_copy_from_ring()
591 err = import_ubuf(ITER_SOURCE, ent->payload, ring->max_payload_sz, in fuse_uring_copy_from_ring()
607 struct fuse_ring_ent *ent) in fuse_uring_args_to_ring() argument
620 err = import_ubuf(ITER_DEST, ent->payload, ring->max_payload_sz, &iter); in fuse_uring_args_to_ring()
636 err = copy_to_user(&ent->headers->op_in, in_args->value, in fuse_uring_args_to_ring()
657 err = copy_to_user(&ent->headers->ring_ent_in_out, &ent_in_out, in fuse_uring_args_to_ring()
662 static int fuse_uring_copy_to_ring(struct fuse_ring_ent *ent, in fuse_uring_copy_to_ring() argument
665 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_copy_to_ring()
670 if (WARN_ON(ent->state != FRRS_FUSE_REQ)) { in fuse_uring_copy_to_ring()
672 queue->qid, ent, ent->state); in fuse_uring_copy_to_ring()
681 err = fuse_uring_args_to_ring(ring, req, ent); in fuse_uring_copy_to_ring()
688 err = copy_to_user(&ent->headers->in_out, &req->in.h, in fuse_uring_copy_to_ring()
698 static int fuse_uring_prepare_send(struct fuse_ring_ent *ent, in fuse_uring_prepare_send() argument
703 err = fuse_uring_copy_to_ring(ent, req); in fuse_uring_prepare_send()
707 fuse_uring_req_end(ent, req, err); in fuse_uring_prepare_send()
717 static int fuse_uring_send_next_to_ring(struct fuse_ring_ent *ent, in fuse_uring_send_next_to_ring() argument
721 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_send_next_to_ring()
725 err = fuse_uring_prepare_send(ent, req); in fuse_uring_send_next_to_ring()
730 cmd = ent->cmd; in fuse_uring_send_next_to_ring()
731 ent->cmd = NULL; in fuse_uring_send_next_to_ring()
732 ent->state = FRRS_USERSPACE; in fuse_uring_send_next_to_ring()
733 list_move_tail(&ent->list, &queue->ent_in_userspace); in fuse_uring_send_next_to_ring()
743 static void fuse_uring_ent_avail(struct fuse_ring_ent *ent, in fuse_uring_ent_avail() argument
746 WARN_ON_ONCE(!ent->cmd); in fuse_uring_ent_avail()
747 list_move(&ent->list, &queue->ent_avail_queue); in fuse_uring_ent_avail()
748 ent->state = FRRS_AVAILABLE; in fuse_uring_ent_avail()
752 static void fuse_uring_add_to_pq(struct fuse_ring_ent *ent, in fuse_uring_add_to_pq() argument
755 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_add_to_pq()
759 req->ring_entry = ent; in fuse_uring_add_to_pq()
767 static void fuse_uring_add_req_to_ring_ent(struct fuse_ring_ent *ent, in fuse_uring_add_req_to_ring_ent() argument
770 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_add_req_to_ring_ent()
774 if (WARN_ON_ONCE(ent->state != FRRS_AVAILABLE && in fuse_uring_add_req_to_ring_ent()
775 ent->state != FRRS_COMMIT)) { in fuse_uring_add_req_to_ring_ent()
776 pr_warn("%s qid=%d state=%d\n", __func__, ent->queue->qid, in fuse_uring_add_req_to_ring_ent()
777 ent->state); in fuse_uring_add_req_to_ring_ent()
781 ent->fuse_req = req; in fuse_uring_add_req_to_ring_ent()
782 ent->state = FRRS_FUSE_REQ; in fuse_uring_add_req_to_ring_ent()
783 list_move_tail(&ent->list, &queue->ent_w_req_queue); in fuse_uring_add_req_to_ring_ent()
784 fuse_uring_add_to_pq(ent, req); in fuse_uring_add_req_to_ring_ent()
788 static struct fuse_req *fuse_uring_ent_assign_req(struct fuse_ring_ent *ent) in fuse_uring_ent_assign_req() argument
792 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_ent_assign_req()
800 fuse_uring_add_req_to_ring_ent(ent, req); in fuse_uring_ent_assign_req()
810 static void fuse_uring_commit(struct fuse_ring_ent *ent, struct fuse_req *req, in fuse_uring_commit() argument
813 struct fuse_ring *ring = ent->queue->ring; in fuse_uring_commit()
817 err = copy_from_user(&req->out.h, &ent->headers->in_out, in fuse_uring_commit()
830 err = fuse_uring_copy_from_ring(ring, req, ent); in fuse_uring_commit()
832 fuse_uring_req_end(ent, req, err); in fuse_uring_commit()
838 static void fuse_uring_next_fuse_req(struct fuse_ring_ent *ent, in fuse_uring_next_fuse_req() argument
847 fuse_uring_ent_avail(ent, queue); in fuse_uring_next_fuse_req()
848 req = fuse_uring_ent_assign_req(ent); in fuse_uring_next_fuse_req()
852 err = fuse_uring_send_next_to_ring(ent, req, issue_flags); in fuse_uring_next_fuse_req()
858 static int fuse_ring_ent_set_commit(struct fuse_ring_ent *ent) in fuse_ring_ent_set_commit() argument
860 struct fuse_ring_queue *queue = ent->queue; in fuse_ring_ent_set_commit()
864 if (WARN_ON_ONCE(ent->state != FRRS_USERSPACE)) in fuse_ring_ent_set_commit()
867 ent->state = FRRS_COMMIT; in fuse_ring_ent_set_commit()
868 list_move(&ent->list, &queue->ent_commit_queue); in fuse_ring_ent_set_commit()
878 struct fuse_ring_ent *ent; in fuse_uring_commit_fetch() local
917 ent = req->ring_entry; in fuse_uring_commit_fetch()
920 err = fuse_ring_ent_set_commit(ent); in fuse_uring_commit_fetch()
923 queue->qid, commit_id, ent->state); in fuse_uring_commit_fetch()
931 ent->cmd = cmd; in fuse_uring_commit_fetch()
935 fuse_uring_prepare_cancel(cmd, issue_flags, ent); in fuse_uring_commit_fetch()
936 fuse_uring_commit(ent, req, issue_flags); in fuse_uring_commit_fetch()
944 fuse_uring_next_fuse_req(ent, queue, issue_flags); in fuse_uring_commit_fetch()
976 static void fuse_uring_do_register(struct fuse_ring_ent *ent, in fuse_uring_do_register() argument
980 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_do_register()
985 fuse_uring_prepare_cancel(cmd, issue_flags, ent); in fuse_uring_do_register()
988 ent->cmd = cmd; in fuse_uring_do_register()
989 fuse_uring_ent_avail(ent, queue); in fuse_uring_do_register()
1034 struct fuse_ring_ent *ent; in fuse_uring_create_ring_ent() local
1060 ent = kzalloc(sizeof(*ent), GFP_KERNEL_ACCOUNT); in fuse_uring_create_ring_ent()
1061 if (!ent) in fuse_uring_create_ring_ent()
1064 INIT_LIST_HEAD(&ent->list); in fuse_uring_create_ring_ent()
1066 ent->queue = queue; in fuse_uring_create_ring_ent()
1067 ent->headers = iov[0].iov_base; in fuse_uring_create_ring_ent()
1068 ent->payload = iov[1].iov_base; in fuse_uring_create_ring_ent()
1071 return ent; in fuse_uring_create_ring_ent()
1084 struct fuse_ring_ent *ent; in fuse_uring_register() local
1112 ent = fuse_uring_create_ring_ent(cmd, queue); in fuse_uring_register()
1113 if (IS_ERR(ent)) in fuse_uring_register()
1114 return PTR_ERR(ent); in fuse_uring_register()
1116 fuse_uring_do_register(ent, cmd, issue_flags); in fuse_uring_register()
1192 static void fuse_uring_send(struct fuse_ring_ent *ent, struct io_uring_cmd *cmd, in fuse_uring_send() argument
1195 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_send()
1198 ent->state = FRRS_USERSPACE; in fuse_uring_send()
1199 list_move_tail(&ent->list, &queue->ent_in_userspace); in fuse_uring_send()
1200 ent->cmd = NULL; in fuse_uring_send()
1214 struct fuse_ring_ent *ent = uring_cmd_to_ring_ent(cmd); in fuse_uring_send_in_task() local
1215 struct fuse_ring_queue *queue = ent->queue; in fuse_uring_send_in_task()
1219 err = fuse_uring_prepare_send(ent, ent->fuse_req); in fuse_uring_send_in_task()
1221 fuse_uring_next_fuse_req(ent, queue, issue_flags); in fuse_uring_send_in_task()
1228 fuse_uring_send(ent, cmd, err, issue_flags); in fuse_uring_send_in_task()
1249 static void fuse_uring_dispatch_ent(struct fuse_ring_ent *ent) in fuse_uring_dispatch_ent() argument
1251 struct io_uring_cmd *cmd = ent->cmd; in fuse_uring_dispatch_ent()
1253 uring_cmd_set_ring_ent(cmd, ent); in fuse_uring_dispatch_ent()
1263 struct fuse_ring_ent *ent = NULL; in fuse_uring_queue_fuse_req() local
1281 ent = list_first_entry_or_null(&queue->ent_avail_queue, in fuse_uring_queue_fuse_req()
1283 if (ent) in fuse_uring_queue_fuse_req()
1284 fuse_uring_add_req_to_ring_ent(ent, req); in fuse_uring_queue_fuse_req()
1289 if (ent) in fuse_uring_queue_fuse_req()
1290 fuse_uring_dispatch_ent(ent); in fuse_uring_queue_fuse_req()
1307 struct fuse_ring_ent *ent = NULL; in fuse_uring_queue_bq_req() local
1323 ent = list_first_entry_or_null(&queue->ent_avail_queue, in fuse_uring_queue_bq_req()
1339 if (ent && req) { in fuse_uring_queue_bq_req()
1340 fuse_uring_add_req_to_ring_ent(ent, req); in fuse_uring_queue_bq_req()
1343 fuse_uring_dispatch_ent(ent); in fuse_uring_queue_bq_req()