All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Valente <paolo.valente@linaro.org>
To: Jens Axboe <axboe@kernel.dk>
Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
	bfq-iosched@googlegroups.com, oleksandr@natalenko.name,
	patdung100@gmail.com, cevich@redhat.com,
	Paolo Valente <paolo.valente@linaro.org>
Subject: [PATCH BUGFIX 3/6] block, bfq: get extra ref to prevent a queue from being freed during a group move
Date: Fri, 31 Jan 2020 10:24:06 +0100	[thread overview]
Message-ID: <20200131092409.10867-4-paolo.valente@linaro.org> (raw)
In-Reply-To: <20200131092409.10867-1-paolo.valente@linaro.org>

In bfq_bfqq_move(), the bfq_queue, say Q, to be moved to a new group
may happen to be deactivated in the scheduling data structures of the
source group (and then activated in the destination group). If Q is
referred only by the data structures in the source group when the
deactivation happens, then Q is freed upon the deactivation.

This commit addresses this issue by getting an extra reference before
the possible deactivation, and releasing this extra reference after Q
has been moved.

Tested-by: Chris Evich <cevich@redhat.com>
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
---
 block/bfq-cgroup.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
index e1419edde2ec..8ab7f18ff8cb 100644
--- a/block/bfq-cgroup.c
+++ b/block/bfq-cgroup.c
@@ -651,6 +651,12 @@ void bfq_bfqq_move(struct bfq_data *bfqd, struct bfq_queue *bfqq,
 		bfq_bfqq_expire(bfqd, bfqd->in_service_queue,
 				false, BFQQE_PREEMPTED);
 
+	/*
+	 * get extra reference to prevent bfqq from being freed in
+	 * next possible deactivate
+	 */
+	bfqq->ref++;
+
 	if (bfq_bfqq_busy(bfqq))
 		bfq_deactivate_bfqq(bfqd, bfqq, false, false);
 	else if (entity->on_st)
@@ -670,6 +676,8 @@ void bfq_bfqq_move(struct bfq_data *bfqd, struct bfq_queue *bfqq,
 
 	if (!bfqd->in_service_queue && !bfqd->rq_in_driver)
 		bfq_schedule_dispatch(bfqd);
+	/* release extra ref taken above */
+	bfq_put_queue(bfqq);
 }
 
 /**
-- 
2.20.1


  parent reply	other threads:[~2020-01-31  9:25 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-31  9:24 [PATCH BUGFIX 0/6] block, bfq: series of fixes, and not only, for some recently reported issues Paolo Valente
2020-01-31  9:24 ` [PATCH BUGFIX 1/6] block, bfq: do not plug I/O for bfq_queues with no proc refs Paolo Valente
2020-01-31  9:24 ` [PATCH BUGFIX 2/6] block, bfq: do not insert oom queue into position tree Paolo Valente
2020-01-31  9:24 ` Paolo Valente [this message]
2020-01-31 10:20   ` [PATCH BUGFIX 3/6] block, bfq: get extra ref to prevent a queue from being freed during a group move Oleksandr Natalenko
2020-01-31 10:41     ` Paolo Valente
2020-01-31  9:24 ` [PATCH BUGFIX 4/6] block, bfq: extend incomplete name of field on_st Paolo Valente
2020-01-31  9:24 ` [PATCH BUGFIX 5/6] block, bfq: get a ref to a group when adding it to a service tree Paolo Valente
2020-02-01  4:44   ` Jens Axboe
2020-01-31  9:24 ` [PATCH BUGFIX 6/6] block, bfq: clarify the goal of bfq_split_bfqq() Paolo Valente
2020-02-01  4:48 ` [PATCH BUGFIX 0/6] block, bfq: series of fixes, and not only, for some recently reported issues Jens Axboe
2020-02-03  8:50   ` Paolo Valente

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200131092409.10867-4-paolo.valente@linaro.org \
    --to=paolo.valente@linaro.org \
    --cc=axboe@kernel.dk \
    --cc=bfq-iosched@googlegroups.com \
    --cc=cevich@redhat.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oleksandr@natalenko.name \
    --cc=patdung100@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.