Skip to content

Commit 9aaeca2

Browse files
committed
bdev/nvme: enforce adminq polling period for NVMe TCP transport in interrupt mode
longhorn/longhorn-9834 Signed-off-by: Chin-Ya Huang <chin-ya.huang@suse.com>
1 parent 62cad45 commit 9aaeca2

1 file changed

Lines changed: 6 additions & 2 deletions

File tree

module/bdev/nvme/bdev_nvme.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5983,12 +5983,16 @@ nvme_ctrlr_create(struct spdk_nvme_ctrlr *ctrlr,
59835983
spdk_bdev_nvme_get_default_ctrlr_opts(&nvme_ctrlr->opts);
59845984
}
59855985

5986-
period = spdk_interrupt_mode_is_enabled() ? 0 : g_opts.nvme_adminq_poll_period_us;
5986+
/* In interrupt mode, NVMe/TCP requires periodic polling of the admin queue
5987+
* to ensure timely Keep Alive command completion. Unlike PCIe, TCP transport
5988+
* does not provide hardware interrupts for admin completions.
5989+
*/
5990+
period = (spdk_interrupt_mode_is_enabled() && (g_nvme_trtype != SPDK_NVME_TRANSPORT_TCP)) ? 0 : g_opts.nvme_adminq_poll_period_us;
59875991

59885992
nvme_ctrlr->adminq_timer_poller = SPDK_POLLER_REGISTER(bdev_nvme_poll_adminq, nvme_ctrlr,
59895993
period);
59905994

5991-
if (spdk_interrupt_mode_is_enabled()) {
5995+
if (spdk_interrupt_mode_is_enabled() && (g_nvme_trtype != SPDK_NVME_TRANSPORT_TCP)){
59925996
spdk_poller_register_interrupt(nvme_ctrlr->adminq_timer_poller, NULL, NULL);
59935997

59945998
fd = spdk_nvme_ctrlr_get_admin_qp_fd(nvme_ctrlr->ctrlr, &opts);

0 commit comments

Comments
 (0)