Re: [PATCH] block: BFQ: Add several invariant checks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

在 2023/05/17 6:38, Bart Van Assche 写道:
If anything goes wrong with the counters that track the number of
requests, I/O locks up. Make such scenarios easier to debug by adding
invariant checks for the request counters. Additionally, check that
BFQ queues are empty before these are freed.

Is there any real problems related to those counters?

Thanks,
Kuai

Cc: Jan Kara <jack@xxxxxxx>
Cc: Yu Kuai <yukuai3@xxxxxxxxxx>
Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
---
  block/bfq-iosched.c | 9 +++++++++
  1 file changed, 9 insertions(+)

diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
index 3164e3177965..c5727afad159 100644
--- a/block/bfq-iosched.c
+++ b/block/bfq-iosched.c
@@ -5403,6 +5403,9 @@ void bfq_put_queue(struct bfq_queue *bfqq)
  	if (bfqq->bfqd->last_completed_rq_bfqq == bfqq)
  		bfqq->bfqd->last_completed_rq_bfqq = NULL;
+ WARN_ON_ONCE(!list_empty(&bfqq->fifo));
+	WARN_ON_ONCE(!RB_EMPTY_ROOT(&bfqq->sort_list));
+
  	kmem_cache_free(bfq_pool, bfqq);
  	bfqg_and_blkg_put(bfqg);
  }
@@ -7135,6 +7138,7 @@ static void bfq_exit_queue(struct elevator_queue *e)
  {
  	struct bfq_data *bfqd = e->elevator_data;
  	struct bfq_queue *bfqq, *n;
+	unsigned int actuator;
hrtimer_cancel(&bfqd->idle_slice_timer); @@ -7143,6 +7147,11 @@ static void bfq_exit_queue(struct elevator_queue *e)
  		bfq_deactivate_bfqq(bfqd, bfqq, false, false);
  	spin_unlock_irq(&bfqd->lock);
+ for (actuator = 0; actuator < bfqd->num_actuators; actuator++)
+		WARN_ON_ONCE(bfqd->rq_in_driver[actuator]);
+	WARN_ON_ONCE(bfqd->tot_rq_in_driver);
+	WARN_ON_ONCE(bfqq->dispatched);
+
  	hrtimer_cancel(&bfqd->idle_slice_timer);
/* release oom-queue reference to root group */

.





[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux