X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=kernel%2Fsched_fair.c;h=fb8994c6d4bb4bbe90a71f89341baee3cc6e9806;hb=d121db94eb50b29a202b5f6a8671cbebdf2c4142;hp=0fe94ea43f3256281ed55ee29dadb17eee468d71;hpb=6679ce6e5f519096612b480d255d9ca97be0c2be;p=linux-2.6 diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index 0fe94ea43f..fb8994c6d4 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -1442,18 +1442,23 @@ __load_balance_iterator(struct cfs_rq *cfs_rq, struct list_head *next) struct task_struct *p = NULL; struct sched_entity *se; - while (next != &cfs_rq->tasks) { + if (next == &cfs_rq->tasks) + return NULL; + + /* Skip over entities that are not tasks */ + do { se = list_entry(next, struct sched_entity, group_node); next = next->next; + } while (next != &cfs_rq->tasks && !entity_is_task(se)); - /* Skip over entities that are not tasks */ - if (entity_is_task(se)) { - p = task_of(se); - break; - } - } + if (next == &cfs_rq->tasks) + return NULL; cfs_rq->balance_iterator = next; + + if (entity_is_task(se)) + p = task_of(se); + return p; }