| 143 | } |
| 144 | |
| 145 | static int cmd_issue_verify(struct io_uring *ring, int fd, int lba, int len, |
| 146 | int cmd_op) |
| 147 | { |
| 148 | int verify = (cmd_op != BLOCK_URING_CMD_DISCARD); |
| 149 | int ret, i; |
| 150 | ssize_t res; |
| 151 | |
| 152 | if (verify) { |
| 153 | for (i = 0; i < len; i++) { |
| 154 | size_t off = (i + lba) * lba_size; |
| 155 | |
| 156 | res = pwrite(fd, buffer, lba_size, off); |
| 157 | if (res == -1) { |
| 158 | fprintf(stderr, "pwrite failed\n"); |
| 159 | return T_EXIT_FAIL; |
| 160 | } |
| 161 | } |
| 162 | } |
| 163 | |
| 164 | ret = queue_cmd_lba(ring, fd, lba, len, cmd_op); |
| 165 | if (ret) { |
| 166 | if (ret == -EINVAL || ret == -EOPNOTSUPP) |
| 167 | return T_EXIT_SKIP; |
| 168 | |
| 169 | fprintf(stderr, "cmd_issue_verify %i fail lba %i len %i ret %i\n", |
| 170 | cmd_op, lba, len, ret); |
| 171 | return T_EXIT_FAIL; |
| 172 | } |
| 173 | |
| 174 | if (verify) { |
| 175 | for (i = 0; i < len; i++) { |
| 176 | size_t off = (i + lba) * lba_size; |
| 177 | |
| 178 | res = pread(fd, buffer, lba_size, off); |
| 179 | if (res == -1) { |
| 180 | fprintf(stderr, "pread failed\n"); |
| 181 | return T_EXIT_FAIL; |
| 182 | } |
| 183 | if (!memchr(buffer, 0, lba_size)) { |
| 184 | fprintf(stderr, "mem cmp failed, lba %i\n", lba + i); |
| 185 | return T_EXIT_FAIL; |
| 186 | } |
| 187 | } |
| 188 | } |
| 189 | return 0; |
| 190 | } |
| 191 | |
| 192 | static int basic_cmd_test(struct io_uring *ring, int op) |
| 193 | { |
no test coverage detected