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 2F014C3ABD8 for ; Wed, 14 May 2025 20:19:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 66ABF6B009D; Wed, 14 May 2025 16:19:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5F0556B00BC; Wed, 14 May 2025 16:19:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 444EA6B00BD; Wed, 14 May 2025 16:19:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 1F7F56B009D for ; Wed, 14 May 2025 16:19:57 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 2AC70121129 for ; Wed, 14 May 2025 20:19:57 +0000 (UTC) X-FDA: 83442629634.20.80F1165 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) by imf16.hostedemail.com (Postfix) with ESMTP id 2EB41180003 for ; Wed, 14 May 2025 20:19:54 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=kd2nqlp8; spf=pass (imf16.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.215.174 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=1747253995; 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=kieNeCak+ITnknuJUBxpgpyVfGZnqgFMcLNwpEE3iT0=; b=OiIdR1Qz4sYBCFp9ArSO6iefP3z+v7hbgYqrQwIBaAT49SzTs6lkdgV0+Hj5h4i5tcJfuQ xf6coPyJyf7PL7Db5mdex1Y0tSesl0lt6clhMiF6wlAZ8cLkJMUY1jTp1zd5tKG82Y6iHA 2NPqWGj6qIgGNkKMlZzvPFNoTXZL/iw= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=kd2nqlp8; spf=pass (imf16.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.215.174 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=1747253995; a=rsa-sha256; cv=none; b=xWkiosssVX0/iwYikebK97RgJgAugyaI8b2QmLWvAL8MB4qNYs1pf474Anq1V4n1Jeouj6 tpwmtfFgNS41VLm19z52dreFuNyiVXVr3Ui8go/d4BTN/WZLiTIhm0/KZKt+SrsM7hQ0zR l+I6QY/kkMurz6tnx2s8G089Q3I7uC8= Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-b1fde81de05so75183a12.1 for ; Wed, 14 May 2025 13:19:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747253993; x=1747858793; 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=kieNeCak+ITnknuJUBxpgpyVfGZnqgFMcLNwpEE3iT0=; b=kd2nqlp874vTfuv2ac7PVYiuXhnzsiTFcMvEwIVhVPnZeL7dB1OdADiBrzV3TZYcOv 67jLvFDi4ztbAx95TF9bmO25AU4aVYq1OQtRIkhXms5F7KCl9FRIjATpGWi766cMW+gP 5yUlcLSuOqub0GX1Jja/t6ut1/keXY7jucpT39goSfHV4rYPvPhrRYd4lPcPpdtQVyfW I8L08vljDFVBeRm/uPsQOg+FTTH/tbPVkd8KJk5x/nESSHzgO6y/qIib+ONow6GBMslq EXn0kOPvJmuWkw4MzoC9tTwaaDpAPSvT5qgozGycw6/NZDjqcSUtQn8/ROHghKF1hxib zNRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747253993; x=1747858793; 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=kieNeCak+ITnknuJUBxpgpyVfGZnqgFMcLNwpEE3iT0=; b=nxkihfsdXEUKK264vA58LnQZObi9esfJn+pJlpYW6POD9wK0rbMKMLhDajPClAkvzb hQfjDApJkw0gl+kleVFZw459Th5CwGx9BUSBu61EUvASjuK3c5wBqYAHfXb4GTTcsj+G SLG9Esq/RgS/SyLaV+k1x+pNiUJ1WqhnqqtMIQl+iHTz0WgAfWvqW5Ik51Zz/m9wRr8b 1t/QuR1RagBfJ74nKb7Xo1bJlijg28pJ0ibEINg7uPnBs2fbCie4EwbMpZ2oeUD1hMDB T4tR0bjdQQ1i5rN8jpFg4nRk/erz3QgxGkMtPLAERBnjL8lfiyBOGnI7ZSRtA11fFoJP IEVw== X-Gm-Message-State: AOJu0Yyl44mPzggrbB7EWxDyU7w76bHLGIWIkVjPOGGyZKfdsDboybZN cw1xfEinPUeMyjTNi59F4lpgdWDa4BVSuppzObMJn4lR+ctUgSsmssIh9XT3V10= X-Gm-Gg: ASbGncuF9lUcxy5EqGam/FdSIrCSAUgdwQXrOJ1cj/P3dgX+eI8RHrswEwrgmsifdMA f1q/dghiPHQwrauSwfS5jJ2LIkGkGhNe8WihT2pkWJaqtM6danrFAiuCLtGLdN8e+Wpz7P9KU9W lYiujHkOr4pgLdFQdCgy+4cRCNDNnjEB5LQ+JUIFvItAIDUveMTLinQHLM2fD5ltjjSKCNjcvkh b4dydJAgjR/vPbX4LpAC+Yx/AX+DZ1/Yz4DAYhZi/s92pxTbBBMU5w5syjURkPAs5pJC3jL0RX3 mm8FFGWSbH+zC1jKNtkTCkORwWV4wHNTVC4FjOY6jkaz85gN1IKWFpZ74Fr/+fMS9VtlgSft X-Google-Smtp-Source: AGHT+IFl/r9CN+crqDsxYvo8EMEo/YC1S6DWzNj/HegMUGLxoAOhlawJgO2Ah9N5Ugc1zkPvkdV1FA== X-Received: by 2002:a17:90b:3bce:b0:30a:4874:5397 with SMTP id 98e67ed59e1d1-30e2e5e7752mr7629337a91.9.1747253993298; Wed, 14 May 2025 13:19:53 -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.19.48 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 14 May 2025 13:19:52 -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 26/28] mm, swap: minor clean up for swapon Date: Thu, 15 May 2025 04:17:26 +0800 Message-ID: <20250514201729.48420-27-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-Rspamd-Queue-Id: 2EB41180003 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: mckmkz9fytahiaexzf63yfw9y9yz51pu X-HE-Tag: 1747253994-698925 X-HE-Meta: U2FsdGVkX190NqOYhI0++vXA9T/fUzV/thhhE3tQ7ubWa4q9oYWUgIe27fjGazKWb4gjHWwaxlMapFuNPzZYyTWAjEdPKMgPKEpME3GdLGtXAMbhFB7v5NBqNkcnO+tPML25XLu6kpzPB45L0hz7JFQk3Sp702brOrhUdr1i2MEXz19jzPuRxHBsi5Vbmfx8ThZHt8IghV/9dyx2PwuTiIFLycsaYZaXCCAtUtVQ4yO91wIVD3Nqzo6YbFcgJnuvKc1NlxvXf13XW3Dgl+GyVf5jt5R3ZwI5W3X/nXtVoD6qUrIcfCnAQU213I2EoAk7NCp3pTc3fcwdsUhxaGNbbNF6qXeSvk2lpsWld6RrOW7hiBKvucANqWepycEvA3y0QL+lPQewAI+unuTcwPea8QUV4AFWqzfcW+aPmPfkTCIElhP/L3ZrAAz8nvKHTJ8MxzJCgNDVrOSQXT1fW8nMw2ABM8M9SEaDNyw7whwFdCQcCSgu6x8CuESsUmaItbR71WDNriifxV3iW7l/R5Cj1yoRCQgRv/k1gLK0wWpo2ikjHTKBPZxENVVaZEx6hoaK1v/TrtM2yJSgAfPIEwCtjqDRikJnkMf2qlXzxAwmm4Nrdnz8XiZHlHKSuROIbMJruhXli1qBIpFm3JPdITyjdMMm7tiofquZVqpzHZpMStLtcsBYY5FR8KZXnIVSzRkvYkCpdXnLQp5JO3EOV1NbE/H5DkSYvQHdY5QCMtEbVL01wL3TMllM9lAva0DzwYXaqvoPNyfdzZIw6eoIml5cMgqDU20UBbw+No3bHo5E78FShagn1FFzfhGpYiuuwxwNdBJ/AfdAw6Vf3ujwzhUjBLV/tTiPSJSfOayIY8kLSXP3GKOV3CUkHJexC9nuHui7YyGTMA9UbhM6BLzfKEXzK+gcWYUlqFGmT/ieXhzPrNw9Bitjt7a56qnA50lJofsWdyib1uYFoycdsBl5Nuw /gnpl+88 DWBRpXJ5JziK7ZQBp9GH3WzISSAeJ+VDHJigVWvSqtrL0AQui8A40BNp+j9VaJ2vlsV9yJMJZEu6PAOZMsrpiruoqr8X/DHGBVJz05mE1w0H9ccPU0T+PC3yenXwmFcFd6nuNQUVg90WA7MdeL/GtVCi06SiQ2cNBd7dX/Bk+jHKHNVu5SwFAQa9GFHhWVULx0fzW1zLfo6RN5LvXqiurTuew1qxXtFkJQtWTVxuvawExWFT7mE6nB65bQUyxb2mntN7pVPsQ343lUfy1OmZ6DWQ/xYDMNq5f5B/Twt+7/ltAucGSy65f7MF3ujNZp3gONeDF/S+Br8dqcFD7utE7hxVbROAYBqKF/Lmci1+V6lnURCMCqZnRiTjieyKBFGq/kqfQDExBGr8eRU7P1JV1Ogz6hYisBW47IuI62u87BGIyApFiZBynAOhynRWyZ3hg7+HpRM2RhY4cGK5dy1g+/hyXH8Y4+x8ziizV9xprXMEafqK87QWcHC6zuWEMVKzLXxW6xhZqdxK7ml3GE8+CjnSIXq/El7nepRjulIugxB7n62sgEjgRX9/UvMZY2EkiHble 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 Setup cluster info first as now it's the most basic info for swap device now, and clean up swap_map setting. There is no need to pass the them as argument for multiple functions, they are never set to NULL once allocated, so just set it once. Signed-off-by: Kairui Song --- mm/swapfile.c | 62 +++++++++++++++++++++------------------------------ 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 28bb0a74e4a6..c50cbf6578d3 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -2440,8 +2440,6 @@ static int swap_node(struct swap_info_struct *si) } static void setup_swap_info(struct swap_info_struct *si, int prio, - unsigned char *swap_map, - struct swap_cluster_info *cluster_info, unsigned long *zeromap) { int i; @@ -2465,8 +2463,6 @@ static void setup_swap_info(struct swap_info_struct *si, int prio, si->avail_lists[i].prio = -si->prio; } } - si->swap_map = swap_map; - si->cluster_info = cluster_info; si->zeromap = zeromap; } @@ -2493,13 +2489,11 @@ static void _enable_swap_info(struct swap_info_struct *si) } static void enable_swap_info(struct swap_info_struct *si, int prio, - unsigned char *swap_map, - struct swap_cluster_info *cluster_info, unsigned long *zeromap) { spin_lock(&swap_lock); spin_lock(&si->lock); - setup_swap_info(si, prio, swap_map, cluster_info, zeromap); + setup_swap_info(si, prio, zeromap); spin_unlock(&si->lock); spin_unlock(&swap_lock); /* @@ -2517,7 +2511,7 @@ static void reinsert_swap_info(struct swap_info_struct *si) { spin_lock(&swap_lock); spin_lock(&si->lock); - setup_swap_info(si, si->prio, si->swap_map, si->cluster_info, si->zeromap); + setup_swap_info(si, si->prio, si->zeromap); _enable_swap_info(si); spin_unlock(&si->lock); spin_unlock(&swap_lock); @@ -2541,13 +2535,13 @@ static void wait_for_allocation(struct swap_info_struct *si) } } -static void free_cluster_info(struct swap_cluster_info *cluster_info, - unsigned long maxpages) +static void free_swap_cluster_info(struct swap_cluster_info *cluster_info, + unsigned long max) { - int i, nr_clusters = DIV_ROUND_UP(maxpages, SWAPFILE_CLUSTER); - + int i, nr_clusters = DIV_ROUND_UP(max, SWAPFILE_CLUSTER); if (!cluster_info) return; + VM_WARN_ON(!nr_clusters); for (i = 0; i < nr_clusters; i++) cluster_table_free(&cluster_info[i]); kvfree(cluster_info); @@ -2580,7 +2574,6 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) struct swap_info_struct *p = NULL; unsigned char *swap_map; unsigned long *zeromap; - struct swap_cluster_info *cluster_info; struct file *swap_file, *victim; struct address_space *mapping; struct inode *inode; @@ -2687,14 +2680,13 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) swap_file = p->swap_file; p->swap_file = NULL; - p->max = 0; swap_map = p->swap_map; p->swap_map = NULL; zeromap = p->zeromap; p->zeromap = NULL; - cluster_info = p->cluster_info; - free_cluster_info(cluster_info, p->max); + free_swap_cluster_info(p->cluster_info, p->max); p->cluster_info = NULL; + p->max = 0; spin_unlock(&p->lock); spin_unlock(&swap_lock); arch_swap_invalidate_area(p->type); @@ -3067,7 +3059,6 @@ static int setup_swap_map_and_extents(struct swap_info_struct *si, if (nr_good_pages) { swap_map[0] = SWAP_MAP_BAD; - si->max = maxpages; si->pages = nr_good_pages; nr_extents = setup_swap_extents(si, span); if (nr_extents < 0) @@ -3089,13 +3080,12 @@ static int setup_swap_map_and_extents(struct swap_info_struct *si, #define SWAP_CLUSTER_COLS \ max_t(unsigned int, SWAP_CLUSTER_INFO_COLS, SWAP_CLUSTER_SPACE_COLS) -static struct swap_cluster_info *setup_clusters(struct swap_info_struct *si, - union swap_header *swap_header, - unsigned long maxpages) +static int setup_swap_clusters_info(struct swap_info_struct *si, + union swap_header *swap_header, + unsigned long maxpages) { unsigned long nr_clusters = DIV_ROUND_UP(maxpages, SWAPFILE_CLUSTER); struct swap_cluster_info *cluster_info; - int err = -ENOMEM; unsigned long i; cluster_info = kvcalloc(nr_clusters, sizeof(*cluster_info), GFP_KERNEL); @@ -3151,11 +3141,12 @@ static struct swap_cluster_info *setup_clusters(struct swap_info_struct *si, list_add_tail(&ci->list, &si->free_clusters); } } - return cluster_info; + si->cluster_info = cluster_info; + return 0; err_free: - free_cluster_info(cluster_info, maxpages); + free_swap_cluster_info(cluster_info, maxpages); err: - return ERR_PTR(err); + return -ENOMEM; } SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) @@ -3173,7 +3164,6 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) unsigned long maxpages; unsigned char *swap_map = NULL; unsigned long *zeromap = NULL; - struct swap_cluster_info *cluster_info = NULL; struct folio *folio = NULL; struct inode *inode = NULL; bool inced_nr_rotate_swap = false; @@ -3241,13 +3231,19 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) swap_header = kmap_local_folio(folio, 0); maxpages = read_swap_header(si, swap_header, inode); + si->max = maxpages; if (unlikely(!maxpages)) { error = -EINVAL; goto bad_swap_unlock_inode; } + error = setup_swap_clusters_info(si, swap_header, maxpages); + if (error) + goto bad_swap_unlock_inode; + /* OK, set up the swap map and apply the bad block list */ swap_map = vzalloc(maxpages); + si->swap_map = swap_map; if (!swap_map) { error = -ENOMEM; goto bad_swap_unlock_inode; @@ -3288,13 +3284,6 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) inced_nr_rotate_swap = true; } - cluster_info = setup_clusters(si, swap_header, maxpages); - if (IS_ERR(cluster_info)) { - error = PTR_ERR(cluster_info); - cluster_info = NULL; - goto bad_swap_unlock_inode; - } - if ((swap_flags & SWAP_FLAG_DISCARD) && si->bdev && bdev_max_discard_sectors(si->bdev)) { /* @@ -3345,7 +3334,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) prio = -1; if (swap_flags & SWAP_FLAG_PREFER) prio = swap_flags & SWAP_FLAG_PRIO_MASK; - enable_swap_info(si, prio, swap_map, cluster_info, zeromap); + enable_swap_info(si, prio, zeromap); pr_info("Adding %uk swap on %s. Priority:%d extents:%d across:%lluk %s%s%s%s\n", K(si->pages), name->name, si->prio, nr_extents, @@ -3375,10 +3364,11 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) si->swap_file = NULL; si->flags = 0; spin_unlock(&swap_lock); - vfree(swap_map); + vfree(si->swap_map); + si->swap_map = NULL; + free_swap_cluster_info(si->cluster_info, si->max); + si->cluster_info = NULL; kvfree(zeromap); - if (cluster_info) - free_cluster_info(cluster_info, maxpages); if (inced_nr_rotate_swap) atomic_dec(&nr_rotate_swap); if (swap_file) -- 2.49.0