From f7f31459813e12983e33cd011fb077db0d6d2f4d Mon Sep 17 00:00:00 2001 From: Hannes Weisbach Date: Tue, 1 Oct 2019 14:58:18 +0200 Subject: [PATCH] Maybe we can save the locks? ;) --- k2.c | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/k2.c b/k2.c index 413c611..a5954c8 100644 --- a/k2.c +++ b/k2.c @@ -162,38 +162,24 @@ static void k2_completed_request(struct request *r) blk_mq_run_hw_queues(r->q, true); } -static bool _k2_has_work(struct k2_data *k2d) +static bool k2_has_work(struct blk_mq_hw_ctx *hctx) { - unsigned int i; - - assert_spin_locked(&k2d->lock); - - if (k2d->inflight >= k2d->max_inflight) - return(false); + unsigned int i; + struct k2_data *k2d = hctx->queue->elevator->elevator_data; + + if (READ_ONCE(&k2d->inflight) >= READ_ONCE(&k2d->max_inflight)) + return (false); - if (! list_empty(&k2d->be_reqs)) - return(true); + if (!list_empty_careful(&k2d->be_reqs)) + return (true); for (i = 0; i < IOPRIO_BE_NR; i++) { - if (list_empty(&k2d->rt_reqs[i])) { - return(true); + if (list_empty_careful(&k2d->rt_reqs[i])) { + return (true); } } - - return(false); -} - -static bool k2_has_work(struct blk_mq_hw_ctx *hctx) -{ - struct k2_data *k2d = hctx->queue->elevator->elevator_data; - bool has_work; - unsigned long flags; - - spin_lock_irqsave(&k2d->lock, flags); - has_work = _k2_has_work(k2d); - spin_unlock_irqrestore(&k2d->lock, flags); - return(has_work); + return (false); } /* Inserts a request into the scheduler queue. For now, at_head is ignored! */ @@ -272,8 +258,8 @@ static struct request *k2_dispatch_request(struct blk_mq_hw_ctx *hctx) return(NULL); end: + ++k2d->inflight; list_del_init(&r->queuelist); - k2d->inflight++; r->rq_flags |= RQF_STARTED; spin_unlock_irqrestore(&k2d->lock, flags); return(r);