• Paul Jackson's avatar
    [PATCH] cpuset: memory migration interaction fix · e4e364e8
    Paul Jackson authored
    Fix memory migration so that it works regardless of what cpuset the invoking
    task is in.
    
    If a task invoked a memory migration, by doing one of:
    
           1) writing a different nodemask to a cpuset 'mems' file, or
    
           2) writing a tasks pid to a different cpuset's 'tasks' file,
              where the cpuset had its 'memory_migrate' option turned on, then the
              allocation of the new pages for the migrated task(s) was constrained
              by the invoking tasks cpuset.
    
    If this task wasn't in a cpuset that allowed the requested memory nodes, the
    memory migration would happen to some other nodes that were in that invoking
    tasks cpuset.  This was usually surprising and puzzling behaviour: Why didn't
    the pages move?  Why did the pages move -there-?
    
    To fix this, temporarilly change the invoking tasks 'mems_allowed' task_struct
    field to the nodes the migrating tasks is moving to, so that new pages can be
    allocated there.
    Signed-off-by: default avatarPaul Jackson <pj@sgi.com>
    Acked-by: default avatarChristoph Lameter <clameter@sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    e4e364e8
cpuset.c 71.1 KB