If it's preempted (CONFIG_PREEMPT=y), it will stay in runqueue. Only when+ list_for_each_entry_safe(bdi, tmp, &bdi_list, bdi_list) {What happens if we are preempted here? Since we have TASK_INTERRUPTIBLE
+ if (bdi->task || !bdi_has_dirty_io(bdi))
+ continue;
+
+ bdi_add_default_flusher_task(bdi);
+ }
+
+ set_current_state(TASK_INTERRUPTIBLE);
+
state, we will not come back unless some other task wakes us up. Who
would wake us up in this case?
it calls schedule initiatively or calls schedule when exiting to user space,
it will be moved out of runqueue if its state isn't TASK_RUNNING.
See flag PREEMPT_ACTIVE.