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 A79A8C71157 for ; Wed, 18 Jun 2025 08:47:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 28B3E6B0088; Wed, 18 Jun 2025 04:47:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 262D96B0089; Wed, 18 Jun 2025 04:47:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 19F466B0092; Wed, 18 Jun 2025 04:47:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 0B02B6B0088 for ; Wed, 18 Jun 2025 04:47:31 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 95F1880DC2 for ; Wed, 18 Jun 2025 08:47:30 +0000 (UTC) X-FDA: 83567892660.11.9521C57 Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) by imf28.hostedemail.com (Postfix) with ESMTP id B1D9EC0002 for ; Wed, 18 Jun 2025 08:47:28 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=M+58b+xv; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf28.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.208.170 as permitted sender) smtp.mailfrom=ryncsn@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750236448; a=rsa-sha256; cv=none; b=Os3t4Z1N4hHfKCzo9SE7rPp8IdxU6bl116dT4EjAhalRG0Qb/+QdqSfE8xFBU4/7FEBZ7X pH2dY9iyHsDwdLGXCIuPWwLj3sqD3qeqXhVqHAsPFkB0qp6m6iybxQUqsRFK52Eq0fzWb0 eELXrq0Yz9TeWVue22y9QH/Il6zriS8= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=M+58b+xv; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf28.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.208.170 as permitted sender) smtp.mailfrom=ryncsn@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750236448; 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=Q2CToX4WSVqQjXei9WfJ9aCUL+KlH88ek3mxdl421Fo=; b=7cwHGgpv7AryZ1D4KtPAwjUuHinkzik73M/p8iOQkk0kuynULh1fKExyGi/mbdhe3dqxcB oxTqffS8Yxb6+qg0MucxJsVwRp+Z5kMjRIZ7UBurSYNpw9vMUSauUvmTai+lSXhESGLjBd 91vJNm6apACqSsNUKW4kr62SF5kp99Q= Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-30f30200b51so73156661fa.3 for ; Wed, 18 Jun 2025 01:47:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750236447; x=1750841247; 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=Q2CToX4WSVqQjXei9WfJ9aCUL+KlH88ek3mxdl421Fo=; b=M+58b+xvEDqVdFQTq0Ep5a47QR9CNohpTUbxwJHMRe6pJvsZv+/ncAggDkakEihvd5 7bImzxuA3+8BBGRFpqSMEPV8pI8CZl8zjFjjCHLaFzEwGFXSbdy6YNhN8zZojaQgvWbP 23VzFFEZvTZIr5n4WHR6IKyP7W3B6B2uVExfUxw6DA8QHoLmDFmDhFrHafQulfdwuGVI Oem3RwK3NBn5kEqOMGCHf+E7qsHy/T3DptdxTBThtD2b2/RK5AB0hXkg+xq0sDoV8iHE r85KRjbu3nQtnHl9bx4/+eeO3d79LwtGGy3mN8kIv8hiKS0K81M85P/gY1z0eT+rgKyj fCQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750236447; x=1750841247; 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=Q2CToX4WSVqQjXei9WfJ9aCUL+KlH88ek3mxdl421Fo=; b=YpN1SCBn/3SjYgCQyEmd2r0bCeJlV1NmSvNrYKVVk4pU0N2JdLOLQFV//7bi+Oqjh6 6VC+RX0aZq3oeAWCQlQwmP85unLJer/ecB192w4ADfeV40EHckmTAXLsGAhH9QnSe9dr D+PaTTQQ1oFx/3k/XhK92iolH1QngSOBjWEBKuHyatQS6EAPmYdkf4BhxRsD3wGjSfJ/ k0Rnu0WFZF/P10J1ybIlvcnk6ex0WyGfKZUvC1W89rtOHCHsxStLzoFri2hOicEEDKkw b5IrXNv9ZjbyBpXOZ/wdMM49Kqgqx6mfOUQMmLcnwq0DMhW5CQIWPDJ8hHqYnW7jzVrn Vzcg== X-Gm-Message-State: AOJu0YzTfC9heLwcyLIIBSwAHtvm+W7LtlQfhG+WFZUr0hFNl3mEPjSF Mc1VkpSgbtx5RfqQX1jiP995IDd5ouYNdofNfDKVSRmbkVtRkpaBLCUdxDd5Q0Rui1lQNBkU7C3 H/MrLxGDWMBRwhCTPnvkffTJAYi6L6YM= X-Gm-Gg: ASbGnctaaNyX4QyTed2SR0tUhT3r5XXQqYqI6peuTwXUBtkyVsakQu+55vRLgDLm8kH auXK8R057+4Bd2pYavmgOlsnWlRGenE/H5fXV6ITniqXfBgnVTmdG1up+aiHCvyughmIy579lbo 7oqLGwc9AIrhiTIXaGxDSjx91X8jk/C7daStsmOG7bfhtXubG2gM5Fpw== X-Google-Smtp-Source: AGHT+IHRu/2YzycOVrm/vD6RoVhDYIDMzJUv1Ihuz62QnJQicK9Z225AdgjQsi8A95sMDrFtCCH9wXOk69Ovet6yf18= X-Received: by 2002:a05:651c:b0d:b0:32a:6aa0:2173 with SMTP id 38308e7fff4ca-32b4a5b9752mr50178591fa.20.1750236446584; Wed, 18 Jun 2025 01:47:26 -0700 (PDT) MIME-Version: 1.0 References: <20250617183503.10527-1-ryncsn@gmail.com> <20250617183503.10527-4-ryncsn@gmail.com> <7e680582-ac35-3d2d-8945-c26410ff4f9b@huaweicloud.com> In-Reply-To: <7e680582-ac35-3d2d-8945-c26410ff4f9b@huaweicloud.com> From: Kairui Song Date: Wed, 18 Jun 2025 16:46:49 +0800 X-Gm-Features: AX0GCFvCgqTLJPeg3CwSZDs6ia4gdsgJJ5hjNvDEKOi15hov4HWh89v8lk8bRXM Message-ID: Subject: Re: [PATCH 3/4] mm/shmem, swap: improve mthp swapin process To: Kemeng Shi Cc: linux-mm@kvack.org, Andrew Morton , Hugh Dickins , Baolin Wang , Matthew Wilcox , Chris Li , Nhat Pham , Baoquan He , Barry Song , linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Queue-Id: B1D9EC0002 X-Rspamd-Server: rspam02 X-Stat-Signature: 3x9a3c5t36xp7u81pxahzcoarwmtk33g X-HE-Tag: 1750236448-163390 X-HE-Meta: U2FsdGVkX1+LFI/D7WxBm3OkCujTisW0KYnWN480tNIJ81zGOST9tj23+ZCtJJ8qwYtzAdkc7t3W7LKO30JE/hThbzplJip7bH8ekebfsY54p/FQibh0tY8hj1a+s1vwR9wK7/DOUC4+3d2V3V5QNAm8JGZAoeDoEVx5ulZa4qsZKYS3Eda8pVSlMXC14DwZudeg1Zyt8cHPLZvNaSn5uu6Nr5XZbGhvNTrG8NBxWVjzJdQFuUMZa3C5oVWJ5ui2jnwrGLsK7EBs6nCLRRqIyH/jhfl2T4IYXjXnDosJhCl7MNgWxRaGAUFKoOCc1u7DSFM4YbTXGMkDJLGruc/ZjjX79cfr/G8ZdEf8gQeFBsO8K3MHp367GRL7R0AfGVToIkIY6Lrie95TBCj2CeAdKhoq+AT+d7xZmnTQr3tP7kJm0ko5Wsan6KkdkmWRlSRvIrOR28PBmTlwbfANBYlAKmODuhhVZxHE+E8H4qkQVfyS6l+KZ0p5W5yrd66USBuZ0A+BPlv2kaQ7fxo/TnjDaNeEwxeqwwA5VV/nU6YuviJFbjoUzr208734e+0P4tYmNhbwT8TgFxLqNBgF201678GH1iorUsVx5XIGtJJlJ19ND0PKU+EnjRQFi8iViDTgC6UK/uIxR7ZUB4tauqp6tng46E21q9+re6aA7+GskmAyET3wJdVbP0d8SMTC3uW0fnYLx/l8Y3I3a6H0+Nkdar9nDDuMljfjF1BZs/cqV6Iwh5WxLlqUx/HVQoL+UuPBeVzoeHge2RoGNljrYJ+/Ro5FyDYZjSA1ymN6HWAALLx+33KIaRQz+niIrfM7yRJR1BVMf5rJiMgYgxnCA0DZK/5GVEl2i/pvnFY3MF6F+/w8/VjdGqh/RuluvncMT6jpOmmduYxzowSmW6waLGdrR3tqovshuzWAFia6C6wPXaSREXnmatnas4a0vrsBOuhmGfntpUeGOKhWlcRSLvk 8G6Pqws3 lBi4UYw+7Mh2S9UHT9BmNut2ydUvInefhayR1y2kUtgp0zM3A/c4x7W8VKwyP5qqlFUaFBtK5QVHuh/z8Ai8TCn/kxjcNrWe3Citz566ydn+xOkHC7Czwv5h4DOyDKsP8LAx1qzkWalZx5GAJsvsdfgQiH97T6O6xpH2/iYSJXhjxfJPGZX3VrINZ2ENCAgf3UqfNaL3ZOvOfQR/QjXy+DqY85roFq3Jf3q2BGljIcOmHewUxth92jIKzpF0bRg9LP+JWSE0vxySgmHXqwDh60A3bTG92/9V4U0TCA6JciAA7SrOJUIW/QVxIrreCaw5S2l8TCRJqGiP0+COUYGbAVA0wZu+vqo3U4svX+eQwlX4HbgyneA9UwkOjow== 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 Wed, Jun 18, 2025 at 4:26=E2=80=AFPM Kemeng Shi wrote: > on 6/18/2025 2:35 AM, Kairui Song wrote: > > From: Kairui Song > > > > Tidy up the mTHP swapin workflow. There should be no feature change, bu= t > > consolidates the mTHP related check to one place so they are now all > > wrapped by CONFIG_TRANSPARENT_HUGEPAGE, and will be trimmed off by > > compiler if not needed. > > > > Signed-off-by: Kairui Song > > --- > > mm/shmem.c | 175 ++++++++++++++++++++++++----------------------------- > > 1 file changed, 78 insertions(+), 97 deletions(-) > > > > diff --git a/mm/shmem.c b/mm/shmem.c > > ... > > Hello, here is another potensial issue if shmem swapin can race with foli= o > split. > > > alloced: > > + /* > > + * We need to split an existing large entry if swapin brought in = a > > + * smaller folio due to various of reasons. > > + * > > + * And worth noting there is a special case: if there is a smalle= r > > + * cached folio that covers @swap, but not @index (it only covers > > + * first few sub entries of the large entry, but @index points to > > + * later parts), the swap cache lookup will still see this folio, > > + * And we need to split the large entry here. Later checks will f= ail, > > + * as it can't satisfy the swap requirement, and we will retry > > + * the swapin from beginning. > > + */ > > + swap_order =3D folio_order(folio); > > + if (order > swap_order) { > > + error =3D shmem_split_swap_entry(inode, index, swap, gfp)= ; > > + if (error) > > + goto failed_nolock; > > + } > > + > > + index =3D round_down(index, 1 << swap_order); > > + swap.val =3D round_down(swap.val, 1 << swap_order); > > + > /* suppose folio is splited */ > > /* We have to do this with folio locked to prevent races */ > > folio_lock(folio); > > if ((!skip_swapcache && !folio_test_swapcache(folio)) || > > folio->swap.val !=3D swap.val) { > > error =3D -EEXIST; > > - goto unlock; > > + goto failed_unlock; > > } > > if (!folio_test_uptodate(folio)) { > > error =3D -EIO; > > @@ -2407,8 +2386,7 @@ static int shmem_swapin_folio(struct inode *inode= , pgoff_t index, > > goto failed; > > } > > > > - error =3D shmem_add_to_page_cache(folio, mapping, > > - round_down(index, nr_pages), > > + error =3D shmem_add_to_page_cache(folio, mapping, index, > > swp_to_radix_entry(swap), gfp); > > The actual order swapin is less than swap_order and the swap-in folio > may not cover index from caller. > > So we should move the index and swap.val calculation after folio is > locked. Hi, Thanks very much for checking the code carefully! If I'm not wrong here, holding a reference is enough to stabilize the folio order. See split_huge_page_to_list_to_order, "Any unexpected folio references ... -EAGAIN" and can_split_folio. We can add a `swap_order =3D=3D folio_order(folio)` check after folio lock though, as a (sanity) check, just in case.