Well, this change is not correct. On Wed, Oct 10, 2018 at 07:13:55AM -0700, Matthew Wilcox wrote: >On Wed, Oct 10, 2018 at 08:53:27PM +0800, Wei Yang wrote: >> A non-NULL vma returned from find_vma() implies: >> >> vma->vm_start <= start >> My misunderstanding of find_vma(), the non-NULL return value from find_vma() doesn't impley vma->vm_start <= start. Instead it just implies addr < vma->vm_end. This means the original check between vm_start and end is necessary. Thanks for testing from Rong. >> Since len != 0, the following condition always hods: >> >> vma->vm_start < start + len = end >> >> This means the if check would never be true. > >This is true because earlier in the function, start + len is checked to >be sure that it does not wrap. > >> This patch removes this redundant check and fix two typo in comment. > >> @@ -2705,12 +2705,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len, >> - /* we have start < vma->vm_end */ >> - >> - /* if it doesn't overlap, we have nothing.. */ >> + /* we have vma->vm_start <= start < vma->vm_end */ >> end = start + len; >> - if (vma->vm_start >= end) >> - return 0; > >I agree that it's not currently a useful check, but it's also not going >to have much effect on anything to delete it. I think there are probably >more worthwhile places to look for inefficiencies. -- Wei Yang Help you, Help me