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 6E90DC6FD1F for ; Tue, 26 Mar 2024 12:51:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E43DB6B0083; Tue, 26 Mar 2024 08:51:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DF3926B0085; Tue, 26 Mar 2024 08:51:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CBC056B0087; Tue, 26 Mar 2024 08:51:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id B6FCB6B0083 for ; Tue, 26 Mar 2024 08:51:33 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 81F261A08EB for ; Tue, 26 Mar 2024 12:51:33 +0000 (UTC) X-FDA: 81939176466.14.CAF5050 Received: from mail-oi1-f179.google.com (mail-oi1-f179.google.com [209.85.167.179]) by imf16.hostedemail.com (Postfix) with ESMTP id 85D6418001E for ; Tue, 26 Mar 2024 12:51:31 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=UO4JyEcU; dmarc=pass (policy=none) header.from=cmpxchg.org; spf=pass (imf16.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.167.179 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1711457491; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=EfoOYG5EQf0UkvMjeqz6CEWwC7DheKH6EhJnW18OMBU=; b=gz/XbHRW89LjRYwuzgwkOW2TQJiffot2D8YcoI5ennnfp3ABKXsEXlZH2Be+I9NyaR1cI8 McFaSFbWNyjbsmjKgtwwYJtiVwol0YfGvbWoQTjVBROswL7IHJUv4E+HZqf4zpB3Sm0/10 IDj8lI6zFSolPQxssWNmQcSW7uQygkI= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=UO4JyEcU; dmarc=pass (policy=none) header.from=cmpxchg.org; spf=pass (imf16.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.167.179 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1711457491; a=rsa-sha256; cv=none; b=lavBeJ+xbtCn78yCLbhXERVIA8BNGfWjO0xutPcILOLqXklKKhOFtJ9q+nEICu31t/BYAn TnzkuHOxrVIlUOSnpUgGyAfz4A8x1kSJHFpQt2DTE52WMF3zUDPNiZl3NHMqTq7jgCZCA1 McwiBrdKn8/ExIFAwmiH0yx5RHiKOFI= Received: by mail-oi1-f179.google.com with SMTP id 5614622812f47-3c3b256ab5eso2832202b6e.0 for ; Tue, 26 Mar 2024 05:51:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20230601.gappssmtp.com; s=20230601; t=1711457490; x=1712062290; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=EfoOYG5EQf0UkvMjeqz6CEWwC7DheKH6EhJnW18OMBU=; b=UO4JyEcUn2vy2BGN4M/WjnO1fYn3WOmyMZ5JivwMcrlihn28nfiN7xcy6ZCK+gpe4k kleyAyBiH4Kui7e2jgWKTsZAp8KWlLQxOLRYhwyEPK4js9t0qd2Cn7vJQ7pj8bo4O0Af pdh8g3/QwNdtXXztQAffQjjeNRST3KHygEqidEwbvZVrYlzlJVRLKU8RqDMsUlmIdS0x KNJnf+gG8fqUvuyQF1Ol6lMcaF1375//czmPZjIMONYWie+WFUFAV8c5pyboNoPjzu1q 1JJ3EbDejAykMYpxbgFlkUzTt9bq1mk8998KEcjqChafcUtxEfbQSTbeJfY/e0YuKhyd GjfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711457490; x=1712062290; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=EfoOYG5EQf0UkvMjeqz6CEWwC7DheKH6EhJnW18OMBU=; b=bgDGzbAkgok9V6EDdBt6m4gI9ZHKXJAQ4y13xbH/4n1ePvrje6G2gfLwpdzE0c6Z1x vsXNkfOWvI47+rwSv9VLwToXYN6Oe6yy2tFKvgeaj4vqsgLrMRyIdGD+0UXlf4D6t0PI U8RIN14culIdYxIoe08Z9GDdjpWQ6ghYs3KvXulNv64G2Ngi1pvoEufAOOPgwSApfa/G EwtAB76X0R7JvRXFBhRfpvtEyg2F37FkPkZEB/W+CanLYPCQv+XIr8OrtKLjQSHl1Fvy SvCfwt+tgLKE4y0ycNJGgDst/ejeRBzsoihUAhTicu448wbv3/rzECq/3Q002N8YuxOd bOEA== X-Gm-Message-State: AOJu0YxTa6uFXZUkcCRG6RFdo/t+6mUyXpypaFn7Ri17ISRpxbA/APa/ dyi4c/43AQykAxGsc3cHwdoIp1wnt7apYTqXsuPVdODOUsuuo+mV5Foh2I1cK70= X-Google-Smtp-Source: AGHT+IE8wqWbE8dlvgzHGjmsmYkeWHkJ5uMP6CAmnUcUKq0xZRk3/UFNAOnBZTpR00X275iSg87Usw== X-Received: by 2002:a05:6808:1209:b0:3c3:82a1:e6e with SMTP id a9-20020a056808120900b003c382a10e6emr11024343oil.53.1711457490602; Tue, 26 Mar 2024 05:51:30 -0700 (PDT) Received: from localhost (2603-7000-0c01-2716-da5e-d3ff-fee7-26e7.res6.spectrum.com. [2603:7000:c01:2716:da5e:d3ff:fee7:26e7]) by smtp.gmail.com with ESMTPSA id bz23-20020a05622a1e9700b004313bda0329sm3654928qtb.96.2024.03.26.05.51.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Mar 2024 05:51:30 -0700 (PDT) Date: Tue, 26 Mar 2024 08:51:20 -0400 From: Johannes Weiner To: "Huang, Ying" Cc: linux-mm@kvack.org, david@redhat.com, hughd@google.com, osandov@fb.com, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH] mm: swapfile: fix SSD detection with swapfile on btrfs Message-ID: <20240326125120.GB229434@cmpxchg.org> References: <20240322164956.422815-1-hannes@cmpxchg.org> <87plvho872.fsf@yhuang6-desk2.ccr.corp.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87plvho872.fsf@yhuang6-desk2.ccr.corp.intel.com> X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 85D6418001E X-Stat-Signature: bas35t35saqyoj5qra9oup76ggxapose X-HE-Tag: 1711457491-283739 X-HE-Meta: U2FsdGVkX1+tc7lNxPkVlbIBqj5Tfc8RNiW3ROQcogWIjOpWz+unHMLT6maxqJgR45DUkalSDLzH8+Yjhsvyj4bLx9LMfxLQndoDoqL9z40aZJ7+S8u0D1bg+T9RwYdMs4JUk2D4USwCUrSPIyY4Y7CMZLtr8Y+6l0wcF1KsixmWgzwj1HJVahdpwweDsk9lj0/C4sJpQ/FWb5qC3x/izhzIRpJjMmQOAelxXrlh0IZQWGnYl7EvZ/WL5oQ5is2+VJRVR1iFRq+rFY0BYSONPrYStZFk8I6EVPAUner5u1xAErITYNxt5k/gQs9BJnDkQ0JqfzE7DqDUHBw62JhFXPzdVPTTZXjEzaO+4V6+NLyjjR7bD2tS327rDuanhqmDVxO5lSEy/tXtFK8y32wJNGXddOBr1xltG2TOEJUjs6pv6NN+aqqmsU6Q1v4A2zAKmtxjSqQmsrnbBsXTEVwgHyqKYpBc4uSrl/v9OV25YnxoBf95KKCRyEsaVy+9rbR72UKjF0ihnlX8wNyqzTEU3OL7xsJ9Q7hjnckRhSTU7xdHiZTntaIGBteHqHrCHDQdvDvZ/2yXittzlAbL9BOsc5INw5/XDU8rzXLrPE9CWwvIbQHXPxSvaa4XrnBJgHrlzKIfaV9TafuLtxpbD2eOl0GOXkkYc/qlANMqnODz7reiaHd7vwwaFqCjq8c6fbAxkLLcg+qfCkyp7mmdaso4GSgYroEgAX5mnh41W3TgrG8xhdtnPA7v/B2fy0YeapR6Wp/M874nkSJh6CXl8plk9+zce/dWB174J/r3ZlnH5zg/9vixHlYjniExaNpBK7ijfEEKnhmdiZadQSwpUL3DXPuR9fClk//99q45U6xkqa7PJEIZLlydxDruHqus7IL7WngKwVYkc7NLdt/V3hyh5h9jd2WawrZYw3oAArB5EtDK1TG5y0qUwtXB/8enuLLl1wvMkoM+iox/bFTCVQk WJF1f9oU UQUkh5qyPjPds8y3e+A/9HP3pf9oqNx8aywYDPQgM9ZAE7+ICF1p1F6614oxw5qOfFsjO4wZq2i3cS87D//IXW/1hneHn6Z8tZVNz9JbZIK9Qotyf5D1uOKEVn0MLWO5BXehcpUlW5xPkUfij7BDMq0r11rsatC9XR+o7ZZ8ZdckDnrIkEa4RjuGump3DQe3FcJacHnPRUJDi40SyHHfX12v2CGze12ICcyLc8tb1erYuPbLX3Ht3ncCDKQQ8AbC311yxPY/aagTl3aAlRPdVMzBgj3WJ3MrLvdmceyGgfNtVMt/lnehkCXcP4NWOGLD1OUfcGnC+UER+if9gLhMFz4KiD42wnM2pT4huVSlzblgkq3lrTxOi8TF/WTO1ZShBqVeO8s4B1QfQWwAaPXqdSA4MoiwFU0vrqyQFU0vVdIQChht5V4BC/JbH9GgZEIMGaLV12U3A1zUlm0g= 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: Hi Ying, Thanks for taking a look! On Tue, Mar 26, 2024 at 01:47:45PM +0800, Huang, Ying wrote: > Johannes Weiner writes: > > +static struct swap_cluster_info *setup_clusters(struct swap_info_struct *p, > > + unsigned char *swap_map) > > +{ > > + unsigned long nr_clusters = DIV_ROUND_UP(p->max, SWAPFILE_CLUSTER); > > + unsigned long col = p->cluster_next / SWAPFILE_CLUSTER % SWAP_CLUSTER_COLS; > > + struct swap_cluster_info *cluster_info; > > + unsigned long i, j, k, idx; > > + int cpu, err = -ENOMEM; > > + > > + cluster_info = kvcalloc(nr_clusters, sizeof(*cluster_info), GFP_KERNEL); > > if (!cluster_info) > > - return nr_extents; > > + goto err; > > + > > + for (i = 0; i < nr_clusters; i++) > > + spin_lock_init(&cluster_info[i].lock); > > > > + p->cluster_next_cpu = alloc_percpu(unsigned int); > > + if (!p->cluster_next_cpu) > > + goto err_free; > > + > > + /* Random start position to help with wear leveling */ > > + for_each_possible_cpu(cpu) > > + per_cpu(*p->cluster_next_cpu, cpu) = > > + get_random_u32_inclusive(1, p->highest_bit); > > + > > + p->percpu_cluster = alloc_percpu(struct percpu_cluster); > > + if (!p->percpu_cluster) > > + goto err_free; > > + > > + for_each_possible_cpu(cpu) { > > + struct percpu_cluster *cluster; > > + > > + cluster = per_cpu_ptr(p->percpu_cluster, cpu); > > + cluster_set_null(&cluster->index); > > + } > > + > > + /* > > + * Mark unusable pages as unavailable. The clusters aren't > > + * marked free yet, so no list operations are involved yet. > > + */ > > + for (i = 0; i < round_up(p->max, SWAPFILE_CLUSTER); i++) > > + if (i >= p->max || swap_map[i] == SWAP_MAP_BAD) > > + inc_cluster_info_page(p, cluster_info, i); > > If p->max is large, it seems better to use an loop like below? > > for (i = 0; i < swap_header->info.nr_badpages; i++) { > /* check i and inc_cluster_info_page() */ > } > > in most cases, swap_header->info.nr_badpages should be much smaller than > p->max. Yes, it's a little crappy. I've tried to not duplicate the smarts from setup_swap_map_and_extents() to avoid bugs if they go out of sync. Consulting the map directly is a bit more robust. Right now it's the badpages, but also the header at map[0], that needs to be marked. But you're right this could be slow with big files. I can send an update and add a comment to keep the functions in sync.