Messages in this thread | | | From | Nick Piggin <> | Subject | Re: [PATCH 2/2 resend] mm: various cleanups in get_user_pages() | Date | Wed, 13 Feb 2008 12:13:04 +1100 |
| |
On Wednesday 13 February 2008 00:10, Eugene Teo wrote: > Sorry for the repeated emails. Kindly ignore the previous resend. Please > review this instead. Thanks. I have tested this.
If it is causing this much problems, can you split the cleanups into their own patches.
> [PATCH 2/2] mm: various cleanups in get_user_pages() > > This patch contains various cleanups, including making sure vma is valid, > and the return value of follow_hugetlb_page() is validated. > > Signed-off-by: Eugene Teo <eugeneteo@kernel.sg> > --- > mm/memory.c | 24 ++++++++++++++++-------- > 1 file changed, 16 insertions(+), 8 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 54f951b..c7e0610 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -1003,7 +1003,9 @@ int get_user_pages(struct task_struct *tsk, struct > mm_struct *mm, unsigned int foll_flags; > > vma = find_extend_vma(mm, start); > - if (!vma && in_gate_area(tsk, start)) { > + if (!vma) > + goto finish_or_fault; > + if (in_gate_area(tsk, start)) { > unsigned long pg = start & PAGE_MASK; > struct vm_area_struct *gate_vma = get_gate_vma(tsk); > pgd_t *pgd;
Doesn't this break the logic?
If you don't have a vma, but you are in the gate area, then you should use the gate vma. With your patch, gate area will fault.
> @@ -1011,7 +1013,7 @@ int get_user_pages(struct task_struct *tsk, struct > mm_struct *mm, pmd_t *pmd; > pte_t *pte; > if (write) /* user gate pages are read-only */ > - return i ? : -EFAULT; > + goto finish_or_fault;
I don't know if this is exactly a cleanup or not... I guess gcc probably isn't smart enough to fold them all together, so it should use a little less code in the unlikely branches. Does it?
| |