From nobody Sat Dec 27 03:20:01 2025 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8570C3D71 for ; Sat, 23 Dec 2023 04:56:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--yuzhao.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="qvbmwT3o" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-5e7b49e15c1so35985597b3.1 for ; Fri, 22 Dec 2023 20:56:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1703307410; x=1703912210; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=4v/LYlLycZFodA3ctHFCW6YVtoXi+WcqMYLGsHPgX1s=; b=qvbmwT3okTcSzLpP1Gfg7+dSpuIn92hTISDSJrolA6J+O+AzlpBAV8zcTO+4WJd5mQ 8seXEb9uPo2m7g2rhlfxdiOPJqHeoobmXWhR/Y99VYhgZMTBmm7MuY9dgTiHO1WEMzBw GH+F+bj9swy7BHfp6HBzbrbNfZcq9O1mPWq3h5XDVn/Cr8llrM6Qt+aIbOr9IEPis1Zd NsdoTX6/GKLpFT8goKioRrK2+w0Sl8h2SpXCzx3HoR3VveVEj8nn/JJKduhjAL/IUaqe KmUjcacQIZ/UE0y4PS2Sb6Q2bIEvztMXWCQS+DY10yP2vCJdr2Mj1agEdOQ0abfJ6QqM fVEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703307410; x=1703912210; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=4v/LYlLycZFodA3ctHFCW6YVtoXi+WcqMYLGsHPgX1s=; b=kXQg0mJldj9bi2f/wuIkFkRfVURNJu32HxtFPXU5MuvU9nvGBl3VeWsjH/WuR3cF5I GWOhUUgUoOF23K1BH7BgZAE/kMNBJeYM0dndq9QQDuSDv5Vnl76uL22VxLYX0xtf3ivb PZHvWZbyRg29mBOJf0DY4NmZisKZo/rgc/pwmjVO3G+5EqReqeu6wrREUgYTONUXT1W6 e928kGsxiCYvFKqW8VPzZyHtZrrNWWmonbk33OCA+8SCwjC6y5SU30A5ZodSQaGNwlAF gDWMgX6+UkKGXK0MpKbxJQ7yMMnYYbaVPREgUepJ1sXWicFkGYyZb1BsJPzLPTyDbOxo IVIQ== X-Gm-Message-State: AOJu0YzeKc9fgkopKP6m+3IuJ9E+ZAaoJPEaAblrAUGI1bzYk0jv3nN9 49iLcENzAog06X0OpmODrmfQ3/oo7VdH5U0ILA== X-Google-Smtp-Source: AGHT+IFFhHVArPPblD2DVYdTOdpn3Q5otdg4xxc2KJoUGdqMYAFIdZ+AH5uKiJdNpnmvJkxUPXRcr431E2g= X-Received: from yuzhao2.bld.corp.google.com ([100.64.188.49]) (user=yuzhao job=sendgmr) by 2002:a05:690c:3604:b0:5e3:c8e7:3bc3 with SMTP id ft4-20020a05690c360400b005e3c8e73bc3mr1104118ywb.1.1703307410447; Fri, 22 Dec 2023 20:56:50 -0800 (PST) Date: Fri, 22 Dec 2023 21:56:47 -0700 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20231223045647.1566043-1-yuzhao@google.com> Subject: [PATCH mm-unstable v1] mm/mglru: skip special VMAs in lru_gen_look_around() From: Yu Zhao To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yu Zhao , syzbot+03fd9b3f71641f0ebf2d@syzkaller.appspotmail.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Special VMAs like VM_PFNMAP can contain anon pages from COW. There isn't much profit in doing lookaround on them. Besides, they can trigger the pte_special() warning in get_pte_pfn(). Skip them in lru_gen_look_around(). Fixes: 018ee47f1489 ("mm: multi-gen LRU: exploit locality in rmap") Signed-off-by: Yu Zhao Reported-by: syzbot+03fd9b3f71641f0ebf2d@syzkaller.appspotmail.com Closes: https://lore.kernel.org/000000000000f9ff00060d14c256@google.com/ --- mm/vmscan.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index b4ca3563bcf4..3cf7066d627f 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -3959,6 +3959,7 @@ void lru_gen_look_around(struct page_vma_mapped_walk = *pvmw) int young =3D 0; pte_t *pte =3D pvmw->pte; unsigned long addr =3D pvmw->address; + struct vm_area_struct *vma =3D pvmw->vma; struct folio *folio =3D pfn_folio(pvmw->pfn); bool can_swap =3D !folio_is_file_lru(folio); struct mem_cgroup *memcg =3D folio_memcg(folio); @@ -3973,11 +3974,15 @@ void lru_gen_look_around(struct page_vma_mapped_wal= k *pvmw) if (spin_is_contended(pvmw->ptl)) return; =20 + /* exclude special VMAs containing anon pages from COW */ + if (vma->vm_flags & VM_SPECIAL) + return; + /* avoid taking the LRU lock under the PTL when possible */ walk =3D current->reclaim_state ? current->reclaim_state->mm_walk : NULL; =20 - start =3D max(addr & PMD_MASK, pvmw->vma->vm_start); - end =3D min(addr | ~PMD_MASK, pvmw->vma->vm_end - 1) + 1; + start =3D max(addr & PMD_MASK, vma->vm_start); + end =3D min(addr | ~PMD_MASK, vma->vm_end - 1) + 1; =20 if (end - start > MIN_LRU_BATCH * PAGE_SIZE) { if (addr - start < MIN_LRU_BATCH * PAGE_SIZE / 2) @@ -4002,7 +4007,7 @@ void lru_gen_look_around(struct page_vma_mapped_walk = *pvmw) unsigned long pfn; pte_t ptent =3D ptep_get(pte + i); =20 - pfn =3D get_pte_pfn(ptent, pvmw->vma, addr); + pfn =3D get_pte_pfn(ptent, vma, addr); if (pfn =3D=3D -1) continue; =20 @@ -4013,7 +4018,7 @@ void lru_gen_look_around(struct page_vma_mapped_walk = *pvmw) if (!folio) continue; =20 - if (!ptep_test_and_clear_young(pvmw->vma, addr, pte + i)) + if (!ptep_test_and_clear_young(vma, addr, pte + i)) VM_WARN_ON_ONCE(true); =20 young++; --=20 2.43.0.472.g3155946c3a-goog