]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
blk/spdk: call spdk_env_opts_init() before setting pci options 69819/head
authorSun Yuechi <sunyuechi@iscas.ac.cn>
Tue, 30 Jun 2026 03:53:26 +0000 (20:53 -0700)
committerKefu Chai <k.chai@proxmox.com>
Tue, 30 Jun 2026 06:41:34 +0000 (14:41 +0800)
spdk_env_opts_init() reinitializes the whole spdk_env_opts struct,
overwriting pci_allowed/pci_whitelist and num_pci_addr that were set
just above it. As a result the local PCI device restriction never took
effect. Initialize opts first, then fill in the PCI address fields.

Fixes: https://tracker.ceph.com/issues/77802
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
src/blk/spdk/NVMEDevice.cc

index dea2312156c8ebfff5f6750ccdd32b2862b0bc9e..885aa765b45e13f186637c9921d2ab451f09fa88 100644 (file)
@@ -593,6 +593,8 @@ int NVMEManager::try_get(const spdk_nvme_transport_id& trid, SharedDriverData **
         struct spdk_pci_addr addr;
         int r;
 
+        spdk_env_opts_init(&opts);
+
         bool local_pci_device = false;
         int rc = spdk_pci_addr_parse(&addr, trid.traddr);
         if (!rc) {
@@ -605,7 +607,6 @@ int NVMEManager::try_get(const spdk_nvme_transport_id& trid, SharedDriverData **
           opts.num_pci_addr = 1;
         }
 
-       spdk_env_opts_init(&opts);
         opts.name = "nvme-device-manager";
         opts.core_mask = coremask_arg.c_str();
 #if SPDK_VERSION >= SPDK_VERSION_NUM(21, 1, 0)