|
@@ -25,8 +25,6 @@ static struct blkcg_policy blkcg_policy_throtl;
|
|
|
|
|
|
/* A workqueue to queue throttle related work */
|
|
|
static struct workqueue_struct *kthrotld_workqueue;
|
|
|
-static void throtl_schedule_delayed_work(struct throtl_data *td,
|
|
|
- unsigned long delay);
|
|
|
|
|
|
struct throtl_rb_root {
|
|
|
struct rb_root rb;
|
|
@@ -398,6 +396,19 @@ static void throtl_dequeue_tg(struct throtl_data *td, struct throtl_grp *tg)
|
|
|
__throtl_dequeue_tg(td, tg);
|
|
|
}
|
|
|
|
|
|
+/* Call with queue lock held */
|
|
|
+static void throtl_schedule_delayed_work(struct throtl_data *td,
|
|
|
+ unsigned long delay)
|
|
|
+{
|
|
|
+ struct delayed_work *dwork = &td->dispatch_work;
|
|
|
+
|
|
|
+ if (total_nr_queued(td)) {
|
|
|
+ mod_delayed_work(kthrotld_workqueue, dwork, delay);
|
|
|
+ throtl_log(td, "schedule work. delay=%lu jiffies=%lu",
|
|
|
+ delay, jiffies);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void throtl_schedule_next_dispatch(struct throtl_data *td)
|
|
|
{
|
|
|
struct throtl_rb_root *st = &td->tg_service_tree;
|
|
@@ -863,20 +874,6 @@ out:
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/* Call with queue lock held */
|
|
|
-static void
|
|
|
-throtl_schedule_delayed_work(struct throtl_data *td, unsigned long delay)
|
|
|
-{
|
|
|
-
|
|
|
- struct delayed_work *dwork = &td->dispatch_work;
|
|
|
-
|
|
|
- if (total_nr_queued(td)) {
|
|
|
- mod_delayed_work(kthrotld_workqueue, dwork, delay);
|
|
|
- throtl_log(td, "schedule work. delay=%lu jiffies=%lu",
|
|
|
- delay, jiffies);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
static u64 tg_prfill_cpu_rwstat(struct seq_file *sf,
|
|
|
struct blkg_policy_data *pd, int off)
|
|
|
{
|