[<prev] [next>] [day] [month] [year] [list]
Message-ID: <6de8156c657a42e7a6acc24a5234b637@huawei.com>
Date: Fri, 17 Jul 2020 01:04:56 +0000
From: linmiaohe <linmiaohe@...wei.com>
To: Andrew Morton <akpm@...ux-foundation.org>
CC: "linux-mm@...ck.org" <linux-mm@...ck.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] mm: mmap: Merge vma after call_mmap() if possible
Andrew Morton <akpm@...ux-foundation.org> wrote:
>On Tue, 14 Jul 2020 11:07:44 +0800 linmiaohe <linmiaohe@...wei.com> wrote:
>
>> From: Miaohe Lin <linmiaohe@...wei.com>
>>
>> The vm_flags may be changed after call_mmap() because drivers may set
>> some flags for their own purpose. As a result, we failed to merge the
>> adjacent vma due to the different vm_flags as userspace can't pass in the same one.
>> Try to merge vma after call_mmap() to fix this issue.
>>
>> Signed-off-by: Hongxiang Lou <louhongxiang@...wei.com>
>> Signed-off-by: Miaohe Lin <linmiaohe@...wei.com>
>> ---
>> + /* If vm_flags changed after call_mmap(), we should try merge vma again
>> + * as we may succeed this time.
>> + */
>> + if (unlikely(vm_flags != vma->vm_flags && prev)) {
>> + merge = vma_merge(mm, prev, vma->vm_start, vma->vm_end, vma->vm_flags,
>> + NULL, vma->vm_file, vma->vm_pgoff, NULL, NULL_VM_UFFD_CTX);
>> + if (merge) {
>> + fput(file);
>> + vm_area_free(vma);
>> + vma = merge;
>> + goto unmap_writable;
>
>Shouldn't we update local variable `vm_flags' here, to pick up the change? And possibly `addr'?
Yes, we should. `vm_flags` and `addr` should be updated to continue the work. Many thanks for your
great review. I will fix it and test again. I will send a patch v2 soon.
Powered by blists - more mailing lists