|
@@ -802,7 +802,6 @@ static long do_set_mempolicy(unsigned short mode, unsigned short flags,
|
|
nodemask_t *nodes)
|
|
nodemask_t *nodes)
|
|
{
|
|
{
|
|
struct mempolicy *new, *old;
|
|
struct mempolicy *new, *old;
|
|
- struct mm_struct *mm = current->mm;
|
|
|
|
NODEMASK_SCRATCH(scratch);
|
|
NODEMASK_SCRATCH(scratch);
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
@@ -814,20 +813,11 @@ static long do_set_mempolicy(unsigned short mode, unsigned short flags,
|
|
ret = PTR_ERR(new);
|
|
ret = PTR_ERR(new);
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
- /*
|
|
|
|
- * prevent changing our mempolicy while show_numa_maps()
|
|
|
|
- * is using it.
|
|
|
|
- * Note: do_set_mempolicy() can be called at init time
|
|
|
|
- * with no 'mm'.
|
|
|
|
- */
|
|
|
|
- if (mm)
|
|
|
|
- down_write(&mm->mmap_sem);
|
|
|
|
|
|
+
|
|
task_lock(current);
|
|
task_lock(current);
|
|
ret = mpol_set_nodemask(new, nodes, scratch);
|
|
ret = mpol_set_nodemask(new, nodes, scratch);
|
|
if (ret) {
|
|
if (ret) {
|
|
task_unlock(current);
|
|
task_unlock(current);
|
|
- if (mm)
|
|
|
|
- up_write(&mm->mmap_sem);
|
|
|
|
mpol_put(new);
|
|
mpol_put(new);
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
@@ -837,9 +827,6 @@ static long do_set_mempolicy(unsigned short mode, unsigned short flags,
|
|
nodes_weight(new->v.nodes))
|
|
nodes_weight(new->v.nodes))
|
|
current->il_next = first_node(new->v.nodes);
|
|
current->il_next = first_node(new->v.nodes);
|
|
task_unlock(current);
|
|
task_unlock(current);
|
|
- if (mm)
|
|
|
|
- up_write(&mm->mmap_sem);
|
|
|
|
-
|
|
|
|
mpol_put(old);
|
|
mpol_put(old);
|
|
ret = 0;
|
|
ret = 0;
|
|
out:
|
|
out:
|