block: fix revalidate performance regression
[platform/kernel/linux-starfive.git] / block / bfq-iosched.c
index 917939b..52eb79d 100644 (file)
@@ -637,6 +637,8 @@ retry:
                                        sched_data->service_tree[i].wsum;
                        }
                }
+               if (!wsum)
+                       continue;
                limit = DIV_ROUND_CLOSEST(limit * entity->weight, wsum);
                if (entity->allocated >= limit) {
                        bfq_log_bfqq(bfqq->bfqd, bfqq,
@@ -5491,9 +5493,11 @@ static void bfq_check_ioprio_change(struct bfq_io_cq *bic, struct bio *bio)
 
        bfqq = bic_to_bfqq(bic, false);
        if (bfqq) {
-               bfq_release_process_ref(bfqd, bfqq);
+               struct bfq_queue *old_bfqq = bfqq;
+
                bfqq = bfq_get_queue(bfqd, bio, false, bic, true);
                bic_set_bfqq(bic, bfqq, false);
+               bfq_release_process_ref(bfqd, old_bfqq);
        }
 
        bfqq = bic_to_bfqq(bic, true);