| 105 | } |
| 106 | |
| 107 | static int test_double_reg_unreg(int bgid) |
| 108 | { |
| 109 | struct io_uring_buf_reg reg = { }; |
| 110 | struct io_uring_buf_ring *br; |
| 111 | struct io_uring ring; |
| 112 | int ret; |
| 113 | |
| 114 | ret = t_create_ring(1, &ring, 0); |
| 115 | if (ret == T_SETUP_SKIP) |
| 116 | return 0; |
| 117 | else if (ret != T_SETUP_OK) |
| 118 | return 1; |
| 119 | |
| 120 | br = io_uring_setup_buf_ring(&ring, 32, bgid, 0, &ret); |
| 121 | if (!br) { |
| 122 | fprintf(stderr, "Buffer ring register failed %d\n", ret); |
| 123 | return 1; |
| 124 | } |
| 125 | |
| 126 | /* check that 2nd register with same bgid fails */ |
| 127 | reg.ring_addr = (unsigned long) br; |
| 128 | reg.ring_entries = 32; |
| 129 | reg.bgid = bgid; |
| 130 | |
| 131 | ret = io_uring_register_buf_ring(&ring, ®, 0); |
| 132 | if (ret != -EEXIST) { |
| 133 | fprintf(stderr, "Buffer ring register failed %d\n", ret); |
| 134 | return 1; |
| 135 | } |
| 136 | |
| 137 | ret = io_uring_free_buf_ring(&ring, br, 32, bgid); |
| 138 | if (ret) { |
| 139 | fprintf(stderr, "Buffer ring register failed %d\n", ret); |
| 140 | return 1; |
| 141 | } |
| 142 | |
| 143 | ret = io_uring_unregister_buf_ring(&ring, bgid); |
| 144 | if (ret != -EINVAL && ret != -ENOENT) { |
| 145 | fprintf(stderr, "Buffer ring register failed %d\n", ret); |
| 146 | return 1; |
| 147 | } |
| 148 | |
| 149 | io_uring_queue_exit(&ring); |
| 150 | return 0; |
| 151 | } |
| 152 | |
| 153 | static int test_reg_unreg(int bgid) |
| 154 | { |
no test coverage detected