| 763 | } |
| 764 | |
| 765 | static int test_timeout_link_chain2(struct io_uring *ring) |
| 766 | { |
| 767 | struct __kernel_timespec ts; |
| 768 | struct io_uring_cqe *cqe; |
| 769 | struct io_uring_sqe *sqe; |
| 770 | int fds[2], ret, i; |
| 771 | |
| 772 | if (pipe(fds)) { |
| 773 | perror("pipe"); |
| 774 | return 1; |
| 775 | } |
| 776 | |
| 777 | sqe = io_uring_get_sqe(ring); |
| 778 | if (!sqe) { |
| 779 | printf("get sqe failed\n"); |
| 780 | goto err; |
| 781 | } |
| 782 | io_uring_prep_poll_add(sqe, fds[0], POLLIN); |
| 783 | sqe->flags |= IOSQE_IO_LINK; |
| 784 | sqe->user_data = 1; |
| 785 | |
| 786 | sqe = io_uring_get_sqe(ring); |
| 787 | if (!sqe) { |
| 788 | printf("get sqe failed\n"); |
| 789 | goto err; |
| 790 | } |
| 791 | ts.tv_sec = 0; |
| 792 | ts.tv_nsec = 1000000; |
| 793 | io_uring_prep_link_timeout(sqe, &ts, 0); |
| 794 | sqe->flags |= IOSQE_IO_LINK; |
| 795 | sqe->user_data = 2; |
| 796 | |
| 797 | sqe = io_uring_get_sqe(ring); |
| 798 | if (!sqe) { |
| 799 | printf("get sqe failed\n"); |
| 800 | goto err; |
| 801 | } |
| 802 | io_uring_prep_nop(sqe); |
| 803 | sqe->flags |= IOSQE_IO_LINK; |
| 804 | sqe->user_data = 3; |
| 805 | |
| 806 | sqe = io_uring_get_sqe(ring); |
| 807 | if (!sqe) { |
| 808 | printf("get sqe failed\n"); |
| 809 | goto err; |
| 810 | } |
| 811 | io_uring_prep_nop(sqe); |
| 812 | sqe->user_data = 4; |
| 813 | |
| 814 | ret = io_uring_submit(ring); |
| 815 | if (ret != 4) { |
| 816 | printf("sqe submit failed: %d\n", ret); |
| 817 | goto err; |
| 818 | } |
| 819 | |
| 820 | for (i = 0; i < 4; i++) { |
| 821 | ret = io_uring_wait_cqe(ring, &cqe); |
| 822 | if (ret < 0) { |
no test coverage detected