From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 516D8C27C6E for ; Fri, 14 Jun 2024 22:51:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5E5056B0151; Fri, 14 Jun 2024 18:27:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 431046B0172; Fri, 14 Jun 2024 18:27:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DDBA76B0173; Fri, 14 Jun 2024 18:27:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id BA0B76B0172 for ; Fri, 14 Jun 2024 18:24:54 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 611B71608ED for ; Fri, 14 Jun 2024 22:24:54 +0000 (UTC) X-FDA: 82230925308.17.CB470C0 Received: from mail-vk1-f182.google.com (mail-vk1-f182.google.com [209.85.221.182]) by imf19.hostedemail.com (Postfix) with ESMTP id 99CEA1A0005 for ; Fri, 14 Jun 2024 22:24:52 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=nnqINEaU; spf=pass (imf19.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.221.182 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718403889; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ih2fA5Wax68aj8KVDoPb/EodfFp99EDrYIr3CW+2D0Y=; b=HIYlxx1BO8Pr2EWecIRxRUtjG35v/5spgtVk7cY6Oc5Yyma6dEtdelhhDDCBT8XhPC3ay8 UO2A0Y2pRDouTmsDqfQpOwRJDo7ONcMCr+ttqeMQQ+PvmzYtAY/89POqSvzIaJ2Qdbt+7w w8TUTkxfDMIFq13XKjIMY3Gd/8qsaWg= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=nnqINEaU; spf=pass (imf19.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.221.182 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718403889; a=rsa-sha256; cv=none; b=pbmn/PWS6H7Zo4C7YTxTKM3CotFIV6sUA07nZ83dMeaRCzSrxdBa4Q6YVeFaMWUedSYVR8 WThb7XaEDs3NB1zWb9IELrAM/27pUtwa+CJvkTHoUffWqZtV325N2OFCHrwmHAxZjZwZYn GlWPt0V2y89mr1R+UP3Hx46oiD4ccXk= Received: by mail-vk1-f182.google.com with SMTP id 71dfb90a1353d-4ed0b3c6a76so786971e0c.1 for ; Fri, 14 Jun 2024 15:24:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718403892; x=1719008692; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=ih2fA5Wax68aj8KVDoPb/EodfFp99EDrYIr3CW+2D0Y=; b=nnqINEaUBIyzBt/1QQIYWMYrXTp7ArJaDvAPXf5QsZuL924Hxufs88Hjlwv24zVuSx gBuAVny/1fdUACf5lfAGsAJqi0Ej/UcAw/H3NGxWop8Kk+8gSG50ISPQAGAv/C/VYV+P tIOvlBAUBlljs1vicnpOCM/cbcFLXomOFbHlUfZyZJzgAHVLfGGy70gJbvxV4jTHDl6B 41JNaEsg/NMeEocJXNe9ijHH490c5e4008nX1VLa2hAdY3LsoVoUC2bwnnR3n3C5RHz2 g8ZHVtaF/ZXoseV7ASgZdk2J+mpolgLa3/Y2xq/8bIwr8LIi4Kbewp+cclZgNbGI0z6M 85Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718403892; x=1719008692; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ih2fA5Wax68aj8KVDoPb/EodfFp99EDrYIr3CW+2D0Y=; b=Rr6+l+J+IphqTlDJJuPMOkCHFecVzy3Phh0vFKmrUel15FBdY/8ql+R3bNSGnubiP/ 0ILhYN6lVXFOnLcQJ512cd0rB3WP0H/iqvmzGXkb9q8sRRRC13spHgY0TyMWg/wS9Xdd 5szWSLEf4T09TZR9XN4RIM7HiFkoEnmvxwSODlM+qiwMOcidM6yxr2VbbUofX66QszNs DBhLFAw/VBQPoInpzgopuwOCI23+YFdHyFaxyuTmc60JEYRK59l9V2TdQUBrgALf0RSr hiVpb8Eph9TDk4hgVmD67WqIPKdp6Vg2Zu06NoyTS2W59p04uXMbg8cm75Doac/K5uy/ rdCw== X-Forwarded-Encrypted: i=1; AJvYcCUb/U/+1X6GYxkTRJi2+6OsekONba24xZhNINuie4ZZUpF6sm84qVoRYBKs7QkaP2K9wHs6z6ygN3ZKvz0eGk4Znoo= X-Gm-Message-State: AOJu0Yzd0fR+wfG0enSDofhJPtPtXA++bIW+i9upixPpUhugX9NSb3Zk hrMC4cSJ5NRpsT4GPlf9vJlBkWD6mq8rpzshApqj8Y1IMDIY+Z7fYsF+hYeFUe6cLRddkAr9zpN GnQt2/vzQFD4T/RK0AUHhDM7UeXc= X-Google-Smtp-Source: AGHT+IF1U1FhPkWf9tA5ZiH6VlXt+AeiUC2VItUL1s0lrAitzST8yLQce2+xj1VLtYOOWix//ETOAq1FR2wQK9igbjU= X-Received: by 2002:a05:6122:8d5:b0:4eb:25bb:b56f with SMTP id 71dfb90a1353d-4ee3ff38290mr4490223e0c.13.1718403891617; Fri, 14 Jun 2024 15:24:51 -0700 (PDT) MIME-Version: 1.0 References: <20240613000721.23093-1-21cnbao@gmail.com> <20240613000721.23093-4-21cnbao@gmail.com> In-Reply-To: From: Barry Song <21cnbao@gmail.com> Date: Sat, 15 Jun 2024 10:24:40 +1200 Message-ID: Subject: Re: [PATCH RFC 3/3] mm: remove folio_test_anon(folio)==false path in __folio_add_anon_rmap() To: David Hildenbrand Cc: akpm@linux-foundation.org, linux-mm@kvack.org, chrisl@kernel.org, linux-kernel@vger.kernel.org, mhocko@suse.com, ryan.roberts@arm.com, baolin.wang@linux.alibaba.com, yosryahmed@google.com, shy828301@gmail.com, surenb@google.com, v-songbaohua@oppo.com, willy@infradead.org, ying.huang@intel.com, yuzhao@google.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 99CEA1A0005 X-Stat-Signature: cpq85eeefhjdwe1fjim35hdkf9zygk37 X-Rspam-User: X-HE-Tag: 1718403892-265291 X-HE-Meta: U2FsdGVkX18sAtqPnDRiRPBjEi/Ikh7buToDb9a+UM9M/VULvywfaLqyG66rhFQdKm9/6Z7a5Ue6Y5nCPEoibZHMPco94x2unOX8eV4/qaxv/6Me0fpJmWeMfUak1wtEatHNRhoPQIka8hku4Sdmjten13ZAB/bK/I+wY22VQpsDLJ7ZS0SsECf1HySzxdQXLU6NIPqjnDhLiHVwa+rQn5M0vayTJOjHnze0bzwi4F3pYyw+UAlemDvF+3mMLtIWrfahIsaQpzPCyF8ErnYlmDBc/myIk0/t7Kblwls0b8J+LB8sIaA1WVbhXMKu2aTx5kvh82SrYFE4g+qnr2wLO6n1SY8u9F1ZLOWG3c7CPkxOxrrHqUzbhWESVhPoxg9TVlJPSP8QAu0pqTUZ8Qx5ZfkEIEabodBz//ock75gqXZwcgKVAQEbyt1gxf+BghsgkXjTQasw4f6ZKEp+Nbncm+iwInjyXFbITVY84JHayG2MsLJVCCS+GpY5qogRqD8dXIj1HYzlIGvqFxoQzuJTXk+uJohCTR36U8f413TaPe2ejFGalxXk59KoWD8Ul+3YiwsHI7KRV7DEpb6bPtmXefBMXOVuvjGbxDPmVsjBuBQWYWDyNMqKC/iSU+jy9a4wRPWide6wp2U5Z+rLUgg1VZxkvKNcWZ9l9Z7QCNn6gZzaTgguwk3nttrI8pP30vCdwztxbGQLe/DSG0OaZEFidhRlsQ749N4EdElPPSbM0tz9wRHrBr24qGbZt0gpOQ9YHQZXiOBOE1Zvu4GHKu3am4Q8LdlwZDldn52LDBgmONTU0t5ydwLt6sYQ30MjIw2QWyvnheENu/w0zTz+6GXjcNg92qFKd1d4GRB0HvJkBEFAP73rJ1y4tn5ToupQcDbWaHHlviS02ZJCmKX/Ith1WBJuoBMMIWpv6MPbLS3K/YlEzfc7urzfGVFG/yiCns85kv2tr18n3G4vyF6ukWl 9KednIXj OEjvXbSAhnR6R6fnVkeUhCuJx1n6AkIEw+NBjRuVjDQOv3RkljWzSwc1sQKPeB95uT06VTwxFcUfR4KtK66RQmU2ZfQzQKGb+E/qBigjdZwHruYEE+ZYHuZLTWvH17stmA9u8g/hSZ8wXbm9pOjQjAkmyM88VjX8yeBIgg6rk9IxCW7OkTK7Y5P1TcQiPMAT5t7nWe3bAPbwbfu2kj4YSJyRSirIur5NQ03OtEJmePhW2lUVaSsmPaMnr7U/rfN9e6BSjsL0ZBSFU1Kw7h2YMux2UTTIfD5PvqvgYmi5cH+BOElKFH7Sey1n8yd41mqKG86hZjJ1wlzHaLZhUQOOY2CLd/sh6CWc4TtiEGwTNT4+tJg0= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, Jun 14, 2024 at 11:10=E2=80=AFPM David Hildenbrand wrote: > > >> I don't think that is required? We are only working with anon folios. = Or > >> were you able to trigger this? (which would be weird) > > > > I didn't trigger this. but I am not sure if kfifo is always anon based = on > > the code context. > > > > for page, it is 100% anon(otherwise "goto out"), but I am not quite > > sure about kpage > > by the code context. > > > > static int try_to_merge_one_page(struct vm_area_struct *vma, > > struct page *page, struct page *kpage= ) > > { > > pte_t orig_pte =3D __pte(0); > > int err =3D -EFAULT; > > > > if (page =3D=3D kpage) /* ksm page forked= */ > > return 0; > > > > if (!PageAnon(page)) > > goto out; > > .... > > } > > > > Then I saw this > > > > static int replace_page(struct vm_area_struct *vma, struct page *page, > > struct page *kpage, pte_t orig_pte) > > { > > ... > > VM_BUG_ON_PAGE(PageAnonExclusive(page), page); > > VM_BUG_ON_FOLIO(folio_test_anon(kfolio) && PageAnonExclusive(k= page), > > kfolio); > > } > > > > If kfolio is always anon, we should have used > > VM_BUG_ON_FOLIO(PageAnonExclusive(kpage), folio) > > just like > > VM_BUG_ON_PAGE(PageAnonExclusive(page), page); > > without "folio_test_anon(kfolio)". > > > > So I lost my way. > > try_to_merge_one_page() is either called with a KSM page (anon) from > try_to_merge_with_ksm_page() or with the shared zeropage (!anon and must > never become anon) from cmp_and_merge_page(). > > So in replace_page(), we either have an ksm/anon page or the shared > zeropage. > > We never updated the documentation of replace_page() to spell out that > "kpage" can also be the shared zeropage. > > Note how replace_page() calls folio_add_anon_rmap_pte() not for the > shared zeropage. > > If we would have to craft a new anon page things would be going terribly > wrong. > > So not, this (!anon -> anon) must not happen and if it were to happen, > it would be a real bug and your check in folio_add_anon_rmap_pte() > would catch it. Thanks very much for the explanation. I wonder if the below can help improve the doc. If yes, I may add a separate patch for it in v2. diff --git a/mm/ksm.c b/mm/ksm.c index d2641bc2efc9..56b10265e617 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -1411,14 +1411,13 @@ static int replace_page(struct vm_area_struct *vma, struct page *page, goto out_mn; } VM_BUG_ON_PAGE(PageAnonExclusive(page), page); - VM_BUG_ON_FOLIO(folio_test_anon(kfolio) && PageAnonExclusive(kpage)= , - kfolio); - /* * No need to check ksm_use_zero_pages here: we can only have a * zero_page here if ksm_use_zero_pages was enabled already. */ if (!is_zero_pfn(page_to_pfn(kpage))) { + VM_BUG_ON_FOLIO(!folio_test_anon(kfolio) || PageAnonExclusive(kpage), + kfolio); folio_get(kfolio); folio_add_anon_rmap_pte(kfolio, kpage, vma, addr, RMAP_NONE= ); newpte =3D mk_pte(kpage, vma->vm_page_prot); > > -- > Cheers, > > David / dhildenb > Thanks Barry