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 8B2CBC3ABD8 for ; Wed, 14 May 2025 20:19:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E69836B00AD; Wed, 14 May 2025 16:19:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E1A446B00AE; Wed, 14 May 2025 16:19:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CB9926B00AF; Wed, 14 May 2025 16:19:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id AA0446B00AD for ; Wed, 14 May 2025 16:19:00 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 921C3120C72 for ; Wed, 14 May 2025 20:19:00 +0000 (UTC) X-FDA: 83442627240.03.B5D594A Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) by imf23.hostedemail.com (Postfix) with ESMTP id B29AA140012 for ; Wed, 14 May 2025 20:18:58 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="Ua0Zgji/"; spf=pass (imf23.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.215.170 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=1747253938; 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=VCzh8XoJ7iR5UkQvB2yPd5bD+zJe0a5vs+xtyvTlef8=; b=OYJQmGg0SxDozME1JWnfruijFzsyCgxVRrU/teMXJnf0NFgLtFjAgAkO1tGGkmUoF9IthU AovJ1fqb7EddGb6Aq5xJsQgeqCFKFlUL7qAtpvuTQRXjas8m3FKGGR0+zMYtQwCpdQteEY VhUDBrpsPF9HwSBDmSTTEblvNyrp2fg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747253938; a=rsa-sha256; cv=none; b=tLrQ6556Zxt2BBa2ikFkILceba2FRQDDCw6/iEjsRqn9iY2QApAMs0hw23KGFdVWrew3J1 sfHZr4q5EGoEtR7DBnkoaJvPxXMotVnvC7Y84X/uWT6lThSWEAH3ODMDm4UGiNapX/y9t+ IJWmmcATzAJPX0O2UG87TLYuvx9WP64= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="Ua0Zgji/"; spf=pass (imf23.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.215.170 as permitted sender) smtp.mailfrom=ryncsn@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-b061a06f127so70057a12.2 for ; Wed, 14 May 2025 13:18:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747253937; x=1747858737; 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=VCzh8XoJ7iR5UkQvB2yPd5bD+zJe0a5vs+xtyvTlef8=; b=Ua0Zgji/oOH2WEXmVd5YgDehsXxVHqjraMDbrH3juFo1FTcF/7yLHGk+ODn4holgvw Dhg0XkoVa67jpngjy1mobQTfRSeJXtJxAEkh3XnXQGNAicr7U74NcyDprTFyrjwVRth2 tZY/6rkXyG44a+A4AClQspda0X2I8bbkJb0Xhc9JUwWweEWgtQVb5War9QHxHietZPSj Awm38IbwQ7pvBV2lOaTaKXxnObPJ1HDhtXUy+mWUHImNO7X/FrALda6vQF/C4rJdCJik OvLflim+XUZO1Sz1207mPUjFBRnKns+UtmkmOPwG9XTAO9yrdS+EZC7n64MJa4EkivdB X5ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747253937; x=1747858737; 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=VCzh8XoJ7iR5UkQvB2yPd5bD+zJe0a5vs+xtyvTlef8=; b=hKZmgsVXN3qZZMFX0FvwJNGndVye60N/EH46jM18yj/BjFp5w4glHeK1vieO8qwocq 8mwyDbJJ17rzEh35FtkxD1sjoaHTeI+gg8sNpUfKLWjiDzob+c2d+XlNk+D1UaqFBcSE /b7Riw5mq+CDdEmUZtM1MBWpcBemb8xNAOvaaIWb57ZfJ9Mks8Z5xs80OCVtOMJNMRBZ /SruvYEH2EYgEiwF32ROMHOoo2Q5c6Eun5V9q5+VXTWH4peSiQib8E4LavjAJYuXGa0H ZQ8zY/e207GUGmMHeA4OhijhFsQtyg8gCNa58Ht8ffTXEJhjhHtvadH9YoBdKERgJnZc dhNg== X-Gm-Message-State: AOJu0YydFn3slzcHmGMSiCfXktnpvSkLGmRIMZwVS4PKj+z8iQ1j7Hlk Kykpr26ORf+2tdqwlW1KI9hd+3ogOtMKcECkMkHq86xEWC3qd4e9BeZRxibhcmc= X-Gm-Gg: ASbGncv8fQWenWgMPVIklTPGtEmtItc9uFmkVKlguUcEIz9a0nSQm7tSfckAMtdt8DH 5de1vh3tDgwMZiwwvopgqCQBOKSc260HxKZ/29Vy/tZHPEa9kqzuI/+nwOBjjc/8QQovbg4Nh1J VIed4160xgvWTEiFwHh6hOuNjYHYPQFXFYx5YwqaXzPMUYw9WgXuVtGUFb86ElqRGKFib9LeWGG ue5Itt4os+4TgdVSIE3Z1Sv41PCnEtKa5KVp49t+s6Ak9HZtKUAV1AlQzy+XW3P0GQcSvE4ziq1 78RQG8KX8iPcoaAtzcPG8kjtB/D09xJL356OwKCRq37lOGvEgpJ6Qsv8DCWzhqObW641oIHU X-Google-Smtp-Source: AGHT+IExSI2hqmk+VRchAK7hScUkYCrqQ3rfWhy/546iawiMwyTTJHzv2uq/p3d+jT15aiafAXDj5A== X-Received: by 2002:a17:90b:2811:b0:2ee:f076:20f1 with SMTP id 98e67ed59e1d1-30e2e413597mr9029910a91.0.1747253936923; Wed, 14 May 2025 13:18:56 -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.18.52 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 14 May 2025 13:18:56 -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 15/28] mm, swap: split locked entry freeing into a standalone helper Date: Thu, 15 May 2025 04:17:15 +0800 Message-ID: <20250514201729.48420-16-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-Stat-Signature: z98j7gdos8xguwnfw6a3b8szep7kgweu X-Rspamd-Queue-Id: B29AA140012 X-Rspam-User: X-Rspamd-Server: rspam02 X-HE-Tag: 1747253938-918130 X-HE-Meta: U2FsdGVkX18pJrhwMRfwz+jEEOVSmoyXv3iPkZK0j3Lu0Yr3rJbxA87e5dl2gB3nxKF2gFfl59paCAG6TCF9Mooqle1X+JZCzbe6WG+hZK8TbUuqg1LPN1iRINf1L9e4xG8G76DtthSJCLC15mliTN26app+unkXBSOdlXrP1qzbfypZ0FBSHfePeZzwNOyF9/m8AmRvHQ7QMn/sAy1mYw0KABIupAc0HtQFr2eZjlctBA1R5cVVM8nz2VNt3OwUA6Qmfnd0Ljl5N4wx61r6sOANGa6iYqDsdeXnYzT0X4p5BmvYU2vL5DRUi7TC65ChTC+718xLfECAOQ/dMgXsw44KBPzB+A0HY9aA0XCQh+wZCXXlIwxEH8CHXg039KFxpNfQ6jpWZTEcWxr55CHslmdE7keXn25grY2cVUMU7T79coZUJyCB9h+fwSjhDev83+SXYKx5GNo+mzuhImQFfPtJ9gfe3+HN1PggKa91+KsWsIushtpOwa9mqScguBBJaJ9O/PMG+Go26z65/39nEMYlyTlTuC7Yja8jMk3S0gQxJIGSkVqxGDNwr45aIew7yWOYEQNAe96XMTj3o/+GFyACI5K4lTkMuy3zDfhdYIbImPs/LOH7IIqOPms5HcwnmjgCwrVaTZMxz+6aK1GN2wZE6VVD2b8vBalohvoh/8gn8Y91mXBDyQRehLxJZAMf5L+8TSb0m5W+iUOEWDI6PuyCLMh6qSpMbJPcEogX81JLubbtL7rznVMJQi2FfSqOdhkjuFH+gpThI+xVqQYlh3g4947WcYVUmBHZBNKKNchDKZ8fowf6oeVqYI5sLN2rHuowf3bZbFxLPIe9E/nZ2e23Y45DyJP8gqFY1dTY9e3ddsvrY6zERZtxWVHL+hi94q5ID4uGRCfVChglswI5gjOFJ2hXWrCmVcYRqgq9kQdawo4OyXUIKpZjil4KG5ocT8EsZqMiHksmN9RiKZg Sr1zNxP2 5MrjsIAK0Ev+9fekNuQNL8rLUqjQqQOxSkCgB8NlTDsWU3Mzt0Vyw6zD3hHvebnIyo83AqU2bgAFuFx769keGopgw/Fnz/drNcxQn0/w81wnZoeBDzYXGl8jEEC0mg3hkGLz56Ruoc2aAsAQQL3JYlMsIh/T3LjAiJhdq3LjjjpFKS8sfrLb+v9XSeNYQdo/oKuqLAXRqAq8nI1XAnGONPwdG7Y6aDNZv1eNKytgK4m/CA3HhtgeWXnzXbKmV3b8DYQIBEL0rVo0DIpfm+HSa3aTfg1dOWAFlSyU35hWEOCssqeJZrtdKwM4xZnmlblZTrL3X+cXrNcmdUGhyaWDpEOl97a6JyD9gAOyHxMqBnODI2v39ZGUqXT5JmqTDbUusryYrOdc7/xACuBjDe72MydeIomCO/vcAFy0rlRlPpEcjsVm5aAuhUTXqxTV17izkPqgj+/Y9w95VE/Dz0BhyXELB5XMiuhMi/gipcWWrPPHv4ZYYiD5PVZNqKPenCsbNOtWHqS5vpgpHbPq+tb0DxAydUnHdxZvHgROuEC/z1cGX+/AEdjjoR9ndu88br8Wq88ni 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 No feature change, split the common logic into a stand alone helper to be reused later. Signed-off-by: Kairui Song --- mm/swapfile.c | 61 +++++++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index d3abd2149f8e..d01dc0646db9 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -3492,26 +3492,14 @@ void si_swapinfo(struct sysinfo *val) * - swap-cache reference is requested but the entry is not used. -> ENOENT * - swap-mapped reference requested but needs continued swap count. -> ENOMEM */ -static int __swap_duplicate(swp_entry_t entry, unsigned char usage, int nr) +static int swap_dup_entries(struct swap_info_struct *si, + struct swap_cluster_info *ci, + unsigned long offset, + unsigned char usage, int nr) { - struct swap_info_struct *si; - struct swap_cluster_info *ci; - unsigned long offset; - unsigned char count; - unsigned char has_cache; - int err, i; - - si = swp_get_info(entry); - if (WARN_ON_ONCE(!si)) { - pr_err("%s%08lx\n", Bad_file, entry.val); - return -EINVAL; - } - - offset = swp_offset(entry); - VM_WARN_ON(nr > SWAPFILE_CLUSTER - offset % SWAPFILE_CLUSTER); - ci = swap_lock_cluster(si, offset); + int i; + unsigned char count, has_cache; - err = 0; for (i = 0; i < nr; i++) { count = si->swap_map[offset + i]; @@ -3520,24 +3508,20 @@ static int __swap_duplicate(swp_entry_t entry, unsigned char usage, int nr) * swap entry could be SWAP_MAP_BAD. Check here with lock held. */ if (unlikely(swap_count(count) == SWAP_MAP_BAD)) { - err = -ENOENT; - goto unlock_out; + return -ENOENT; } has_cache = count & SWAP_HAS_CACHE; count &= ~SWAP_HAS_CACHE; if (!count && !has_cache) { - err = -ENOENT; + return -ENOENT; } else if (usage == SWAP_HAS_CACHE) { if (has_cache) - err = -EEXIST; + return -EEXIST; } else if ((count & ~COUNT_CONTINUED) > SWAP_MAP_MAX) { - err = -EINVAL; + return -EINVAL; } - - if (err) - goto unlock_out; } for (i = 0; i < nr; i++) { @@ -3556,15 +3540,34 @@ static int __swap_duplicate(swp_entry_t entry, unsigned char usage, int nr) * Don't need to rollback changes, because if * usage == 1, there must be nr == 1. */ - err = -ENOMEM; - goto unlock_out; + return -ENOMEM; } WRITE_ONCE(si->swap_map[offset + i], count | has_cache); } -unlock_out: + return 0; +} + +static int __swap_duplicate(swp_entry_t entry, unsigned char usage, int nr) +{ + struct swap_info_struct *si; + struct swap_cluster_info *ci; + unsigned long offset; + int err; + + si = swp_get_info(entry); + if (WARN_ON_ONCE(!si)) { + pr_err("%s%08lx\n", Bad_file, entry.val); + return -EINVAL; + } + + offset = swp_offset(entry); + VM_WARN_ON(nr > SWAPFILE_CLUSTER - offset % SWAPFILE_CLUSTER); + ci = swap_lock_cluster(si, offset); + err = swap_dup_entries(si, ci, offset, usage, nr); swap_unlock_cluster(ci); + return err; } -- 2.49.0