• Arnd Bergmann's avatar
    nvme: tcp: fix compile-time checks for TLS mode · 0e6c4fe7
    Arnd Bergmann authored
    When CONFIG_NVME_KEYRING is enabled as a loadable module, but the TCP
    host code is built-in, it fails to link:
    
    arm-linux-gnueabi-ld: drivers/nvme/host/tcp.o: in function `nvme_tcp_setup_ctrl':
    tcp.c:(.text+0x1940): undefined reference to `nvme_tls_psk_default'
    
    The problem is that the compile-time conditionals are inconsistent here,
    using a mix of #ifdef CONFIG_NVME_TCP_TLS, IS_ENABLED(CONFIG_NVME_TCP_TLS)
    and IS_ENABLED(CONFIG_NVME_KEYRING) checks, with CONFIG_NVME_KEYRING
    controlling whether the implementation is actually built.
    
    Change it to use IS_ENABLED(CONFIG_NVME_KEYRING) checks consistently,
    which should help readability and make it less error-prone. Combining
    it with the check for the ctrl->opts->tls flag lets the compiler drop
    all the TLS code in configurations without this feature, which also
    helps runtime behavior in addition to avoiding the link failure.
    
    To make it possible for the compiler to build the dead code, both
    the tls_handshake_timeout variable and the TLS specific members
    of nvme_tcp_queue need to be moved out of the #ifdef block as well,
    but at least the former of these gets optimized out again.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20231122224719.4042108-4-arnd@kernel.orgSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    0e6c4fe7
tcp.c 71.1 KB