summaryrefslogtreecommitdiff
path: root/drivers/nvme
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/nvme')
-rw-r--r--drivers/nvme/host/pci.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 50deb8b69c40..d8585df2c2fd 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -999,30 +999,30 @@ static bool nvme_prep_rq_batch(struct nvme_queue *nvmeq, struct request *req)
static void nvme_queue_rqs(struct request **rqlist)
{
- struct request *req = rq_list_peek(rqlist), *prev = NULL;
+ struct request *req, *next, *prev = NULL;
struct request *requeue_list = NULL;
- do {
+ rq_list_for_each_safe(rqlist, req, next) {
struct nvme_queue *nvmeq = req->mq_hctx->driver_data;
if (!nvme_prep_rq_batch(nvmeq, req)) {
/* detach 'req' and add to remainder list */
- if (prev)
- prev->rq_next = req->rq_next;
- rq_list_add(&requeue_list, req);
- } else {
- prev = req;
+ rq_list_move(rqlist, &requeue_list, req, prev);
+
+ req = prev;
+ if (!req)
+ continue;
}
- req = rq_list_next(req);
- if (!req || (prev && req->mq_hctx != prev->mq_hctx)) {
+ if (!next || req->mq_hctx != next->mq_hctx) {
/* detach rest of list, and submit */
- if (prev)
- prev->rq_next = NULL;
+ req->rq_next = NULL;
nvme_submit_cmds(nvmeq, rqlist);
- *rqlist = req;
- }
- } while (req);
+ *rqlist = next;
+ prev = NULL;
+ } else
+ prev = req;
+ }
*rqlist = requeue_list;
}