nvme: return errno instead of assertion when mapping PRPs
Also update the UT. Change-Id: I6086bf4cafca8a917a467490955d7df0ba8930d5 Signed-off-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7495 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
9bfa9cb8b3
commit
b03129e710
@ -4198,13 +4198,15 @@ nvme_cmd_map_prps(void *prv, struct spdk_nvme_cmd *cmd, struct iovec *iovs,
|
||||
SPDK_ERRLOG("GPA to VVA failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
len -= residue_len;
|
||||
if (len && max_iovcnt < 2) {
|
||||
SPDK_ERRLOG("Too many page entries, at least two iovs are required\n");
|
||||
return -ERANGE;
|
||||
}
|
||||
iovs[0].iov_base = vva;
|
||||
iovs[0].iov_len = residue_len;
|
||||
len -= residue_len;
|
||||
|
||||
if (len) {
|
||||
assert(max_iovcnt > 1);
|
||||
|
||||
if (spdk_unlikely(prp2 == 0)) {
|
||||
SPDK_ERRLOG("no PRP2, %d remaining\n", len);
|
||||
return -EINVAL;
|
||||
|
@ -2262,6 +2262,8 @@ test_nvme_cmd_map_prps(void)
|
||||
cmd.dptr.prp.prp1 = (uint64_t)(uintptr_t)buf + 1024 * 3;
|
||||
cmd.dptr.prp.prp2 = (uint64_t)(uintptr_t)buf + 4096;
|
||||
len = 4096;
|
||||
ret = nvme_cmd_map_prps(NULL, &cmd, iovs, 1, len, mps, gpa_to_vva);
|
||||
CU_ASSERT(ret == -ERANGE);
|
||||
ret = nvme_cmd_map_prps(NULL, &cmd, iovs, 33, len, mps, gpa_to_vva);
|
||||
CU_ASSERT(ret == 2);
|
||||
CU_ASSERT(iovs[0].iov_base == (void *)(uintptr_t)cmd.dptr.prp.prp1);
|
||||
|
Loading…
Reference in New Issue
Block a user