nvme: Ensure max_sges not to exceed what controller supports in generic layer
Previously comparing the transport supported value and the target value was done in RDMA transport layer. However this comparison should be done in the generic layer like the maximum IO transfer size. Hence change the comparison to do in the generic layer in this patch. Besides, for MSDBD, the value 0 indicates no limit but we had handled this as maximum number of SGS entries was 0 by mistake. This patch fixes the bug together. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I54365cf114169b10180ec2c659f9c7302672674c Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/459574 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
parent
993ab4908c
commit
cf3c54bc03
@ -982,7 +982,17 @@ nvme_ctrlr_identify_done(void *arg, const struct spdk_nvme_cpl *cpl)
|
||||
|
||||
if (ctrlr->cdata.sgls.supported) {
|
||||
ctrlr->flags |= SPDK_NVME_CTRLR_SGL_SUPPORTED;
|
||||
/*
|
||||
* Use MSDBD to ensure our max_sges doesn't exceed what the
|
||||
* controller supports.
|
||||
*/
|
||||
ctrlr->max_sges = nvme_transport_ctrlr_get_max_sges(ctrlr);
|
||||
if (ctrlr->cdata.nvmf_specific.msdbd != 0) {
|
||||
ctrlr->max_sges = spdk_min(ctrlr->cdata.nvmf_specific.msdbd, ctrlr->max_sges);
|
||||
} else {
|
||||
/* A value 0 indicates no limit. */
|
||||
}
|
||||
SPDK_DEBUGLOG(SPDK_LOG_NVME, "transport max_sges %u\n", ctrlr->max_sges);
|
||||
}
|
||||
|
||||
if (ctrlr->cdata.oacs.security) {
|
||||
|
@ -1770,7 +1770,7 @@ nvme_rdma_ctrlr_get_max_xfer_size(struct spdk_nvme_ctrlr *ctrlr)
|
||||
uint16_t
|
||||
nvme_rdma_ctrlr_get_max_sges(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
return spdk_min(ctrlr->cdata.nvmf_specific.msdbd, NVME_RDMA_MAX_SGL_DESCRIPTORS);
|
||||
return NVME_RDMA_MAX_SGL_DESCRIPTORS;
|
||||
}
|
||||
|
||||
volatile struct spdk_nvme_registers *
|
||||
|
Loading…
x
Reference in New Issue
Block a user