Comment 0 for bug 1759893

Revision history for this message
Yurii Shestakov (yuriis) wrote : regression: nvme and nvme_core couldn't be build as modules starting 4.15-rc2

Some regression was introduced into NVME-related kernel configuration by 32c662c58a9b9 into 4.15-rc2, which was pulled later into ubuntu-bionic.git

In result, "nvme" and "nvme_core" drivers are built into the kernel, we can't build them as modules. It caused incompatibility of NMVe-OF target and initiator modules (nvmet, nvme-rdma) installed by Mellanox OFED with the inbox "nvme" driver.

Root cause analysis.

In the drivers/lightnvm/Kconfig file - kernel configuration for the OpenChannel SSDs (lightnvm) we have:

menuconfig NVM
        bool "Open-Channel SSD target support"
        depends on BLOCK && HAS_DMA && PCI
        select BLK_DEV_NVME
        help
          Say Y here to get to enable Open-channel SSDs.
...

It means that BLK_DEV_NVME is selected to "y" when NVM (CONFIG_NVM) is selected.
NVM parameter is 2 state (on / off, i.e. "y" or "no"), it couldn't be built as a module.
So that it triggers the change of BLK_DEV_NAME=y and NVME_CORE=y

$ git blame drivers/lightnvm/Kconfig

32c662c58a9b9 (Rakesh Pandit 2017-10-13 14:45:55 +0200 7) depends on BLOCK && HAS_DMA && PCI
32c662c58a9b9 (Rakesh Pandit 2017-10-13 14:45:55 +0200 8) select BLK_DEV_NVME

commit 32c662c58a9b9d0c99e713a14ca323a9a91c73a0
Author: Rakesh Pandit <email address hidden>
Date: Fri Oct 13 14:45:55 2017 +0200

    lightnvm: include NVM Express driver if OCSSD is selected for build

    Because NVM needs BLK_DEV_NVME, select it automatically if we mark NVM
    in config file before building kernel. Also append PCI to depends as
    select doesn't automatically add dependencies.

    Signed-off-by: Rakesh Pandit <email address hidden>
    Signed-off-by: Matias Bjørling <email address hidden>
    Signed-off-by: Jens Axboe <email address hidden>

 drivers/lightnvm/Kconfig | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

$ git diff 32c662c58a9b9^1..32c662c58a9b9
diff --git a/drivers/lightnvm/Kconfig b/drivers/lightnvm/Kconfig
index ead61a93cb4e..2a953efec4e1 100644
--- a/drivers/lightnvm/Kconfig
+++ b/drivers/lightnvm/Kconfig
@@ -4,7 +4,8 @@

 menuconfig NVM
        bool "Open-Channel SSD target support"
- depends on BLOCK && HAS_DMA
+ depends on BLOCK && HAS_DMA && PCI
+ select BLK_DEV_NVME
        help
          Say Y here to get to enable Open-channel SSDs.

Proposed fix is following:

diff --git a/drivers/lightnvm/Kconfig b/drivers/lightnvm/Kconfig
index 2a953efec4e1..9969236314d7 100644
--- a/drivers/lightnvm/Kconfig
+++ b/drivers/lightnvm/Kconfig
@@ -4,8 +4,7 @@

 menuconfig NVM
        bool "Open-Channel SSD target support"
- depends on BLOCK && HAS_DMA && PCI
- select BLK_DEV_NVME
+ depends on BLOCK && HAS_DMA && PCI && BLK_DEV_NVME
        help
          Say Y here to get to enable Open-channel SSDs.

Regards, Yurii Shestakov