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 2A3F0C54E67 for ; Tue, 26 Mar 2024 05:49:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4ECA56B007B; Tue, 26 Mar 2024 01:49:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 49CD26B0082; Tue, 26 Mar 2024 01:49:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 363A76B0083; Tue, 26 Mar 2024 01:49:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 2335F6B007B for ; Tue, 26 Mar 2024 01:49:47 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id D8C81C066B for ; Tue, 26 Mar 2024 05:49:46 +0000 (UTC) X-FDA: 81938113572.22.12503EB Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) by imf13.hostedemail.com (Postfix) with ESMTP id CAEAA20016 for ; Tue, 26 Mar 2024 05:49:43 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Ke2pivXM; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf13.hostedemail.com: domain of ying.huang@intel.com designates 192.198.163.14 as permitted sender) smtp.mailfrom=ying.huang@intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1711432185; 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=U94F2/aNshjYEBnzta6NBuPBopsxkPMMFIM1gE3S6pw=; b=KCrDIac/mTnWmf87Es2Yfy26hD9NirDhXN54MaN3LR+niL2CLQ700tYWDF+QPBonvT0oth j4WCs7H5+MBjIBuoYQ3nQAhUbwECIpPuqHMND3JLuaCQyav/e9/xpnMfT0HcqN1hJGebzN iwpprM0oRPt8dIW46oqisgzhEBFIkJQ= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Ke2pivXM; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf13.hostedemail.com: domain of ying.huang@intel.com designates 192.198.163.14 as permitted sender) smtp.mailfrom=ying.huang@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1711432185; a=rsa-sha256; cv=none; b=fZtnXWDQw+n4rRiLh/CuM5p5WxK3TvSS1ImbxXTy0XXvtcZbDP4xcfCJ8di6VcLUtg+LvW qfxx5QRuSnuQEyoucKbyCdyN4iFDcJzMHxnYGMfW4vM6+X0TUazCm26WwkpSMsJNorOrx1 HbZs0yB5kVY2DS9cVZFUXCiD3BP8Cpw= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1711432184; x=1742968184; h=from:to:cc:subject:in-reply-to:references:date: message-id:mime-version; bh=p/gg9KAgQm2GHyb3MW5nLJXzf2/0LAbSene85/boffI=; b=Ke2pivXMpgsXwbofs+yCM9o9BMPbc0eIjsrhW3nbX1eqcoA3z6xHWdbp ZfuUNzGiIMkrazrVoElpy6cVu/srHD0WX+8LKwTi+dAPzsDDZsFA5Wi7j BATCxODeNtpwvh4vmZCAh7Y2PjGQ6iPCHnhu+B2mbci1y7/MCQPuNIpTH SrsPqRptYjq5URRPntEhGLqxSeWcSQI/1M6AJsdOjTTjDQAStkqvM+Klg DQG5T//yqeY8eMIRYrIRl0uY7YuFX2+eCILjPgfyvbud6QNMc+iUoSTpw h42t4xu4ZDwbDZWJkUkhoGFJVzKxltlQNZDnUrWd1FnUFQtk3UpfiHzrD w==; X-IronPort-AV: E=McAfee;i="6600,9927,11024"; a="6676535" X-IronPort-AV: E=Sophos;i="6.07,155,1708416000"; d="scan'208";a="6676535" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 22:49:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,155,1708416000"; d="scan'208";a="16243888" Received: from yhuang6-desk2.sh.intel.com (HELO yhuang6-desk2.ccr.corp.intel.com) ([10.238.208.55]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 22:49:39 -0700 From: "Huang, Ying" To: Johannes Weiner 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 In-Reply-To: <20240322164956.422815-1-hannes@cmpxchg.org> (Johannes Weiner's message of "Fri, 22 Mar 2024 12:42:21 -0400") References: <20240322164956.422815-1-hannes@cmpxchg.org> Date: Tue, 26 Mar 2024 13:47:45 +0800 Message-ID: <87plvho872.fsf@yhuang6-desk2.ccr.corp.intel.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=ascii X-Rspamd-Queue-Id: CAEAA20016 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: bnaf9k48se1se1dfa1f7nkuksqcp6g8b X-HE-Tag: 1711432183-903559 X-HE-Meta: U2FsdGVkX19MM4ELSuLPWDJC1ahWuVZjVc9bBTkjhKKlV5T83XJRnMCDOCDgWzkCijWW0jdyUtEeyGrOibDbAmBad8G2anhlWUYWpWPHP7NVHpPmgMjQWRXsENi/vDT5J/hqrbT81yaK5NJ+wubl4k4BirWramDqE6HuccROzpnhcntjlAJX87sbpK8LLHmOH3w8ykkc9trxLM1x1StflmWGgzJAu8uOuVRdLDGAQz5ZPOFrSdJQsLxCuUYYHa2i9mqWdlgVSkcUguL83uVs1DfhvySYlWhj/Ur6X/xQVy5iNfFUYcRFSJ8nNq1pl6C9DvTurfbAcdIrxcIbpYR1XoHdNoaO8M2HjE2h1UHxsnMRFxns/zFf6k2Qs1WbDfmOV/50rTkArY6wNBYm++ccw6OdcjSBVnEivr6ISIxKsN5ODwGM4emxp2G/+T5K5kDtvyne6Ikzkg5xnXkzLmsmaYm5d34X9AiTEn1EavgYhAbpQ8JwiqJknellBbfTJqGdw3cK87vXS7Ge+GFfDjDyOGp5OI0BO1cjs3eU0rmhKwa1cVMtEpHJbi2JXJfHa46o5EecY8kZKTPkZy50ljFpy4pbYtmQyiCUlFW12jU1M7c2cSRbpFt8p42TPYLPiEohDd+rykQSvfV3Hqjdns3Z08b3c6ANOFB+6NksfjNleKqhNfiiMTE8oSuqY6+h2R18fIPJYGK5dnQPWZRw8HmNZcQ4HYEnfoLlEAGBUPBZcBPpHTqkAAfQjuKDWnoCO6pWSpzB+zdH8EC8UredAf4Fh/aGvZEygu1y4BuXUBieudmCv3jld+fsIl402A+WrPfLIuXtOswg2F/Mws3g2gOX/5czF3ExkcF88PkT5Zia4DYzihc6FwhsxLLhn+7J9uWaoRBuNFYp/g8SnjYI8MpCwMs2PShumXAuvqSIDsumh0sb97Sv3OY3QdiPXxmTw4NYfPzFVTtwU5k4nVDnVC4 9idnVyG0 iEL5E5A08D5cNyANVW38+OmPYx662Z3qzbqGDazcwIDhMp3o/fOqBKbiJtVOWUctRFtIBAn86booMemY0oNbS4FOUfS7NMM7Xb166nYdw0EmiIQyO8NfHLAmDvdsgxHWj/sQOd+MWTzAmZfG5fbWgiQWNS3DanfbrIRLcQ4TbCDc1uhN/8vK3AjR8VDQlpBEjd49tN1Us4Juosbw= 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, Johannes, 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. > + > + cluster_list_init(&p->free_clusters); > + cluster_list_init(&p->discard_clusters); > > /* > * Reduce false cache line sharing between cluster_info and > @@ -2994,7 +3019,13 @@ static int setup_swap_map_and_extents(struct swap_info_struct *p, > idx); > } > } > - return nr_extents; > + > + return cluster_info; > + > +err_free: > + kvfree(cluster_info); > +err: > + return ERR_PTR(err); > } > [snip] -- Best Regards, Huang, Ying