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 7EB1DC282EC for ; Thu, 13 Mar 2025 17:01:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 18EA9280008; Thu, 13 Mar 2025 13:01:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 13FF3280001; Thu, 13 Mar 2025 13:01:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F2247280008; Thu, 13 Mar 2025 13:01:34 -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 D249B280001 for ; Thu, 13 Mar 2025 13:01:34 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 56E59B2446 for ; Thu, 13 Mar 2025 17:01:36 +0000 (UTC) X-FDA: 83217144192.22.B9F9473 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by imf18.hostedemail.com (Postfix) with ESMTP id 814541C0039 for ; Thu, 13 Mar 2025 17:01:33 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="dPT/6p4m"; spf=pass (imf18.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.179 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=1741885293; 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=FKRxUK1y7Id83Wc7nB4qFch4/Nkz0/Hx3e5OqBZUaiQ=; b=hEZrnaVHEj0nwRigDJHRVPUGHS7N0I8B+4n7p1SOH44CnyionhSUFh7Ud01UDGnhAe6ONw YzFTWyf93I4PASZ5lvBxvIJbeejVXsPAqQ0Gp0P6xHIcMXJaIYpoOB5uMX7KzL2iSHyQxw LzngT8timbbKnB9F8HvSubUqCFc3yB0= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="dPT/6p4m"; spf=pass (imf18.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.179 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=1741885293; a=rsa-sha256; cv=none; b=0zb0PVMNi75nS7Q+k3psajY78zpCiZ8S3y7FZEFWRUUyTjVdENabIHV3NBNmrmUNTni/5w EtFRsMKI2BlhBg+r9GuUG7ezRoKSUWRZXU36dXjDh2hL5/+makeQTGRWNtahWzbtmi2Pnv gvla1K3ayuubtghyfsUHq0zdhh+Gv2g= Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-225b5448519so23577095ad.0 for ; Thu, 13 Mar 2025 10:01:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741885291; x=1742490091; 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=FKRxUK1y7Id83Wc7nB4qFch4/Nkz0/Hx3e5OqBZUaiQ=; b=dPT/6p4mWKGpAXD8jG83MwWHEBDcyzYEdk03iOyvPC8C6TArkJfQyRW6gkukBupJdG HXpCq9nV/vqe3kmPXLYfEVvCB2X3fStOnfa5l9DYfOLUXxlrvQ6Gg6LALvTkv8cxLhmt 8m/7QKoTMyM1Wg0pTOmX7DrpAA8W3eFw8spHjnXwLbM5lDdFYAo3DKWQmlkqHHVVuzHM k4/1oE4uKuyT7b4FodiTUkKFLT/CsLpjgmf9ZhMDpMDSZsjTZrL3EYrVmnMeHYiyTPIx Mfkb+g8ssx7NxzeGa3eyljFEf7X6sqIyXwAMe5Fxj8wwrew7FcpqgRY8b3e46hKUaZoa mBYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741885291; x=1742490091; 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=FKRxUK1y7Id83Wc7nB4qFch4/Nkz0/Hx3e5OqBZUaiQ=; b=DR6VIQRhNyK+rragjzb2syt4ttb+5Yk5Lbx0hc1BHr48NhahHzr2Xhma8zi6ksi27U DbTWjgztf9aJTZHzIbjItZacF/aBjl/+7J2X7wPV4VoanjXAoX2eOFtXvxK65WDWDIGN v+sfKTSxow1CqEOq2cvwhTxPiI/tkeXm4cIw/Tpm1EJTs1ty/SXLjx5BHI+mW8+funrn QqfitZSsHLp0f0mEpLuk8EO8pDPMUviPCpWq2Ho6zGSkYh6GRs+lrB+IrAEiYR6wqysn Bqna5TI+DvvO+mgUKAKA/6lHQs29UFQoBhNfPfrFFPKobkWn7spmXMyvudkMng0h6UOK 7N4Q== X-Gm-Message-State: AOJu0Yw/vAXESxhvmnCHpkl1bNHm9myNX0/7QvtQLPlgdgt/ujoZEcn5 kzu5h1y7ZHSG4aqtXq1QShyCgpp9zdmkAwemNmfyVpu0aSSMbcqNW1WK2KDiASU= X-Gm-Gg: ASbGncuss96mjv4N/i2SchFe2s7BT4QNDwbPEEpHWD1KAY5QSEahOYaT8t6Y5FTnS2e PCWAAmrQPZOWn62jRyioLie+rvAov3LIsAvVv98R9huNn/YSrq7KveZLzq3rsAzkHUpHdGENFBR Vcrxarw9tW0E4xoCEkuN51cs20RfT5aXGwcG6/ZaqGXd7aBa6f96oZvjOMUyMUoKSaK/F65I+bs Bkjxkg02u1fiiH3yPx7be4UMXQJIg1NTa0pd82dkv5nmr5YAt4UxShfAC+jnSKmocx+93cDylfc joQ/X7vQsRIfI967OFmPgZZ/slWZl4BEV9cDendhGXPVvl9hRZNl1Rhhgr/lJwkB0sCovpkQXF8 s X-Google-Smtp-Source: AGHT+IE/NjRSkW5y7+0MzcGG6ioih4/hqPl9Wj5CnaKDtJUm8hn8RvTkO7mg55Bhe4Ik+x9Cr+r9SQ== X-Received: by 2002:a17:903:2b0f:b0:223:6657:5001 with SMTP id d9443c01a7336-225dd8b9881mr3214035ad.40.1741885290866; Thu, 13 Mar 2025 10:01:30 -0700 (PDT) Received: from KASONG-MC4.tencent.com ([106.37.123.220]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7371167df0esm1613529b3a.93.2025.03.13.10.01.25 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 13 Mar 2025 10:01:30 -0700 (PDT) From: Kairui Song To: linux-mm@kvack.org Cc: Andrew Morton , Chris Li , Barry Song , Hugh Dickins , Yosry Ahmed , "Huang, Ying" , Baoquan He , Nhat Pham , Johannes Weiner , Baolin Wang , Kalesh Singh , Matthew Wilcox , linux-kernel@vger.kernel.org, Kairui Song Subject: [PATCH v3 3/7] mm, swap: avoid redundant swap device pinning Date: Fri, 14 Mar 2025 00:59:31 +0800 Message-ID: <20250313165935.63303-4-ryncsn@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250313165935.63303-1-ryncsn@gmail.com> References: <20250313165935.63303-1-ryncsn@gmail.com> Reply-To: Kairui Song MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 814541C0039 X-Stat-Signature: 8mc1a49iyd7eic3bbkirpxqiu7w3d6tk X-HE-Tag: 1741885293-592213 X-HE-Meta: U2FsdGVkX1/7axTOpVqHy0qVEnFc/Oe8SEeyp9PI3IZc3z/nUt65qTpmt4M9FFGoc3lgE5+S2d9AqGbRQ23QjmyXCP3L422LJ7fS/rcDZbfn/xoEI3K5tBNuMk4Z+GZkqSZAZ/OVp8ZV5zDxmMhDlOJ0kX9771z7hww9P2x3MibdBYrHiBPNeDSRtS/tcqeq0rsuNgCOcXeVG8i/guLzEJT91gUDWthd9m+EslWEJszlFYvTr44BE9U56zxnPCMEWP4+pQRcVcNcdJhGxStQDzxsKSeswlZf7+8EK6zCWh/bhOYaE6fdElh64/MvMEXn8lfwg/MADnsAwp/QFVQ7kgGcvAqlMZodmsLymjWvULPmeCJ5TckJ1UmZiYI1xOqWItJPduPwdotX5VVmnL5GUkjpY0uoodGOunXohJ5rPaqrB8dN7e9GSYl+4UseNcFY8UGJQGnn4hc+TqW8Lp9kHsdSz2Dfi2yBTDkifBvcEUrcwA5tVrWeQEARP5e6L5JfsEzcmuA3K3qX6JMsLQJjNvZfbnuZanhlF2rll93i82tu8qfE5jaUjd0GCynF5HnMQQpP28nfyuaTLE7vLhiIOP0U6NHPrjuk1SOLup8EJYysX3I9cA+PeaGxt5fVvNkJGgopzGU+Pb6q+w/4aiJtq6q4/WEwjLdKnt91GJVqDzW8OKA3hJS4IJWZiNUFoc96sMyPFwM+n05WJLw5+LOnwvBeYeUpMNkd0oXo7geeDPxzjvL2dLIm5OBpnvUXMFiUdw/37/Uz9ZAyuFn/H/qxVTS9+fhqWuMMwnOp3pJq0VrvvjxOrMp4SNdin7R9rE/4uKq4R1AWxML1KSco3X6Mp7O8nblliHLBu97ywSeSBU3ALLcRqk7WRVPOU9tV5PcspHY0D8xGhWY86DlhBaV9aLCVEEJaX8nbM7ozu0XxoKh/OBQ3LwIPLFA248rsXqV4VWROGsLRgqX2RgI0kLK tnD90Nn1 44w+ICMaZRYFqydnY64Q+2s3LLSm0i1BGDNLzhOvneY5XV5k2aczRXc4bpWlx8EQdRC/6NubqVACu9kyueCFB5YV6dCPDEVbsoBq1LPfs2yIMR2jUlLxqjSkz2achtOaWBMKhqiFCBhbaM0J5OUAe7bbaRiLR6fIdjo1d5SL2ospc7qI2H30Zbv4mg2FyvA2TBZ2fQNh9YCEsuDlozHAXTttRWqL1gVWZ0MT0ZZZuVCWXY4yTm3O+pNP6nmWx2hEgWEtyDqZMUuPbeP9D8tQqo3YGAOo4CYOaoFqAvZxfmTBFJyH/GBNrRULE5DwL5W0K/4FyAyM/7XyozzWgog1WEgdjEKVjw/ArvjGA0pXLqeUoXzt0YBMqKoTM40yNXtg6tYDMEL041fedxOF40yY54eYL+53V6SLbIvioZBrQqFKzsq41QiieAOOhN6ThAiEfvThdKMMAC55cwfq78IU+djuvyXAqpN5ymyPFEMljeOzAhYIWmIZvS4zzJlPsuBAnnqGgFz/wQE1UlrfXlbG+pPNQxY5QN9gE1EuOlbzbL4FHBYu10lzYXemfxyt2M/kE6YVDSef1pIe629P6UzOxd0K3mQ== 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 Currently __read_swap_cache_async() has get/put_swap_device() calls to increase/decrease a swap device reference to prevent swapoff. While some of its callers have already held the swap device reference, e.g in do_swap_page() and shmem_swapin_folio() where __read_swap_cache_async() will finally called. Now there are only two callers not holding a swap device reference, so make them hold a reference instead. And drop the get/put_swap_device calls in __read_swap_cache_async. This should reduce the overhead for swap in during page fault slightly. Signed-off-by: Kairui Song Reviewed-by: Baoquan He --- mm/swap_state.c | 14 ++++++++------ mm/zswap.c | 6 ++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/mm/swap_state.c b/mm/swap_state.c index a54b035d6a6c..50840a2887a5 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -426,17 +426,13 @@ struct folio *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct mempolicy *mpol, pgoff_t ilx, bool *new_page_allocated, bool skip_if_exists) { - struct swap_info_struct *si; + struct swap_info_struct *si = swp_swap_info(entry); struct folio *folio; struct folio *new_folio = NULL; struct folio *result = NULL; void *shadow = NULL; *new_page_allocated = false; - si = get_swap_device(entry); - if (!si) - return NULL; - for (;;) { int err; /* @@ -532,7 +528,6 @@ struct folio *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, put_swap_folio(new_folio, entry); folio_unlock(new_folio); put_and_return: - put_swap_device(si); if (!(*new_page_allocated) && new_folio) folio_put(new_folio); return result; @@ -552,11 +547,16 @@ struct folio *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct vm_area_struct *vma, unsigned long addr, struct swap_iocb **plug) { + struct swap_info_struct *si; bool page_allocated; struct mempolicy *mpol; pgoff_t ilx; struct folio *folio; + si = get_swap_device(entry); + if (!si) + return NULL; + mpol = get_vma_policy(vma, addr, 0, &ilx); folio = __read_swap_cache_async(entry, gfp_mask, mpol, ilx, &page_allocated, false); @@ -564,6 +564,8 @@ struct folio *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, if (page_allocated) swap_read_folio(folio, plug); + + put_swap_device(si); return folio; } diff --git a/mm/zswap.c b/mm/zswap.c index 7d8d684e54d4..c470073c17cc 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1055,15 +1055,21 @@ static int zswap_writeback_entry(struct zswap_entry *entry, struct folio *folio; struct mempolicy *mpol; bool folio_was_allocated; + struct swap_info_struct *si; struct writeback_control wbc = { .sync_mode = WB_SYNC_NONE, }; int ret = 0; /* try to allocate swap cache folio */ + si = get_swap_device(swpentry); + if (!si) + return -EEXIST; + mpol = get_task_policy(current); folio = __read_swap_cache_async(swpentry, GFP_KERNEL, mpol, NO_INTERLEAVE_INDEX, &folio_was_allocated, true); + put_swap_device(si); if (!folio) return -ENOMEM; -- 2.48.1