nvmf: set noiob no larger than mdts

Signed-off-by: Piotr Pelplinski <piotr.pelplinski@intel.com>
Change-Id: I875cc9d6a6bd1e9e9ac25ca9103a2070226ac236

Reviewed-on: https://review.gerrithub.io/428877
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Piotr Pelplinski 2018-10-11 09:07:16 +02:00 committed by Ben Walker
parent ddda03ef64
commit acca82acf2
2 changed files with 11 additions and 1 deletions

View File

@ -1143,6 +1143,7 @@ spdk_nvmf_ctrlr_identify_ns(struct spdk_nvmf_ctrlr *ctrlr,
{
struct spdk_nvmf_subsystem *subsystem = ctrlr->subsys;
struct spdk_nvmf_ns *ns;
uint32_t max_num_blocks;
if (cmd->nsid == 0 || cmd->nsid > subsystem->max_nsid) {
SPDK_ERRLOG("Identify Namespace for invalid NSID %u\n", cmd->nsid);
@ -1166,6 +1167,13 @@ spdk_nvmf_ctrlr_identify_ns(struct spdk_nvmf_ctrlr *ctrlr,
spdk_nvmf_bdev_ctrlr_identify_ns(ns, nsdata);
/* Due to bug in the Linux kernel NVMe driver we have to set noiob no larger than mdts */
max_num_blocks = ctrlr->admin_qpair->transport->opts.max_io_size /
(1U << nsdata->lbaf[nsdata->flbas.format].lbads);
if (nsdata->noiob > max_num_blocks) {
nsdata->noiob = max_num_blocks;
}
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
}

View File

@ -689,7 +689,9 @@ static void
test_identify_ns(void)
{
struct spdk_nvmf_subsystem subsystem = {};
struct spdk_nvmf_ctrlr ctrlr = { .subsys = &subsystem };
struct spdk_nvmf_transport transport = {};
struct spdk_nvmf_qpair admin_qpair = { .transport = &transport};
struct spdk_nvmf_ctrlr ctrlr = { .subsys = &subsystem, .admin_qpair = &admin_qpair };
struct spdk_nvme_cmd cmd = {};
struct spdk_nvme_cpl rsp = {};
struct spdk_nvme_ns_data nsdata = {};