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 91E04C3ABDA for ; Wed, 14 May 2025 20:17:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BF83C6B008C; Wed, 14 May 2025 16:17:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BA7EA6B0092; Wed, 14 May 2025 16:17:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A6F296B0093; Wed, 14 May 2025 16:17:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 86B956B008C for ; Wed, 14 May 2025 16:17:53 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 1DF34120644 for ; Wed, 14 May 2025 20:17:53 +0000 (UTC) X-FDA: 83442624426.26.72DDCDB Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) by imf01.hostedemail.com (Postfix) with ESMTP id 367B740005 for ; Wed, 14 May 2025 20:17:51 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CGyzEI9A; spf=pass (imf01.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.216.53 as permitted sender) smtp.mailfrom=ryncsn@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747253871; a=rsa-sha256; cv=none; b=FH4Tu14BnvL8wIKZS03xk30vNfK6jjCMZfXzICryrYw5wwa5xGLodzUDNrTbFWY+aIeUTM foD7GR9GYt5Gcy25BJHtGPcFwd1vzai4ZotH4xoJTKSLP74gtraHVHzRwZRQs7NWB7YyMD kVWSWG0e2qHfEjJJqK805a7KM5uusrE= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CGyzEI9A; spf=pass (imf01.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.216.53 as permitted sender) smtp.mailfrom=ryncsn@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=1747253871; h=from:from:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=qka9J/ZnaKySa/kXf/KCNurXXskYI6/z9w0Yh6R9N0s=; b=YLr5DHckUeBPhWZRrCs4Iw0uuyCFJGAmGdT1iczYdv6vRAcEcJVbjsl8YSAdTBT98UuA83 OUtXzmfeoUcnMFtTCSRSd0E8vIUcBEAu7IlEvVdBA4e+eq89R4T7/J95wAwAhd8MfCORAj xElIjf4wo2wPeDptexP7Fm4d09takRw= Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-30820167b47so258753a91.0 for ; Wed, 14 May 2025 13:17:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747253869; x=1747858669; darn=kvack.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=qka9J/ZnaKySa/kXf/KCNurXXskYI6/z9w0Yh6R9N0s=; b=CGyzEI9ArULt0g3YIHQR71CAYfvl6T6HN08PuUM1Z64/Cx9Am+4Rp8hcn0sZYb/OsX E3iq63IK97AoGA2BnIkbFUqIVDUPGkphGHljqvXNn07/HNPusPwQj8KuvWFh/m4UNU/e huDfxa7+sRbpF/9G8s9Hnp3uD1DpAiJyXbH3bxd9gURmpTSOWiv0MUNr+ZYLESLFrJfY Qg/IPbHSgFqmZFGQni1BF5Uzq7HFKyf6TV8pRLP46HAHMEkX7ATpsQ7wicKgwKFa7zhQ itatcaS4Ck3Ebq5F/9x3JjDWfF6N8tC+DMWcr3UXMz3XaafBCqiuqsz+J7GmtEGxr1mm DWnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747253869; x=1747858669; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=qka9J/ZnaKySa/kXf/KCNurXXskYI6/z9w0Yh6R9N0s=; b=RwRBy3xqv+7Bf/YEBQbmpo0zugAYp4FgqYVHNPSVpkOL4f+5EZPUeZ6kF8neQTP0fi 2asTSouQKfzZTqAYChWQjs2Q5R8fiIZiSURYKEiA+NgiexW+xZ2LlSXQjiNbV+VjZbCj eAjr5dUfEmUYUmFTaKstbmht10bQUbLG8XaX01GVGU76Ppvc3VFpoojl76onE7OvHy00 i54i/IBoPWqNcrr8RhLx5RtLbXjIgK89qX5TgCOvampOuJ7pjFmKXXEz8Vc3v7aTbQkk 16GLNz671lav8TXHWJATB8QKf6tdDXwlZgVnY0lDmf+R1jaus4v4oUoksCb44PhsPqJh eNOA== X-Gm-Message-State: AOJu0YymIzyurZGxavcJU3WNn2/Ygsn9uGAYM+yJ6YL4NlBnrTDF2bqd aDGY5zDZy9CK1Y6fgbePTTYm/ubCJCT5/yHvxIf4HDR9eBJ76E0k77Y1L+979BKZGCM= X-Gm-Gg: ASbGncvaBlutSgmvIqoctDBIOcUqJ9cLlQUr/JZSLTaNHkGMHrvdFpsxjvjPc9AL3rH 6ypNtH2rjY5CKfa/fTar1YqV794+sceQS2YgMI49QoeQAXzuNA/TWWSSFBHbrxaBjmKSqRuUgtR /cCGgSqpCxzA+wYWAYqH7/6L162tGtOr4+V816sIc9fzDRKhvnPRQON3CgDQz1NSH6GqsJD5feD ptxTQ0SsBRXQYrHMbHnKntEwODNBkfuyajDrUTiZ4fotHZ3k1JVWM3f8zntxtjNHOeMw0IGlcK/ 6grKtcNd+oAtVFR8XahEsGEkmGw439z7agXq/NXvteoGiiNGTekqsUvdPBaLHTUUZ0MfXu/s X-Google-Smtp-Source: AGHT+IFsF/FWlsYSpk2bilSZT+eU3KZofkqvca0yqokpqNplBxqQ5MXBcjejALkYCzP8Ww/FftZJjQ== X-Received: by 2002:a17:90b:3bce:b0:2fe:b907:5e5a with SMTP id 98e67ed59e1d1-30e4db3d8c5mr1128129a91.10.1747253869368; Wed, 14 May 2025 13:17:49 -0700 (PDT) Received: from KASONG-MC4.tencent.com ([101.32.222.185]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30e33401934sm2003692a91.9.2025.05.14.13.17.44 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 14 May 2025 13:17:48 -0700 (PDT) From: Kairui Song To: linux-mm@kvack.org Cc: Andrew Morton , Matthew Wilcox , Hugh Dickins , Chris Li , David Hildenbrand , Yosry Ahmed , "Huang, Ying" , Nhat Pham , Johannes Weiner , Baolin Wang , Baoquan He , Barry Song , Kalesh Singh , Kemeng Shi , Tim Chen , Ryan Roberts , linux-kernel@vger.kernel.org, Kairui Song Subject: [PATCH 02/28] mm, swap: consolidate the helper for mincore Date: Thu, 15 May 2025 04:17:02 +0800 Message-ID: <20250514201729.48420-3-ryncsn@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250514201729.48420-1-ryncsn@gmail.com> References: <20250514201729.48420-1-ryncsn@gmail.com> Reply-To: Kairui Song MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 367B740005 X-Stat-Signature: g7oxgynpmso9dggbstqpi3nzdggj4hkn X-HE-Tag: 1747253871-758407 X-HE-Meta: U2FsdGVkX18kCKxhix3G6FhAoxNEunPgsvy2bhAYwOFFpYNYLj6wATjZtAhE3oI1SxU8qDyY0WzoN3oGCzTqn8eJYMgMXKiuuA8Vql5YRBexMa1aGxoN70a2iHAelUsIlxu68mor6t98UcgWBmK2liLjxUej8t0K44+oE4wxU3h1EXBogByvjdeAOzeDHW/tkQdEFUbVpq52F3TeJetCnxP6/swfQrHg8CGs3PLhoPzTsBsbXgsYkZL3Ldaw6Vc/oYkiTNA1mFEfbnES9OLAWyn7db4vQlC6bo28GAt0189bDQUuQlbYQxfBy8T7lGK41C9l9cd6MJLnnyK2RHEcHeBc+EUuFONY0sfVtGN8uogLARhdVj2ujbc9er0bi+I9Q3erTy77DHQflcOc9bS9L9HBFrhR8EV5KTVVIoenEBfwb8WEnKXB2hcYn9NiBrgBWt8aLLVdhxAWHhgfOuOXzycibf4SAT+3qyY0JEMtkl1+rAhbDWYt7vJg9QgNgdrf28Dn7uTL2pAW4Co+J3WKixsM2ve6OJm+HBjrt08Pit145sxaK+IbzyGmusChPs7MLGyQy0M466N1EGmP+V0l4fLD3HeGL3WdYMve73IXQbuXuP9Yxrh+cXYgU1jDa+cyAuiI8FdiRYUEoUMJ6EnkaQ14NBkb3filLQB6hVYg7JUnosc5WAXwwTb9sK/sqHiUVx6NDhITChx0NuIfiwWgDt383TCYdCKb8ktKNwoy65OWWohy+xbBIX++WO3znttDtuVufItpK+zdjrtIwX1t73PuPL5zYpmMFRuHFDfq2OUt9bM7PreTlb0UniHsg51AhNSctWT8X8Orvh4MnoNxLhxl26Lqtg8AXge41WN4+YW/Wk23Rpd9//jD8Jw5JYNxGaKUcPjxTO567tse+/gHptA9xtHZBCs4s06s/QevaGZR/0bP+skQJLWWWcXFJo8er6BiSHFUcRgFUbl4GQ9 daVD5I+P 6687QuptjXsaZLd0jKXKYX0qe/uOSN0y+18Ew07LWf+30oWcIewQOIm2v6soqv8hUiOZ0XUZIFL8lNAfsleb/ElmIeTEK58SzBeSv+XrfsViZ3hnqCNh7jm0pMvR9bTAN29bmGlYopjA37HqYD24gTu4S/AUQipX0vDtrn+FvT3+hz0ZxyAtufCQqioLvIx5ZxQcPTp9xAmI/7Xf4fGgIMfyk+bcbEjXhKrm/tim3SnO/kmOSFhGlITFBdEhNnHQ7iDcCT1XRrzlJwRkUI8phKsP2enYjCd5r9/HgbYU1NogSsJ4l/vfCH5t/jlwGsF8jiCWzsJKFHnWAZs+GA48rnggoUUrLoDZh8Ralt2Iqa94mjugQQVDW2o9De74Nus+v0b2W842Xq+lhUYbfw+DvLIWXIAbSakIPLS05yIFpZ+3KHbvzYNCa2LtnAJH3wd6aC4zIl+LbvwqB+41ZNVCXmguTNVZkVQ6CsTcyQ3NFX15gE/OGKzC2vA4wFwLu0IdctEjM4yMRi/oXgsU4m12+ziaWHJ69Ccz3/k3AHn+0uMxkhjLMGrlnlRLrlxBZ9Nuk9UqU 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: From: Kairui Song mincore related logics are not used by any one else, so consolidate and move it to mincore only to simplify the code. Signed-off-by: Kairui Song --- mm/mincore.c | 50 +++++++++++++++++++++++++++++++++++++++---------- mm/swap.h | 10 ---------- mm/swap_state.c | 38 ------------------------------------- 3 files changed, 40 insertions(+), 58 deletions(-) diff --git a/mm/mincore.c b/mm/mincore.c index 42d6c9c8da86..7ee88113d44c 100644 --- a/mm/mincore.c +++ b/mm/mincore.c @@ -44,6 +44,36 @@ static int mincore_hugetlb(pte_t *pte, unsigned long hmask, unsigned long addr, return 0; } +static unsigned char mincore_swap(swp_entry_t entry) +{ + struct swap_info_struct *si; + struct folio *folio = NULL; + unsigned char present = 0; + + /* There might be swapin error entries in shmem mapping. */ + if (non_swap_entry(entry)) + return 0; + + if (!IS_ENABLED(CONFIG_SWAP)) { + WARN_ON_ONCE(1); + return 1; + } + + /* Prevent swap device to being swapoff under us */ + si = get_swap_device(entry); + if (si) { + folio = filemap_get_folio(swap_address_space(entry), + swap_cache_index(entry)); + put_swap_device(si); + } + if (folio) { + present = folio_test_uptodate(folio); + folio_put(folio); + } + + return present; +} + /* * Later we can get more picky about what "in core" means precisely. * For now, simply check to see if the page is in the page cache, @@ -61,8 +91,15 @@ static unsigned char mincore_page(struct address_space *mapping, pgoff_t index) * any other file mapping (ie. marked !present and faulted in with * tmpfs's .fault). So swapped out tmpfs mappings are tested here. */ - folio = filemap_get_incore_folio(mapping, index); - if (!IS_ERR(folio)) { + folio = filemap_get_entry(mapping, index); + if (folio) { + if (xa_is_value(folio)) { + if (shmem_mapping(mapping)) + return mincore_swap(radix_to_swp_entry(folio)); + else + return 0; + } + present = folio_test_uptodate(folio); folio_put(folio); } @@ -141,7 +178,6 @@ static int mincore_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, vec[i] = 1; } else { /* pte is a swap entry */ swp_entry_t entry = pte_to_swp_entry(pte); - if (non_swap_entry(entry)) { /* * migration or hwpoison entries are always @@ -149,13 +185,7 @@ static int mincore_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, */ *vec = 1; } else { -#ifdef CONFIG_SWAP - *vec = mincore_page(swap_address_space(entry), - swap_cache_index(entry)); -#else - WARN_ON(1); - *vec = 1; -#endif + *vec = mincore_swap(entry); } } vec += step; diff --git a/mm/swap.h b/mm/swap.h index 521bf510ec75..4f85195ab83d 100644 --- a/mm/swap.h +++ b/mm/swap.h @@ -62,9 +62,6 @@ void clear_shadow_from_swap_cache(int type, unsigned long begin, void swapcache_clear(struct swap_info_struct *si, swp_entry_t entry, int nr); struct folio *swap_cache_get_folio(swp_entry_t entry, struct vm_area_struct *vma, unsigned long addr); -struct folio *filemap_get_incore_folio(struct address_space *mapping, - pgoff_t index); - struct folio *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct vm_area_struct *vma, unsigned long addr, struct swap_iocb **plug); @@ -156,13 +153,6 @@ static inline struct folio *swap_cache_get_folio(swp_entry_t entry, return NULL; } -static inline -struct folio *filemap_get_incore_folio(struct address_space *mapping, - pgoff_t index) -{ - return filemap_get_folio(mapping, index); -} - static inline void *get_shadow_from_swap_cache(swp_entry_t entry) { return NULL; diff --git a/mm/swap_state.c b/mm/swap_state.c index ac4e0994931c..4117ea4e7afc 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -324,44 +324,6 @@ struct folio *swap_cache_get_folio(swp_entry_t entry, return folio; } -/** - * filemap_get_incore_folio - Find and get a folio from the page or swap caches. - * @mapping: The address_space to search. - * @index: The page cache index. - * - * This differs from filemap_get_folio() in that it will also look for the - * folio in the swap cache. - * - * Return: The found folio or %NULL. - */ -struct folio *filemap_get_incore_folio(struct address_space *mapping, - pgoff_t index) -{ - swp_entry_t swp; - struct swap_info_struct *si; - struct folio *folio = filemap_get_entry(mapping, index); - - if (!folio) - return ERR_PTR(-ENOENT); - if (!xa_is_value(folio)) - return folio; - if (!shmem_mapping(mapping)) - return ERR_PTR(-ENOENT); - - swp = radix_to_swp_entry(folio); - /* There might be swapin error entries in shmem mapping. */ - if (non_swap_entry(swp)) - return ERR_PTR(-ENOENT); - /* Prevent swapoff from happening to us */ - si = get_swap_device(swp); - if (!si) - return ERR_PTR(-ENOENT); - index = swap_cache_index(swp); - folio = filemap_get_folio(swap_address_space(swp), index); - put_swap_device(si); - return folio; -} - struct folio *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct mempolicy *mpol, pgoff_t ilx, bool *new_page_allocated, bool skip_if_exists) -- 2.49.0