nvme-pci: fix queue_rqs list splitting
authorKeith Busch <kbusch@kernel.org>
Wed, 5 Jan 2022 17:05:18 +0000 (09:05 -0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 5 Jan 2022 19:25:42 +0000 (12:25 -0700)
commit6bfec7992ec79b63fb07330ae97f3fb43120aa37
tree4c60031a5cd7a7dcf157102474fddabc70ddb524
parentd2528be7a8b09af9796a270debd14101a72bb552
nvme-pci: fix queue_rqs list splitting

If command prep fails, current handling will orphan subsequent requests
in the list. Consider a simple example:

  rqlist = [ 1 -> 2 ]

When prep for request '1' fails, it will be appended to the
'requeue_list', leaving request '2' disconnected from the original
rqlist and no longer tracked. Meanwhile, rqlist is still pointing to the
failed request '1' and will attempt to submit the unprepped command.

Fix this by updating the rqlist accordingly using the request list
helper functions.

Fixes: d62cbcf62f2f ("nvme: add support for mq_ops->queue_rqs()")
Signed-off-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20220105170518.3181469-5-kbusch@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/nvme/host/pci.c