* whether bfqq is being weight-raised, because
         * bfq_symmetric_scenario() does not take into account also
         * weight-raised queues (see comments on
-        * bfq_weights_tree_add()).
+        * bfq_weights_tree_add()). In particular, if bfqq is being
+        * weight-raised, it is important to idle only if there are
+        * other, non-weight-raised queues that may steal throughput
+        * to bfqq. Actually, we should be even more precise, and
+        * differentiate between interactive weight raising and
+        * soft real-time weight raising.
         *
         * As a side note, it is worth considering that the above
         * device-idling countermeasures may however fail in the
         * to let requests be served in the desired order until all
         * the requests already queued in the device have been served.
         */
-       asymmetric_scenario = bfqq->wr_coeff > 1 ||
+       asymmetric_scenario = (bfqq->wr_coeff > 1 &&
+                              bfqd->wr_busy_queues < bfqd->busy_queues) ||
                !bfq_symmetric_scenario(bfqd);
 
        /*