Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp1740157pxu; Fri, 16 Oct 2020 22:50:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwSxGWW5F3ZVAGY/DctWMV/Ri2Xb2YD7lWZGWXsuJ1Yyv3nO/acxG3VljTlnmjpQF8Vy5yF X-Received: by 2002:aa7:d7ce:: with SMTP id e14mr8289819eds.258.1602913825752; Fri, 16 Oct 2020 22:50:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602913825; cv=none; d=google.com; s=arc-20160816; b=FrDGsqDCWrjv1XUlzyJdnR0VBCNIkaOEAoM23u1e3DqAlSuF5mD8deG/gY/x5+PHiq 4EusS/g+dzApIha23BYX3MC0gPKTi703AQyUwVwFw21J0TZcs8cp+Hx0ezkaWU6Yb3dY nlwe1l7rYkrNVwmR6rvz9HkVEKY3UnaCke2feQ3r6J3WuYoNPEXqndDk1TV62YKI0+v0 xYEGy6dqOB0n7HAXyKg24o2TWtwXwVFIvdku7wfq72ycB11SJrqJ0boIPD1gVwhMczm9 lrw1PTn4+CHU4vy7/Y+ztduM19L7f1qMO2K8X8YHEfjnmAa5+Zor79UO4vdHmqwOYQOK HGwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-language:content-transfer-encoding :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=bCpStuzZ/1XLNuNShkLnt840RBWTjvxOfAI+Js9mwiY=; b=IhLIMKHBfJdR9XJC5+zRCxusn8mmlWoqJCRqN6Fz8XQ3EO3lWxm5+ZgOyVsST2n49R DMlc7Njdu0M6n0z90uqLQXLB539yRHTrWfN+VnggbKyEjQjVA+VS2kN/rAJc6NH5ibaq WohiGuWJBzPWMHr4eLOJsgEZeYZ7ytHJo7F9IwzBizbbiB3XTs79az4Fn/NDvVMm3T4l pzDLDGN7D4i6NzvJwt7Tvr+UzapPiL0tnyS3339pnfFC+O6QKM17HtObMxWDRcDvLrIc qaN3kRyp67IAb3soXMVQ7kkC4wOftpB2V0NMh+YBVx+bWf1QdY6P/YYC1OPIFMai7bjR yHbw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g13si3317009edu.259.2020.10.16.22.50.03; Fri, 16 Oct 2020 22:50:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2436588AbgJQFlq (ORCPT + 99 others); Sat, 17 Oct 2020 01:41:46 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:15233 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2411653AbgJQFlq (ORCPT ); Sat, 17 Oct 2020 01:41:46 -0400 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 6F35DD5519210D144968; Sat, 17 Oct 2020 09:55:49 +0800 (CST) Received: from [10.174.177.6] (10.174.177.6) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.487.0; Sat, 17 Oct 2020 09:55:42 +0800 Subject: Re: [PATCH] mm: fix potential pte_unmap_unlock pte error To: , Michal Hocko CC: , , , , References: <20201015121534.50910-1-luoshijie1@huawei.com> <20201016123137.GH22589@dhcp22.suse.cz> <20201016131112.GJ22589@dhcp22.suse.cz> <20201016131531.GK22589@dhcp22.suse.cz> <20201016134215.GL22589@dhcp22.suse.cz> <8b1e52b7a07b9ff1be9badb73209abda@suse.de> From: Shijie Luo Message-ID: Date: Sat, 17 Oct 2020 09:55:42 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <8b1e52b7a07b9ff1be9badb73209abda@suse.de> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [10.174.177.6] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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.