| 43 | } |
| 44 | |
| 45 | static int queue_cmd_range(struct io_uring *ring, int bdev_fd, |
| 46 | uint64_t from, uint64_t len, int cmd_op) |
| 47 | { |
| 48 | struct io_uring_sqe *sqe; |
| 49 | struct io_uring_cqe *cqe; |
| 50 | int err; |
| 51 | |
| 52 | sqe = io_uring_get_sqe(ring); |
| 53 | assert(sqe != NULL); |
| 54 | prep_blk_cmd(sqe, bdev_fd, from, len, cmd_op); |
| 55 | |
| 56 | err = io_uring_submit_and_wait(ring, 1); |
| 57 | if (err != 1) { |
| 58 | fprintf(stderr, "io_uring_submit_and_wait failed %d\n", err); |
| 59 | exit(1); |
| 60 | } |
| 61 | |
| 62 | err = io_uring_wait_cqe(ring, &cqe); |
| 63 | if (err) { |
| 64 | fprintf(stderr, "io_uring_wait_cqe failed %d (op %i)\n", |
| 65 | err, cmd_op); |
| 66 | exit(1); |
| 67 | } |
| 68 | |
| 69 | err = cqe->res; |
| 70 | io_uring_cqe_seen(ring, cqe); |
| 71 | return err; |
| 72 | } |
| 73 | |
| 74 | static int queue_cmd_lba(struct io_uring *ring, int bdev_fd, |
| 75 | uint64_t from, uint64_t nr_lba, int cmd_op) |