On 2026-09-03 13:13, Venkat Rao Bagalkote wrote:
Building with CONFIG_SCSI_IBMVFC=y and CONFIG_NVME_FC=m results in a
link failure:

  ibmvfc-nvme.o: undefined reference to `nvme_fc_register_localport'
  ibmvfc-nvme.o: undefined reference to `nvme_fc_register_remoteport'
  ibmvfc-nvme.o: undefined reference to `nvme_fc_unregister_localport'
  ibmvfc-nvme.o: undefined reference to `nvme_fc_unregister_remoteport'
  ibmvfc-core.o: undefined reference to `nvme_fc_rescan_remoteport'

IS_ENABLED() evaluates to 1 for both =y and =m, so the nvme_fc_*
call sites are kept in the object file. When SCSI_IBMVFC=y (built-in)
but NVME_FC=m (loadable module), the linker cannot resolve these
symbols at vmlinux link time.

Add the same "depends on NVME_FC || NVME_FC=n" constraint already
used by SCSI_LPFC to prevent this configuration.

Reported-by: Pavithra <[email protected]>
Closes:
https://lore.kernel.org/all/[email protected]/
Signed-off-by: Venkat Rao Bagalkote <[email protected]>
---

Hi Venkat,

Tested the patch, compilation issue is not observed with patch.

Logs:
-----
without patch:
:/home/linux-next # make -j 80
  UPD     include/generated/utsversion.h
  CC      init/version-timestamp.o
  KSYMS   .tmp_vmlinux0.kallsyms.S
  AS      .tmp_vmlinux0.kallsyms.o
  LD      .tmp_vmlinux1
/usr/bin/ld.bfd: warning: discarding dynamic section .glink
/usr/bin/ld.bfd: warning: discarding dynamic section .plt
/usr/bin/ld.bfd: linkage table error against `nvme_fc_unregister_remoteport'
/usr/bin/ld.bfd: stubs don't match calculated size
/usr/bin/ld.bfd: can not build stubs: bad value
/usr/bin/ld.bfd: drivers/scsi/ibmvscsi/ibmvfc-core.o: in function `ibmvfc_rport_add_thread': ibmvfc-core.c:(.text+0x70dc): undefined reference to `nvme_fc_rescan_remoteport' /usr/bin/ld.bfd: drivers/scsi/ibmvscsi/ibmvfc-nvme.o: in function `ibmvfc_nvme_register_remoteport': ibmvfc-nvme.c:(.text+0x1420): undefined reference to `nvme_fc_register_remoteport' /usr/bin/ld.bfd: drivers/scsi/ibmvscsi/ibmvfc-nvme.o: in function `ibmvfc_nvme_unregister_remoteport': ibmvfc-nvme.c:(.text+0x153c): undefined reference to `nvme_fc_unregister_remoteport' /usr/bin/ld.bfd: drivers/scsi/ibmvscsi/ibmvfc-nvme.o: in function `ibmvfc_nvme_register': ibmvfc-nvme.c:(.text+0x164c): undefined reference to `nvme_fc_register_localport' /usr/bin/ld.bfd: drivers/scsi/ibmvscsi/ibmvfc-nvme.o: in function `ibmvfc_nvme_unregister': ibmvfc-nvme.c:(.text+0x1778): undefined reference to `nvme_fc_unregister_localport'
make[2]: *** [scripts/Makefile.vmlinux:72: vmlinux.unstripped] Error 1
make[1]: *** [/home/linux-next/Makefile:1390: vmlinux] Error 2
make: *** [Makefile:248: __sub-make] Error 2

with patch:

:/home/linux-next # patch -p1 < patch
patching file drivers/scsi/Kconfig
:/home/linux-next # make -j 80
  SYNC    include/config/auto.conf
  UPD     include/config/kernel.release
  UPD     include/generated/utsrelease.h
.
.
  COPY    arch/powerpc/boot/fdt_rw.c
  COPY    arch/powerpc/boot/fdt_sw.c
  COPY    arch/powerpc/boot/fdt_wip.c
  BOOTCC  arch/powerpc/boot/libfdt-wrapper.o
  BOOTCC  arch/powerpc/boot/inffast.o
  COPY    arch/powerpc/boot/decompress_inflate.c
  BOOTCC  arch/powerpc/boot/empty.o
  BOOTCC  arch/powerpc/boot/fdt.o
  BOOTCC  arch/powerpc/boot/fdt_ro.o
  BOOTCC  arch/powerpc/boot/fdt_rw.o
  BOOTCC  arch/powerpc/boot/fdt_strerror.o
  BOOTCC  arch/powerpc/boot/fdt_sw.o
  BOOTCC  arch/powerpc/boot/fdt_wip.o
  BOOTCC  arch/powerpc/boot/inflate.o
  BOOTCC  arch/powerpc/boot/inftrees.o
  BOOTCC  arch/powerpc/boot/decompress.o
  BOOTAR  arch/powerpc/boot/wrapper.a
  WRAP    arch/powerpc/boot/zImage.pseries
  WRAP    arch/powerpc/boot/zImage.epapr

Please add below tag:

Tested-by: Pavithra <[email protected]>

Thanks,
Pavithra

 drivers/scsi/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index 4a2af0f702e1..1eec66195cf4 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -753,6 +753,7 @@ config SCSI_IBMVFC
        tristate "IBM Virtual FC support"
        depends on PPC_PSERIES && SCSI
        depends on SCSI_FC_ATTRS
+       depends on NVME_FC || NVME_FC=n
        help
          This is the IBM POWER Virtual FC Client


Reply via email to