lkml.org 
[lkml]   [2020]   [Oct]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH] mm: fix potential pte_unmap_unlock pte error
From
Date
On 2020/10/16 22:05, osalvador@suse.de wrote:
> On 2020-10-16 15:42, Michal Hocko wrote:
>> OK, I finally managed to convince my friday brain to think and grasped
>> what the code is intended to do. The loop is hairy and we want to
>> prevent from spurious EIO when all the pages are on a proper node. So
>> the check has to be done inside the loop. Anyway I would find the
>> following fix less error prone and easier to follow
>> diff --git a/mm/mempolicy.c b/mm/mempolicy.c
>> index eddbe4e56c73..8cc1fc9c4d13 100644
>> --- a/mm/mempolicy.c
>> +++ b/mm/mempolicy.c
>> @@ -525,7 +525,7 @@ static int queue_pages_pte_range(pmd_t *pmd,
>> unsigned long addr,
>>      unsigned long flags = qp->flags;
>>      int ret;
>>      bool has_unmovable = false;
>> -    pte_t *pte;
>> +    pte_t *pte, *mapped_pte;
>>      spinlock_t *ptl;
>>
>>      ptl = pmd_trans_huge_lock(pmd, vma);
>> @@ -539,7 +539,7 @@ static int queue_pages_pte_range(pmd_t *pmd,
>> unsigned long addr,
>>      if (pmd_trans_unstable(pmd))
>>          return 0;
>>
>> -    pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
>> +    mapped_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
>>      for (; addr != end; pte++, addr += PAGE_SIZE) {
>>          if (!pte_present(*pte))
>>              continue;
>> @@ -571,7 +571,7 @@ static int queue_pages_pte_range(pmd_t *pmd,
>> unsigned long addr,
>>          } else
>>              break;
>>      }
>> -    pte_unmap_unlock(pte - 1, ptl);
>> +    pte_unmap_unlock(mapped_pte, ptl);
>>      cond_resched();
>>
>>      if (has_unmovable)
>
> It is more clear to grasp, definitely.
Yeah, this one is more comprehensible, I 'll send a v2 patch, thank you.

\
 
 \ /
  Last update: 2020-10-17 07:42    [W:0.095 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site