list_for_each(list, ¤t->children) {
task = list_entry(list, struct task_struct, sibling);
/* task now points to one of current’s children */
}
According to this answer: list_entry in Linux, the list_entry()
macro will cast to specified struct based on the offset of the supplied pointer (in this case, list
) in the specified data structure (in this case, task_struct
). However, in the above code, I think list
is the pointer to the next task_struct
, starts from the beginning. How come the code cast list
back to task_struct from the offset sibling
, which is not the start of the task_struct
? Or, list
points directly to the sibling
member of its next task_struct
?