From patchwork Mon May 22 07:09:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 13249898 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 EAB07C7EE23 for ; Mon, 22 May 2023 07:09:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 60266900005; Mon, 22 May 2023 03:09:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 58BB4900002; Mon, 22 May 2023 03:09:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 42993900005; Mon, 22 May 2023 03:09:41 -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 3425F900002 for ; Mon, 22 May 2023 03:09:41 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 02A821A0C98 for ; Mon, 22 May 2023 07:09:40 +0000 (UTC) X-FDA: 80817015762.07.EC23784 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by imf25.hostedemail.com (Postfix) with ESMTP id BC565A0004 for ; Mon, 22 May 2023 07:09:37 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ngMp+7ta; spf=pass (imf25.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684739378; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=AL/AHAqtFJKsPwKJ9HgR1WU6kXa6VgMjAHwiDhHscpI=; b=RFIeiziInRUuroWz+/r+bq8TY7YlgvoQ+uSpsgmf99QQCWPmqcbZKuU7R0nTYKVYuXsLPg Ks1Vq+nFh4tv0t1jxvlt57KyGR//CxoUNuQK/VVYRYgkgfuFLMXEhPZs3wgvjShv9qrsJH D1NqNj1nzS+WHV7qp6netOYyWeA1L/o= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684739378; a=rsa-sha256; cv=none; b=BpxPv1H+JdcPBs5a/N/AGmSuW1MMNIakA0rXYkEVwpg5v5L8pw94+dCPgLwGPsOW9ta6qu WQD81OHADc8pGswrWXo1MArOODX2ZumZPK3YPab2r2NOGyQXQ5DFPkjYEcjCqlVJQrrQtF xgKM0niTQvrjtUNfq3Lo2Cmu8Mx6RSw= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ngMp+7ta; spf=pass (imf25.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684739377; x=1716275377; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=CAvLy4/ErwSMMyC1M2gR5vND9soNKvGVJOF+Oh8rPBI=; b=ngMp+7taahfz2Gj2rdoCaQIiAYJF/B4ezUz51G/nmfzobvFj4mpxdpPs eZ5TuApTdJ2LegBlR+uMzFq9C5X8INSxlC5abwfsPOaDZE+iZE4PKvqcu KRSRgH5Fq6TZAGmEUDXnsbEYZbQZMdXPPUWQ5OtkJpOurOnXxikeJj0jJ 1jIiuUWE5zjrbtTPZfxpqeK3XeiwoB5t0ui34oseEemWRBk73fVz4oGOl sT2W9jquA2IMmAtL98K3euRvX6ODEyKVbQCvGZj2g2zEdUW6x5JQgFubD TqcxPwymoYEXT1MWATYktSGdJdenuenoUfOoFCbVwaG/DbdBTG7tW8uGy w==; X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="337436977" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="337436977" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="773212678" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="773212678" Received: from yhuang6-mobl2.sh.intel.com ([10.238.5.152]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:22 -0700 From: Huang Ying To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Huang Ying , David Hildenbrand , Hugh Dickins , Johannes Weiner , Matthew Wilcox , Michal Hocko , Minchan Kim , Tim Chen , Yang Shi , Yu Zhao Subject: [PATCH -V2 1/5] swap: Remove get/put_swap_device() in __swap_count() Date: Mon, 22 May 2023 15:09:01 +0800 Message-Id: <20230522070905.16773-2-ying.huang@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230522070905.16773-1-ying.huang@intel.com> References: <20230522070905.16773-1-ying.huang@intel.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: BC565A0004 X-Rspam-User: X-Stat-Signature: hy57i3zqtxmj1ynziq9usg97xs9krokb X-Rspamd-Server: rspam03 X-HE-Tag: 1684739377-909223 X-HE-Meta: U2FsdGVkX1/it46SbmOOFoOnsyjmzoT/1Pr6+oqTLKpJ6hCPWoKogGmaeKWLsEwRrlwJAwEGyLgNOjfkVYDd+jrxrb/BFxwncrl4f3f/819iYVo099DJkkJ0c3z7077xaJWAwTwZzX8MDUVvl1VE2QjybWLqxGdKHhVSrFYOVlj0IfTvtEruT9qhC9m3zc4/lLjFpno9taMiqhyHL5LrnVj+O7hIQtmJDigs/waKtcyK728HBz7WQdvjCwLQ5ii5ow8f87LIOWRsGIZjwKpJh9CGL3oVtKUXo2vWQqCU1JgyoQhG4XuYZouCeEP7VwZHfpuXwmtlVMG1Jc8sX5jenh75PpQavSzyRzdur6w4BAapKrzrEMjjh2eDIejGHYWAw5HG00W/RH2sBlj4AUppDgTvn8lFmR0g5GwCj7Tn9LAYgNpKJJYDYf9QDTW9CNazLDFyWvAg/L6QcmFHijOSPtS0qmq5j+2Wa2UJnqQxYdnllP93SO5rdAAa0Mo/Skw6+/P+8prXHELQkj//Il0m8xhaIffTVjA0J8LuCqeAISlYWRGIrQU4Aphn1oQK8Qhn4cjKCBq9phMaO1DwliPjQmsVARkvsPac1pymBN0KCIAdX17Ykkg5Zf33aq2QqCTp3u1xvqxdphtzl+35NniPaRVct5MSwCVMa3VhdMFp7yr8CQxUjL2Z39A1ol/nLAswKRQVeKGo/r76c10H7iz12Lrqbl9JNWoBZFU6GJ5aWGUKRt/rGTVmidQrOMAmaPvSN6eiuRuawpWCilQcDhcjH9D8qoS9W8rNqvDiLtaK8n82yFGAueDuUlyV5xblgUuRbx9tD1wxHXQec7GNt4R1A9QRUk86hxF4wj2v1+dLcjMnfI4KUfL1q+E8vPMEFrMx/OsCE4F/Z0Z8zuzuatOEgr6iqZ4u5a0cATvUBYwt5OQF37f2HykfsTBDShRoqFW4VBLWKdGM5WRTHLIhE8F LgbgAbub kPff9zcWQzTmQ+ULUMOoL8awXFoacF1+w8dTkSog87VgsA/QGYX+WvkFCrwwhv40pOWb8U0ZcZXYTf/50pxGP/UX7fWkoDnrgV2gZxfdoxEx75GxC6NEfSRmDSXxyEKpIL3pSfUOHZaA5j4ibp8X7wMpb8Q9gzjtmTNHJskKRUnLLPDsgSy7g0QYNluBTbiZ30K/iekXVgsvGH61BYFQGiwXD4471X6Ven1Vo/l9pkY3NYnOMNFpNGEHAJ8mgyMdD9tqYImoHJK02CQYzqzJc5V2RdEDIRMtiXYQB5s6il+gm70GY+JPtz9w/TXzTX8CxH87IB7nxyZG/t6e90KwKZ1J2kizlPEH35JBIww4dQQIWaF4I1yx3XPQm3pSHpU3hFdOq0eUCJiwdvqv/uIal9sS3xJYqPJYXQU6wzrNPaTpIf3EmCxovqNJfv8gtSwDKypoDmTWscpcXHCg6AARxBjO6tcLhWtcaHWxoYhBqyTsS2ewq/fTaoINhmmK/25Lg+hU88UQXAl6KGgg= 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: __swap_count() is called in do_swap_page() only, which encloses the call site with get/put_swap_device() already. Signed-off-by: "Huang, Ying" Cc: David Hildenbrand Cc: Hugh Dickins Cc: Johannes Weiner Cc: Matthew Wilcox Cc: Michal Hocko Cc: Minchan Kim Cc: Tim Chen Cc: Yang Shi Cc: Yu Zhao Reviewed-by: David Hildenbrand Reviewed-by: Yosry Ahmed --- mm/swapfile.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 274bbf797480..8419cba9c192 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1432,16 +1432,10 @@ void swapcache_free_entries(swp_entry_t *entries, int n) int __swap_count(swp_entry_t entry) { - struct swap_info_struct *si; + struct swap_info_struct *si = swp_swap_info(entry); pgoff_t offset = swp_offset(entry); - int count = 0; - si = get_swap_device(entry); - if (si) { - count = swap_count(si->swap_map[offset]); - put_swap_device(si); - } - return count; + return swap_count(si->swap_map[offset]); } /* From patchwork Mon May 22 07:09:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 13249899 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 4A6D2C77B73 for ; Mon, 22 May 2023 07:09:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D7A4D900006; Mon, 22 May 2023 03:09:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D52AD900007; Mon, 22 May 2023 03:09:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BF3CC900006; Mon, 22 May 2023 03:09:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id B0695900002 for ; Mon, 22 May 2023 03:09:41 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 8C8631C7C64 for ; Mon, 22 May 2023 07:09:41 +0000 (UTC) X-FDA: 80817015762.29.8DCD4AF Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by imf19.hostedemail.com (Postfix) with ESMTP id 75A041A0010 for ; Mon, 22 May 2023 07:09:39 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="ky/n7CFS"; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf19.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 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=1684739379; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=mmTtbxx0JX7bu5URmyD6CSLsM6RrcyZ7zeLsuHTH/5k=; b=l+2oNX3hoZXl+qgzAkBLMZZCY5IyOvbgMWH8s1R59wlyz4EJoXo5+9bYVvbDva9/LVrm2J QAEEmWKHt6bIKS2OnqtsjllE1rnE2dUNtOJct/vZ9g/1mn9ab8A5XWwj8SN+BpGpYBuTSf tqPscOz/plPccLy5cBbr4EdpUJHKnlc= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="ky/n7CFS"; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf19.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=ying.huang@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684739379; a=rsa-sha256; cv=none; b=ur9mXpctRqVHfPlVvzehv52F6KOcqzHawcaYQnOsQ5KWHagVd+CzEbh9tsv9HI6gNy2p0D A9ji3MvPutXSCnzwYGW6Wh9JhE8n8Hr108LMA56FrNQwKi5iF64c0ZGrqa5mqGAcGqcjiC ZTdg8iVvjVQ9LZSqLYw38eFBLfgS4RY= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684739379; x=1716275379; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=i1WT96efAZrjTV7W7kwHNRkRI/omQzn1KtV16Slt7b8=; b=ky/n7CFSAhdncYKQX33HveqtNNhBePn5lqytXu+jb9HZKvEsed+wqBhD 17O5/tqhU1GmFcPoBj5tvXremdhqB46HVTeWYOrwxquMY5tYYuMwi3rtX CIoY2B+qHuLwe2PsycIHR2uFogSlGuof+h+qeU/xy7gvTjd/V2zoQ+STD L9KSnl/yIqNgjLTNPoiC0sMvhMOYkOxFz4zzxxoaVdooEAZ9JAG+Mwvju YBtv+xHAlpKM6cU4mg30EJ50xmALbfBEF6myhoJPGyqRa5+0opYUO0c9l XX557TP8Xh0vY8TdfypnMQo6CPf/06q4mOzrYr1fk7aco/Uhtd1Xjn7mW g==; X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="337436992" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="337436992" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="773212692" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="773212692" Received: from yhuang6-mobl2.sh.intel.com ([10.238.5.152]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:25 -0700 From: Huang Ying To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Huang Ying , David Hildenbrand , Hugh Dickins , Johannes Weiner , Matthew Wilcox , Michal Hocko , Minchan Kim , Tim Chen , Yang Shi , Yu Zhao Subject: [PATCH -V2 2/5] swap, __read_swap_cache_async(): enlarge get/put_swap_device protection range Date: Mon, 22 May 2023 15:09:02 +0800 Message-Id: <20230522070905.16773-3-ying.huang@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230522070905.16773-1-ying.huang@intel.com> References: <20230522070905.16773-1-ying.huang@intel.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 75A041A0010 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: upenp5mpt3ygr3mkwuszzyoao88m8s8b X-HE-Tag: 1684739379-339889 X-HE-Meta: U2FsdGVkX1+bJDqGKG7D/juixyoeaXJcf9O6WXl4p1z2QB1zJira6/H/bQLiqJwwps2pIYSY0wGu5VeGZ7RIwCqBdkYNApUEmL5EnYDcihgfobinYuYzPhkra2Gpqp055mvBuvR2FGeYpulHsiMx1WllGIHdI802IAuku4jgkvQsK5hbCAxtTevfKESMBwHoJLRGgNHmhCBWbckxWnI0JbLZs6Myf+5CoKpKGKeZfYfmx2uU8Q5cjb18PxBYjtXB0efkmuBGOItFdis34yCOgAPheqKA3aTYRwGUqVpLbkVus6PPmOL7X9Wbw08blDJol62pyo1bxFohl2Kq5JkO96PYQ8PP2nVfolByzHlv2t2O4pwyibJ8VW2g6JWCQ0Ku42y9Rnu9LYpm6JslXm/rKukSERxHH0aKAlhxAUuFyJDvjRA3mWvio0uTYqbp9G8OrpXTlzlKEvbQiCh4byiGSp9X1X1k4ZGquNljO+3mQMjmTJD8y9eQ/y1ntJY/mxCzfyn3R155S8ZB2C6HEwiEKGyQfrIJDeMgBaacXc3dWnZV5+oTn/SM//9rbulFpgouilVc7dndruffMqZob0u57vsh8YhtYDPmd0EyjCuMjATB/u6UkEIPIvP0EeOivCFCnn7tu3X+m2SxtSaWzHmfkbDPtB81jKfVQo+XDOK2mZGmEeFPvcj8F9FdOzCgArGg0Yzbl4MQg7fPfaoO7d9md9eeB77xUsbTPk1+1PD3RNL7zAaBdzo5w3D9wm0c9/batqD+rZYbnH3INCNeBhJTBTrk5j+3eGmgsQkaowfUysKgkc5ZToKkB2U7F7XgOgSrlhpsxpAmEtWARGrXzx0JOG93AbiS+fxB8kPCCoKEkT9Wa8pDNnCj4qigCuJSkuagLkUU5LpzJKc5Cx3kRtyTwazKUexz8+aj96ZUSECgYzPPO5wdu1alhwH6h/L4/DemYvSVQ+ExsecWqKR87dE skyERPg5 K+MTY/pCL7rNk9gvY/L9+yM4dzuQyKbDTgAj9aOt77lD2rnOAH98j/zHbMARExesySYH8FyYIFpVV/5akcGxWGzlAVqOWk6ITvKBeH88VrOngHVHv7Pdq0+UQiobSnUbxACds5D78pu4tm+eAr8PneooVsVGUrJ+gV1lVPl6U1h2evKYBSkHC1cjDeEYRv9rnZjp/rzKRSX4mbySMfvPXhQh9ymYZhFPU4TmesaqCTN/KzVlAtFZe1onaHJyFrUjFje+A6TlOQkf3PfGPnJEYc1anzz6rqG0EI25N3EjVWCb9dOX2Jt1EQlymu9KWQx5Ekq+Awy9YAGxwzK2LN8CifwfiryKRz9hyikxrsKm21mum1QvjcvmduNJxtke8HZKIEsKpyl9kSrqUVSDtzl+gFZTBKdevEDJsjjFBr/xxEZmY9mjA3b1/hLypc9GLHJ9onIG3S7edgNrZclivWKErsVVwqMzRr6zLqOewpd1fiQqieOSGqgj8mxceCI5L1enFxthkMcGfy99WvCY= 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: This makes the function a little easier to be understood because we don't need to consider swapoff. And this makes it possible to remove get/put_swap_device() calling in some functions called by __read_swap_cache_async(). Signed-off-by: "Huang, Ying" Cc: David Hildenbrand Cc: Hugh Dickins Cc: Johannes Weiner Cc: Matthew Wilcox Cc: Michal Hocko Cc: Minchan Kim Cc: Tim Chen Cc: Yang Shi Cc: Yu Zhao --- mm/swap_state.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/mm/swap_state.c b/mm/swap_state.c index b76a65ac28b3..a1028fe7214e 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -417,9 +417,13 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, { struct swap_info_struct *si; struct folio *folio; + struct page *page; void *shadow = NULL; *new_page_allocated = false; + si = get_swap_device(entry); + if (!si) + return NULL; for (;;) { int err; @@ -428,14 +432,12 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, * called after swap_cache_get_folio() failed, re-calling * that would confuse statistics. */ - si = get_swap_device(entry); - if (!si) - return NULL; folio = filemap_get_folio(swap_address_space(entry), swp_offset(entry)); - put_swap_device(si); - if (!IS_ERR(folio)) - return folio_file_page(folio, swp_offset(entry)); + if (!IS_ERR(folio)) { + page = folio_file_page(folio, swp_offset(entry)); + goto got_page; + } /* * Just skip read ahead for unused swap slot. @@ -445,8 +447,8 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, * as SWAP_HAS_CACHE. That's done in later part of code or * else swap_off will be aborted if we return NULL. */ - if (!__swp_swapcount(entry) && swap_slot_cache_enabled) - return NULL; + if (!swap_swapcount(si, entry) && swap_slot_cache_enabled) + goto fail; /* * Get a new page to read into from swap. Allocate it now, @@ -455,7 +457,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, */ folio = vma_alloc_folio(gfp_mask, 0, vma, addr, false); if (!folio) - return NULL; + goto fail; /* * Swap entry may have been freed since our caller observed it. @@ -466,7 +468,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, folio_put(folio); if (err != -EEXIST) - return NULL; + goto fail; /* * We might race against __delete_from_swap_cache(), and @@ -500,12 +502,17 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, /* Caller will initiate read into locked folio */ folio_add_lru(folio); *new_page_allocated = true; - return &folio->page; + page = &folio->page; +got_page: + put_swap_device(si); + return page; fail_unlock: put_swap_folio(folio, entry); folio_unlock(folio); folio_put(folio); +fail: + put_swap_device(si); return NULL; } @@ -514,6 +521,10 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, * and reading the disk if it is not already cached. * A failure return means that either the page allocation failed or that * the swap entry is no longer in use. + * + * get/put_swap_device() aren't needed to call this function, because + * __read_swap_cache_async() call them and swap_readpage() holds the + * swap cache folio lock. */ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct vm_area_struct *vma, From patchwork Mon May 22 07:09:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 13249900 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 CD847C77B75 for ; Mon, 22 May 2023 07:09:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 27ECB900007; Mon, 22 May 2023 03:09:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 230DF900002; Mon, 22 May 2023 03:09:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 03D93900008; Mon, 22 May 2023 03:09:41 -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 C9CEE900002 for ; Mon, 22 May 2023 03:09:41 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 9C06FC0C43 for ; Mon, 22 May 2023 07:09:41 +0000 (UTC) X-FDA: 80817015762.30.3C915AA Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by imf27.hostedemail.com (Postfix) with ESMTP id 86E8140007 for ; Mon, 22 May 2023 07:09:39 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=gr+Oscns; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf27.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 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=1684739379; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=j3s2hbcFbRPF0j1Q7iTE/aGqXvtHfLbmjAyrk5TfK5A=; b=mWk9tNsGkGMkL1iqYQhAEv3DZN1zh+Y+IhgflZGpur5sumypLuSbhs68Um/vK8/d1ZpBDg v6qRquZBdr7dLLEeZlKzQW75ekINCSfrOaLQ+koI8TL8dXkrfchJZ77p9ssxdD5MJIAWjx oA3HNy67tdDZvxYWWxAlb8buWZkjtrk= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=gr+Oscns; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf27.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=ying.huang@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684739379; a=rsa-sha256; cv=none; b=UW7w2QAc01XrR8QrxgvBKnlmpPKsyaNuoqYIS0zBgmQlAwd9xIyvSxswd1nGIqMSilmqLc RJ/OhF6lU7gfMQZn0I1KR9Rwxon9lNai1XrycvPcJrmM3BT9YOQIddVtnvk4W0yj8OhVy+ JYv4YjwmTKY+pUjzHON9QpO83gpmRrU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684739379; x=1716275379; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Gm3LH1lmJVZ4Ay531OQCa0nV/AljYlwBGJj9BjRnG/w=; b=gr+Oscnsv/PJKvBvb2TAxxeIiv1sPV4MlNgnVlj5+VyAK1HpjckOV9UL NjVGsU9s1mx2nUwzjYp+TXcJMEPjyKibSNEw424bh85oFx5tOlAfykk60 xK4GjnSY0Q/GoyJHlivwFHY9HF2idHL4rZxNk60sjWjWqqphKil5th/8P EPddKRIV6Pw3UP/V1MIm5dFOv6I2HbUI0QH1V2QcU7nOCo6AobQE0pb4h vr3RDb9t9fd9oSsk1REjS13Vths379/jIBxBGwthX/Mmp/8kUDZLhmomw wjcVDgloa7iMYwQZayrzj/iqE+8mykWe0u9oKMQf59WpbcCsshz/70F1B g==; X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="337437020" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="337437020" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="773212698" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="773212698" Received: from yhuang6-mobl2.sh.intel.com ([10.238.5.152]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:28 -0700 From: Huang Ying To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Huang Ying , David Hildenbrand , Hugh Dickins , Johannes Weiner , Matthew Wilcox , Michal Hocko , Minchan Kim , Tim Chen , Yang Shi , Yu Zhao Subject: [PATCH -V2 3/5] swap: remove __swp_swapcount() Date: Mon, 22 May 2023 15:09:03 +0800 Message-Id: <20230522070905.16773-4-ying.huang@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230522070905.16773-1-ying.huang@intel.com> References: <20230522070905.16773-1-ying.huang@intel.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 86E8140007 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 5jrnf7i3nrt1y9b1s4o86y5opxrmxb6j X-HE-Tag: 1684739379-84634 X-HE-Meta: U2FsdGVkX18x1s6NaaI/a4hyWCxus10Jrz1TXIVPtm6puR3Z8jo31BuLH9OKS1q7t8hfSZZ3bVKGMuAH6N8jAxi3sMpYmtUqEmF91Qj3l6sCzzouYonZidwoDs4n8PEaLUrNYr2pMgrmKPdPkFj/29S21zjDiujQmGy081erK5myTPzdQomzGDkuyl2uvmDoPl48sobhut4qXMvLcBDUGmsr3/XM7+++Ct5CDbR8fNaXUBZAaWup0WrrWQXt7UEGIfJiA5Ns55JuZwx7c/NWv4tUG4LxYMqQkKJ2TAKuiJlYj3BTxLf1QUI16FooNbnaO40mrXdYwaVesEI1afDJVcVn0NaMSTveVUgeJ7AcGUhlNT/o7Wc2amCWNtlDt+V3856tIl3Mt3LGVDm0x8SzSXflXBVFW1YbZA1Hy6q+t+UI8sPwr6RVgCxhLbLW8FrIxNPOhdNgMW/uy9gx/Pbw1En4GeGFNZIPUkfAXYb/F8u3jUnF5mUWZ0Ipj1c2gBd7ZPG3GX0uU2nG0hlcMXd7jPeHUavEjBCMY9zi3Dm4Qxs9ww6+lrLA6HkKDI21xsUzTwiTmuBl5kvj2YFaMAcxyfLwkKHvnUu/sH3dJ/wFKhIQCFOPAlMEdgdP64SwTO0hdgSSwjK+ZEXtDzDeijBWAEVFLGNHDjafzWynAJErmbiou4k3V2DxZmiqdmHqNIWPLaDBsE3R3a2dsngw/7DBSWv5rkF17cQaHMoZqhV//bvXxUNlc5MkMEDr84fuVL5RMU0yNBlgwbsRJo7FneMHHIjWuxshEDt9KbK8jIIFrbBkKeE4+gr7kDY0vN1fP/rD+Z+NUuZVnGJQRtkTEMJNNwboVH0J7eNN+R552UkUvWDGwmcEk9lm5nYLTyNsTqv5+A+PdgeZ4C3zQekYAJmgNF+z4/Rcen3xTP8YmZOEUeZ7wYXRzmwUaRPYgBLswxiopd3FWIwo20fKO6/1h3C GURUJWdU e22AO7LgvAxzu0U31rruSazsNEff/Uz4f7yCtE8fAHuzcwQ6JpDzIEWneqmjl/3L/p9CuFrevQUu/wnZi/WUpwVWQVyzQsZ7d2rowSSsaYEiiDS7E2lc4BZkTTzCnZ0qae9umzQJ2PaPP4yfONvRB9HsrS/uejBmcisJyg8EAv8s91ms0DTnuGAAXiDSTbBKQxqz7nid33a2pAtvDZIvUhEj0HpLmse1cvEsWnZwSvzFukVPUe36uvrVTqAAI3GAsg49puvOyCwRJkHe4VVZGb9R7uuUlehaC0G+17hAkT40pPdsh7wxYNK9p286iAuXqNvnwOQeM7AUE1M/VyDsA7Pc8WubyhgQzGAcxA2l+2vCyYPQ9dWioG9BRpGeGRUbzwW2VNfs3wbXpWsGJgZ0J/eZW4lEHaBF3VMvUl4be3SRnZXP/c00Nj6ALWtK0ZXZHvwRXbmaKj2BqpXzugYbOoPbYJmWVkFIIaqKN1exanj6P3J85Q7iY/XS6Ug3ZrN5O1Brn/HtbmCiV3fY= 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: __swp_swapcount() just encloses the calling to swap_swapcount() with get/put_swap_device(). It is called in __read_swap_cache_async() only, which encloses the calling with get/put_swap_device() already. So, __read_swap_cache_async() can call swap_swapcount() directly. Signed-off-by: "Huang, Ying" Cc: David Hildenbrand Cc: Hugh Dickins Cc: Johannes Weiner Cc: Matthew Wilcox Cc: Michal Hocko Cc: Minchan Kim Cc: Tim Chen Cc: Yang Shi Cc: Yu Zhao --- include/linux/swap.h | 4 ++-- mm/swapfile.c | 20 +------------------- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/include/linux/swap.h b/include/linux/swap.h index 3c69cb653cb9..f6bd51aa05ea 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -512,7 +512,7 @@ int find_first_swap(dev_t *device); extern unsigned int count_swap_pages(int, int); extern sector_t swapdev_block(int, pgoff_t); extern int __swap_count(swp_entry_t entry); -extern int __swp_swapcount(swp_entry_t entry); +extern int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry); extern int swp_swapcount(swp_entry_t entry); extern struct swap_info_struct *page_swap_info(struct page *); extern struct swap_info_struct *swp_swap_info(swp_entry_t entry); @@ -590,7 +590,7 @@ static inline int __swap_count(swp_entry_t entry) return 0; } -static inline int __swp_swapcount(swp_entry_t entry) +static inline int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry) { return 0; } diff --git a/mm/swapfile.c b/mm/swapfile.c index 8419cba9c192..e9cce775fb25 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1443,7 +1443,7 @@ int __swap_count(swp_entry_t entry) * This does not give an exact answer when swap count is continued, * but does include the high COUNT_CONTINUED flag to allow for that. */ -static int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry) +int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry) { pgoff_t offset = swp_offset(entry); struct swap_cluster_info *ci; @@ -1455,24 +1455,6 @@ static int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry) return count; } -/* - * How many references to @entry are currently swapped out? - * This does not give an exact answer when swap count is continued, - * but does include the high COUNT_CONTINUED flag to allow for that. - */ -int __swp_swapcount(swp_entry_t entry) -{ - int count = 0; - struct swap_info_struct *si; - - si = get_swap_device(entry); - if (si) { - count = swap_swapcount(si, entry); - put_swap_device(si); - } - return count; -} - /* * How many references to @entry are currently swapped out? * This considers COUNT_CONTINUED so it returns exact answer. From patchwork Mon May 22 07:09:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 13249901 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 72E3EC7EE23 for ; Mon, 22 May 2023 07:09:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5B278900008; Mon, 22 May 2023 03:09:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 56472900002; Mon, 22 May 2023 03:09:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 36714900008; Mon, 22 May 2023 03:09:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 25998900002 for ; Mon, 22 May 2023 03:09:43 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id EE0F14078E for ; Mon, 22 May 2023 07:09:42 +0000 (UTC) X-FDA: 80817015804.21.019AA88 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by imf25.hostedemail.com (Postfix) with ESMTP id EDD58A000D for ; Mon, 22 May 2023 07:09:40 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=SNsypHif; spf=pass (imf25.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684739381; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=sjCFICrNEpFD8ElUYu8UV6KGjbGawES3QAvpursbOxw=; b=EoMJBvAJ5jFTrH4JtbtUPhK6TpZU/N3UkfZNjnwBZdeg77TJc/YVPXIedgRfLcSEuP7sM5 rjYRvvUOdTaqYMN5oc8OM1a9LNcWQz44wzsZ7B40w129/SDdBL7KZ5724iBODjpGyxl7W8 2TckMGJSNVSCeAeE8lT1MxA7JH+dBlI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684739381; a=rsa-sha256; cv=none; b=ORWo82sUU4b+Nn5x3sfaQkOjASOr8SNRRAa52wYdjlRla6W9O2bBEh/7uhlxMQBvPyitw5 cssqkMFSjOmKmzndyaYMMkT4oQ731nopVBzs3kTvp5cANMkz2P5OWNBDmMyAE/UPpn048X Q0RcVlgEX6aGvpcjw4G0O9XfdCoMGJY= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=SNsypHif; spf=pass (imf25.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684739381; x=1716275381; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=YSumEPT2C3HRRYpGGamb3AFAC7MiJLIPce/70xDMyEY=; b=SNsypHifbFMgMlBEQ8+4CceJoFnh2kmeI+HwHzjlTBtGHm3vB+DigMxZ XOfDi6GltJu+dYz1xgc66qWlbGT/e0ljwVfGkZkRBqgOWavMZnPAe7iKO YiLHdsCuvHglghKfF43vC3Ef7hGJPAE/Dh8QHjKVw6yA0DMsG2sWQ60Cl r8nt8HeQPxbD0fy1oTPwMxzMq542uZ1jJqu6JPHycvvC6pU3CZi2v5z2l vdRvM9EfE3TKLiJdUHmAfA2Ou/P1Bf2l/zEAXblQ4hAm7watAX5cHjRfa /piQ56/HTGDzQvg+5wt9hMliviKcHliQbWdrFAfdYwMcC3/PpnWTUPSJu w==; X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="337437040" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="337437040" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="773212723" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="773212723" Received: from yhuang6-mobl2.sh.intel.com ([10.238.5.152]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:31 -0700 From: Huang Ying To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Huang Ying , David Hildenbrand , Hugh Dickins , Johannes Weiner , Matthew Wilcox , Michal Hocko , Minchan Kim , Tim Chen , Yang Shi , Yu Zhao Subject: [PATCH -V2 4/5] swap: remove get/put_swap_device() in __swap_duplicate() Date: Mon, 22 May 2023 15:09:04 +0800 Message-Id: <20230522070905.16773-5-ying.huang@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230522070905.16773-1-ying.huang@intel.com> References: <20230522070905.16773-1-ying.huang@intel.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: EDD58A000D X-Rspam-User: X-Stat-Signature: hb5mubkg17ummtq4tfeabrhgd1yayu8z X-Rspamd-Server: rspam03 X-HE-Tag: 1684739380-434839 X-HE-Meta: U2FsdGVkX1/KXLYu8dePzOJOkTh03y4KYytJvwBWDpTMBvSI868RrWWDQ8o//bRsmu7Qul7Yze9Awitojq4dcOGiPlOKdPqiVQfRPF+k0IO+sseAk1pBny2d6u6T4/PcaS8OPdwbZlfM+x9CHcFpRO2kLD5PrH+Nk0kalfB4M5OG5bRZP9TgExtEVXYNxMHKePfcLA4Ep/XOfQKr7zJQ4mI0KmTGFMhTw3yvxqR3rZPPXAeDQntZo5UCHHUEMKLd1mBbBDhh4S9+avs+f11GUbBQLGkZr1p6SfDL99T01X7uu7o94WcOnF09ulPkhivsUGwAPDEqQQTZV+wamb48GAE/rR8K1fwWW9ywHpRf3GkrIc78hwk/5973BqlsB6cH0wqqHtLHQxsiiWDvI/++Jsy2kzPqAcSxVXYa8qvl/U6VgSWojQbs977Y0Wz09PjoCfG5pV+agas38He66opV/uKnq9wJtKod+/plBxTa++stu0M6385CJsP3rY2eKNQfQg/yGdsPVbF2Ii5aL62U6IZGcJ5XL4/tuHZxGyMSUVYmgeRcq+JpTrF6M38TP9Dd9qyfgB6EhYHwIWXvfGMkmLa+X6dgV3bijCs5ieje7CuworvjolLV3+1yhREZDFZ+0bmJ7OotL2amG9WsldqDkqUD8mQUyjSRZ6Ojtqea7lilw8+68tPdYRCwlAiYTXSocAlZ3AZCx6qOCFXDAzfLY6SH+6/frcngRl+DY7zRr6+krBRKRPt5SNJfz3Sdrovqh5+EvT1tuiPYuacOXSqvwqi2Us/73NQKfEiOGGHo7j62+Moa011pCD77tiX59XbdV0f0p5rwGMzWwYDy6Rf1b/8thRtVSE2b2vJyCYFdvS1j3msJLcib4VUewA9QhUx9A6dwyrBWG3k7Ta8dFkGQvBwCAR0hEo4fbGpPImvE8LBcsPBNs1PsNDpX6hoxl/IssiKdZSaF4HGQFWOlZ44 zounMD+E h/YF2FktUCiHMADwwOAQfhBPClFHKDTXOmv4eEI0fsQa5eEe+sUsgEQ/rW4WIIY3ej2dO4vx/hJpynjNUIjXCRRv1KtLWCIhFyDIBDHkjxAK0X0y4eqVXp2jTGE08XeE8U2avbvRd95P4IYxlCbUESeuDdTYKvQ8/sZjGw+TfkNXvFRGOgAYXGndLzKxcoM8mjAhvLGMLZH1ehBB6k1kxyji7jNHbxIvyaZfsTKfaQ8KXijJ7N6SCRv+Y/ZY67MV2X9Rj3EHFdcnkk88HlHDrfDdIzrqAEMZBoe3EfqCaxxpJNfXdyN0hI1MInaTMwXiOWakfHpX1gbrTlJ2GaA9QeVuMxluk0d9+k+1nbAQGx3fgV08SOX3LTtBbeVhtZiSMHRvr8D7Dl3Q3H29rk4BIR8yi+sOfVuDcKhnR7xOygFUcS7luvXmoEvoBkghQcV4cCefSgWVuJIi/O5y1dkeQaSv4jctPN/WmfgSIHEdLYaH8Qsr9Cv4blTL0xWJYN3lnYU2SrZ2dDxhPFLk= 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: __swap_duplicate() is called by - swap_shmem_alloc(): the page lock of the swap cache is held. - copy_nonpresent_pte() -> swap_duplicate() and try_to_unmap_one() -> swap_duplicate(): the page table lock is held. - __read_swap_cache_async() -> swapcache_prepare(): enclosed with get/put_swap_device() in __read_swap_cache_async() already. So, it's safe to remove get/put_swap_device() in __swap_duplicate(). Signed-off-by: "Huang, Ying" Cc: David Hildenbrand Cc: Hugh Dickins Cc: Johannes Weiner Cc: Matthew Wilcox Cc: Michal Hocko Cc: Minchan Kim Cc: Tim Chen Cc: Yang Shi Cc: Yu Zhao Reviewed-by: Yosry Ahmed --- mm/swapfile.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index e9cce775fb25..4dbaea64635d 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -3264,9 +3264,7 @@ static int __swap_duplicate(swp_entry_t entry, unsigned char usage) unsigned char has_cache; int err; - p = get_swap_device(entry); - if (!p) - return -EINVAL; + p = swp_swap_info(entry); offset = swp_offset(entry); ci = lock_cluster_or_swap_info(p, offset); @@ -3313,7 +3311,6 @@ static int __swap_duplicate(swp_entry_t entry, unsigned char usage) unlock_out: unlock_cluster_or_swap_info(p, ci); - put_swap_device(p); return err; } From patchwork Mon May 22 07:09:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 13249902 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 C89E0C77B73 for ; Mon, 22 May 2023 07:09:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 319FF900009; Mon, 22 May 2023 03:09:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2CC1C900002; Mon, 22 May 2023 03:09:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1924C900009; Mon, 22 May 2023 03:09:44 -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 075BF900002 for ; Mon, 22 May 2023 03:09:44 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id C39E780C5D for ; Mon, 22 May 2023 07:09:43 +0000 (UTC) X-FDA: 80817015846.14.7A6DC69 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by imf19.hostedemail.com (Postfix) with ESMTP id A3AE41A0010 for ; Mon, 22 May 2023 07:09:41 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=DqxZboZR; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf19.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 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=1684739381; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=783Bty5BOC1F0ZcikWUj9ZBiF3bJgnEki1bFOjoWQOc=; b=M4twr+s4O4HH1p8vVl8JefFjxsArT9y66jEhKAmb6LMR/1ODwdWJJOns5SzicY0g3mnO8O bUVxtXDbAututW2LxWjoKBXiCwWU8UW0drI87BRjEWIPutUpUWmO0S3dFOSAjcpwfssgxA tVCEF+WRgNUElgw6SoX90TS3zVRyXc8= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=DqxZboZR; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf19.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=ying.huang@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684739381; a=rsa-sha256; cv=none; b=h7SP+JikbgrPNBkVSXi18fxB9/8uzMLCa5eqk9CvxI3IhJFY7BbR+dbJd0/PGndLb53yIc abhf7CsjbFKx/Kd1lpVKkQUgdbMlIV6aEQwF8B66101pQgADUQ3KBLqIAmKxQULRMhqMbK YDOa4NpbETOqetUoUKSjKHkKnRGO3vY= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684739381; x=1716275381; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pFsVEqpuPiRv19w/rqm+IY358s8W3zh5r+eFbJEC2g0=; b=DqxZboZRSjsMzFAjFX46t10GrQaUyFtDX8QN4xQb3/hAohwfsLHQ50pa +vG3VQHj0HR/mTwAZy7tUkITc8jgQdNbkKUuLQv9Nhz1m04anrZMrRzWV /xajBYXgRkLmxm+LoGwbIU7KsVPcsmcxv0WDNY7F9S4kylqa07byliTJ1 uMfh3QjDBR8buQ8l8rjO5mux67Q+Q2q96HINQKTE8Xuc85hYgknYDwtu2 F8qsNAXrtkwT3RWsdazV0jEfkU6Bcx7WcdWnxznha6XgyBLQ0PjAoaQwy visertsmO5/VoEgslmLQFK1ZgK/4Ye0gf7zEQjTK9iZvZJJ7DdXn7poWi Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="337437064" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="337437064" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="773212746" X-IronPort-AV: E=Sophos;i="6.00,183,1681196400"; d="scan'208";a="773212746" Received: from yhuang6-mobl2.sh.intel.com ([10.238.5.152]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 00:09:34 -0700 From: Huang Ying To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Huang Ying , David Hildenbrand , Hugh Dickins , Johannes Weiner , Matthew Wilcox , Michal Hocko , Minchan Kim , Tim Chen , Yang Shi , Yu Zhao Subject: [PATCH -V2 5/5] swap: comments get_swap_device() with usage rule Date: Mon, 22 May 2023 15:09:05 +0800 Message-Id: <20230522070905.16773-6-ying.huang@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230522070905.16773-1-ying.huang@intel.com> References: <20230522070905.16773-1-ying.huang@intel.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: A3AE41A0010 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: jripa6cx4tz7kpa4gowbubkzr5n7y7bp X-HE-Tag: 1684739381-311139 X-HE-Meta: U2FsdGVkX1+RnrfWAwdTcmVopNdZ3TYk13HTyhlbFqvnMvikfX/sl0c3cWXzDO94UZiaquGnlgpMLS4bVMRTzVDD+NTy6avOQe7iCIkG54qsqmBo7bkCJKUiwu+q98v8q5tLrcTc5bnj60qc8A94D6/w9VXf1FQmpQZ7faxQYrOorTE6j5oP4e17aHm8oE42T46blL6PZG9OYrOaklrP9Vpmd7NdO85DjxMOZF0nChv3J5tDSoCo7ta3TOct1TzSmRhNA4OStqiFiqO+VfELDS6uIBRT7EvBd/CgVGnf3Yv1F/PlZaKw5R0tQrvmQ2Jq4Tw8S/WH8V3KsClsOgRhtpNILOMDZRjwYiE4AebIN/wrcQbs0LYbLtUl2VIl/H2JDwOGZxlyspZ02t50ylqscG/qRe07PQldewgXE1Oz5InfBORcXNZoSeEvMHhy1fYejXE08DWarX2xCPqlG6aRJjj8XfGyyOKkSG4Q9wmO6D2jWUFnPJ90BEabxmApK7L5rzMoCNC85n5RUWMz0JWyLJTCHKAxG2sgXqDaCm7RmVFkgNfIXY3j8VBFUNrHeHtv6EcGnR5heT9EbZpRRly+ksfijb51wwOOLFpLI4vAkVBH4UqlXMhLz30tLv2lNGkEZkjxGDTY+wIrPa5lEM1qOaBQgRPUtilWTmy/ygEjD/yir61kmTm2g5VkOmD8KhzlJDFZm8k0v30qaSgTxqOW9XD34d5nZ7edhk9ZWlE3mTqPI/2abqKdB0hvLLx7nTf9b7GZ1sFuLtSIyY6SIz5YivoZ3IKNliX3gzs1TJg06UR1FmTxv68TZvb49bnTcBoTQAyuLxEmr7/KUf/16vx4wbc1I+WQjasxOeiRtjbW3mitpf9Y9bKq3g00MjRRAbpvZ5ax5ydaDnTbQQvHA47ttsqYKmPPOJCcOx80kyQ0LXNiD8V0jTV/3tgF2CCkEqSoe7V2n65lzybbLnpq9dl CsUZd1gs 5vF115SUJAWPXMWKGN+5yGCud5dj7FrZJprqlutTgjjqJ4OJa3B8MOYAbTMFEURc5mzOya139SkTo+QN1EMyASqF5j6rpjlkkqvH6i4Xc9WXT0RMArTz067z04Yro06LyYG6NYg2kpaNyeYHNoqrpP+JJ38pESKMfjcKYwMY3gGMwP3kQPDptfDfHktjSZRh58RPtP4wCUFnKPN63GmRQKCS+UgoEWnD+K3QxYgqFbNTLVV+9HD8aq+idHyasOW5ZMfW+m2rUwkaKq1LDlDb7CrBfA+oPoI5JLhdeCexy6/lQLMrgYs+IK9UduvItmgYsUYbYYruhnEs3/c0E9eAb/dyVu73SNRmkGfxj7+uxo6H9otIU3yka3NUY6lZLuh9sJK5r3vXZPSBjWx1tWsKgTRcI7xrnwbRdCoEaXxn3cIkrzhIzXMuZkPEw8V7UML7r08Ru7YCW0fbJWzuo+Nrb2zE8Ld7ZPeW78GnPAz63/zHYdaI2PQ4c63uJxDXy3VZt7YA3+va3nmBupBI= 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: The general rule to use a swap entry is as follows. When we get a swap entry, if there isn't some other way to prevent swapoff, such as page lock for swap cache, page table lock, etc., the swap entry may become invalid because of swapoff. Then, we need to enclose all swap related functions with get_swap_device() and put_swap_device(), unless the swap functions call get/put_swap_device() by themselves. Add the rule as comments of get_swap_device(). Signed-off-by: "Huang, Ying" Cc: David Hildenbrand Cc: Hugh Dickins Cc: Johannes Weiner Cc: Matthew Wilcox Cc: Michal Hocko Cc: Minchan Kim Cc: Tim Chen Cc: Yang Shi Cc: Yu Zhao Reviewed-by: David Hildenbrand Reviewed-by: Yosry Ahmed --- mm/swapfile.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 4dbaea64635d..0c1cb935b2eb 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1219,6 +1219,13 @@ static unsigned char __swap_entry_free_locked(struct swap_info_struct *p, } /* + * When we get a swap entry, if there isn't some other way to prevent + * swapoff, such as page lock for swap cache, page table lock, etc., + * the swap entry may become invalid because of swapoff. Then, we + * need to enclose all swap related functions with get_swap_device() + * and put_swap_device(), unless the swap functions call + * get/put_swap_device() by themselves. + * * Check whether swap entry is valid in the swap device. If so, * return pointer to swap_info_struct, and keep the swap entry valid * via preventing the swap device from being swapoff, until @@ -1227,9 +1234,8 @@ static unsigned char __swap_entry_free_locked(struct swap_info_struct *p, * Notice that swapoff or swapoff+swapon can still happen before the * percpu_ref_tryget_live() in get_swap_device() or after the * percpu_ref_put() in put_swap_device() if there isn't any other way - * to prevent swapoff, such as page lock, page table lock, etc. The - * caller must be prepared for that. For example, the following - * situation is possible. + * to prevent swapoff. The caller must be prepared for that. For + * example, the following situation is possible. * * CPU1 CPU2 * do_swap_page()