| 190 | } |
| 191 | |
| 192 | static int basic_cmd_test(struct io_uring *ring, int op) |
| 193 | { |
| 194 | int cmd_op = opcodes[op].op; |
| 195 | int ret, fd; |
| 196 | |
| 197 | if (!opcodes[op].test) |
| 198 | return T_EXIT_SKIP; |
| 199 | |
| 200 | fd = open(filename, O_DIRECT | O_RDWR | O_EXCL); |
| 201 | if (fd < 0) { |
| 202 | if (errno == EINVAL || errno == EBUSY) |
| 203 | return T_EXIT_SKIP; |
| 204 | fprintf(stderr, "open failed %i\n", errno); |
| 205 | return T_EXIT_FAIL; |
| 206 | } |
| 207 | |
| 208 | ret = cmd_issue_verify(ring, fd, 0, 1, cmd_op); |
| 209 | if (ret == T_EXIT_SKIP) { |
| 210 | printf("cmd %i not supported, skip\n", cmd_op); |
| 211 | opcodes[op].not_supported = 1; |
| 212 | close(fd); |
| 213 | return T_EXIT_SKIP; |
| 214 | } else if (ret) { |
| 215 | fprintf(stderr, "cmd %i fail 0 1\n", cmd_op); |
| 216 | return T_EXIT_FAIL; |
| 217 | } |
| 218 | |
| 219 | ret = cmd_issue_verify(ring, fd, 7, 15, cmd_op); |
| 220 | if (ret) { |
| 221 | fprintf(stderr, "cmd %i fail 7 15 %i\n", cmd_op, ret); |
| 222 | return T_EXIT_FAIL; |
| 223 | } |
| 224 | |
| 225 | ret = cmd_issue_verify(ring, fd, 1, MAX_TEST_LBAS - 1, cmd_op); |
| 226 | if (ret) { |
| 227 | fprintf(stderr, "large cmd %i failed %i\n", cmd_op, ret); |
| 228 | return T_EXIT_FAIL; |
| 229 | } |
| 230 | |
| 231 | ret = test_parallel(ring, fd, cmd_op); |
| 232 | if (ret) { |
| 233 | fprintf(stderr, "test_parallel() %i failed %i\n", cmd_op, ret); |
| 234 | return T_EXIT_FAIL; |
| 235 | } |
| 236 | |
| 237 | close(fd); |
| 238 | return 0; |
| 239 | } |
| 240 | |
| 241 | static int test_fail_edge_cases(struct io_uring *ring, int op) |
| 242 | { |
no test coverage detected