nvme-tcp: don't poll a non-live queue
authorSagi Grimberg <sagi@grimberg.me>
Mon, 23 Mar 2020 23:43:52 +0000 (16:43 -0700)
committerChristoph Hellwig <hch@lst.de>
Tue, 31 Mar 2020 15:57:32 +0000 (17:57 +0200)
In error recovery we might be removing the queue so check we
can actually poll before we do.

Reported-by: Mark Wunderlich <mark.wunderlich@intel.com>
Tested-by: Mark Wunderlich <mark.wunderlich@intel.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/tcp.c

index aa754ae..eb31c68 100644 (file)
@@ -2299,6 +2299,9 @@ static int nvme_tcp_poll(struct blk_mq_hw_ctx *hctx)
        struct nvme_tcp_queue *queue = hctx->driver_data;
        struct sock *sk = queue->sock->sk;
 
+       if (!test_bit(NVME_TCP_Q_LIVE, &queue->flags))
+               return 0;
+
        if (sk_can_busy_loop(sk) && skb_queue_empty_lockless(&sk->sk_receive_queue))
                sk_busy_loop(sk, true);
        nvme_tcp_try_recv(queue);