Zhang, Yanmin wrote:
+ list_for_each_entry_safe(bdi, tmp, &bdi_list, bdi_list) {
+ if (bdi->task || !bdi_has_dirty_io(bdi))
+ continue;
+
+ bdi_add_default_flusher_task(bdi);
+ }
+
+ set_current_state(TASK_INTERRUPTIBLE);
+
What happens if we are preempted here? Since we have TASK_INTERRUPTIBLE
state, we will not come back unless some other task wakes us up. Who
would wake us up in this case?
If it's preempted (CONFIG_PREEMPT=y), it will stay in runqueue. Only when
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.
OK, thanks for the hint!
--
Best Regards,
Artem Bityutskiy (Артём Битюцкий)
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html