From patchwork Fri Feb 14 17:57:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kairui Song X-Patchwork-Id: 13975438 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 1355EC02198 for ; Fri, 14 Feb 2025 17:58:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A1F35280004; Fri, 14 Feb 2025 12:58:42 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9CF16280002; Fri, 14 Feb 2025 12:58:42 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8982B280004; Fri, 14 Feb 2025 12:58:42 -0500 (EST) 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 6BAE1280002 for ; Fri, 14 Feb 2025 12:58:42 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id D9A9EA07F0 for ; Fri, 14 Feb 2025 17:58:40 +0000 (UTC) X-FDA: 83119310400.29.5694E84 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by imf13.hostedemail.com (Postfix) with ESMTP id 01F2F20005 for ; Fri, 14 Feb 2025 17:58:38 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CjNg4pD7; spf=pass (imf13.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.178 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=1739555919; 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=vo/Vw3N/1YvU4dFuupnxGUy23lCsf9jYjVH89XpowKk=; b=C4UGNJKDfqzHsdGqOHABqDrUDXtKs8R0lmcf7qUbio7z2E4D4c2Cz8v2BdeLtXdW/AUukb 49F+pawXB9i5KOH0ysNeLqd/unDlKvBG9HnfRT9K+dD7sharYm/h894Fpu+zjRJiuR7/x5 3icU3pMoZCbwyeESi8KtIbNQe9KJbiQ= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CjNg4pD7; spf=pass (imf13.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.178 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=1739555919; a=rsa-sha256; cv=none; b=r34Xzrwxe8tVS9UGjP8XbyVofuJlZmcbM1NQjNvC1zkvbN9YjVHXxKy1Oy2WR2beFm50/V 6M7iSFtsFmke6C9Uk8ApXIvwaXj7caYoCnyeZPSCv3sRfpjc7s3iw3j7V+1rAdTbbMULfY eVFUn/wvAkSaxcP8eHX5ZVefl1Ea3sA= Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-220e83d65e5so31085985ad.1 for ; Fri, 14 Feb 2025 09:58:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739555917; x=1740160717; 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=vo/Vw3N/1YvU4dFuupnxGUy23lCsf9jYjVH89XpowKk=; b=CjNg4pD7BS+NG7ZDCJRUB2dhU4ge+VHGN/y3cNXaHv1crDuZpCr9gKQN0S/BBJdDfQ XWZA3DPz6cWTlcNVK8XzB7DtfnCzPa2LZmr9aEmyux+ZTjUBL4B9f2T2Nl9eyUwUj1YW gftpCCrobu74vvJHSmBZ2FrfVvcYk6dBItYwhno64FO52xbRtLJ6eq0FJCQIDeuXAxgy 2sXNTrViUy82ztZhuNfO1Nh7Vn81xrd/AdpPVPPSSen++Mn7UAvujz4zVC8lctIJJl5P GIg3X1YZj2TXU6B7BSAgBqgFM/ipPcKOwQwTY9me4+CctYS0SRBapRMc11llvaoE0J5c 0eSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739555917; x=1740160717; 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=vo/Vw3N/1YvU4dFuupnxGUy23lCsf9jYjVH89XpowKk=; b=wigN1Gldfc/AJhBjRH/2qzy8gtdZfLZVsErWwVDikHqAnS1IVp+T0Bo//Jx7tZfPIV HoX+GXkpJ7Aw5RhC4Uo/acXolQVXxeLCARu6D2x7oa+1Gi8m/IBrvyv12Fz9NMEi/w0E tN4xjNPzkK3wJo0xwdGyIjk7gk9Fvxq1Puy03i+kyHuzhHX5YPanfm2wWtwdyW975kAv 1l1aXgLczMVPCJXYU0HdLtiMKoYDFQbA9dIa6AFbluwuJn17YixwPtgZYsVaBT8Xp6BW ykYbXLi/C5KDWIs6KAQW2VQgsGkV5AdMlf/oD88ArHaY9v9HLYlvZiYK67xQDmNAr6Qw mQ5Q== X-Gm-Message-State: AOJu0YzgLggowZYCRPN9mE739e+mLl7DSJS5yaQTw60cd4e3VGFd6wOa N78DlkKRpNGroXwBhbomX9gFo0ja0Mzi3Jhn1gVWsPfwYFSrXlRRfGx8EEMsHTM= X-Gm-Gg: ASbGncskGuT9ncGgmnD7oFm45XKr25/Rclg600HOHdhBQYWquxM5dNDUjZQ4QZ9zJvE mLFiB7L1aPFkoHrt+hb8CqpIRWleUkPLG7OpmlA/z8sJ51w1v/TfLN3ZfMRbyQZ8OrPfYM3F6vq uXQlpEZwgGAWZMv3Uoi3rSu8LxdaFzd0IfmSmBMXm5PYSzVWMtOwWyHizSO+FXAPH1dCIfq8+Na ZIEwot8NRI3Qy8BZJxvzdr9pAcxprUi4rcsPmzIurHf6ANbrY2qMXXAdH869tmvmhvf1ffbEX6K 9Jp8M5VmkrowIviCO45ki28LVrJ9ve65hpdm X-Google-Smtp-Source: AGHT+IEqu8/5Sy9EBJ+I/60NzQrDUdehFXtUPvZTfs+82aTm3p2XSzB32UYFzYofOshKbGfGpZWekA== X-Received: by 2002:a17:902:ce09:b0:20d:cb6:11e with SMTP id d9443c01a7336-22104062bcdmr2226915ad.26.1739555917455; Fri, 14 Feb 2025 09:58:37 -0800 (PST) Received: from KASONG-MC4.tencent.com ([106.37.120.226]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d55943b5sm31216605ad.246.2025.02.14.09.58.32 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 14 Feb 2025 09:58:37 -0800 (PST) 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 , Kalesh Singh , linux-kernel@vger.kernel.org, Kairui Song Subject: [PATCH 3/7] mm, swap: avoid redundant swap device pinning Date: Sat, 15 Feb 2025 01:57:05 +0800 Message-ID: <20250214175709.76029-4-ryncsn@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250214175709.76029-1-ryncsn@gmail.com> References: <20250214175709.76029-1-ryncsn@gmail.com> Reply-To: Kairui Song MIME-Version: 1.0 X-Rspamd-Queue-Id: 01F2F20005 X-Stat-Signature: w59u76pedogpumzuasukkzyaezhtqpm4 X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1739555918-556446 X-HE-Meta: U2FsdGVkX189cQcDanByA3poyxZJfh+mJLBvOEniBwYgTmECsIzGrz9Cyn8PgdaRGDjI1i4IFc3vTPb5ITcOVFmLvRxOl2YPCnOqcqINHfyzdFEQx1kFlw0QqIUMAy0Y9kpUnEGpBPhIWruoLNLuvclPkLwqultBoQnDIsAyissZbF2+nlZPPaHWLWN20zOPF2Hvogsij2spISLcwQ0jbBMo236jiEolbTBKtGmUtHM6ortU/d3ZoRdZIhrlvXQNsRRwqeZGXxqR8SiUrsmOiryq45CxEk5+YV1TCa92g4IfTs8vJFG8M6g5w98BJQWzt8x8mi2Erh7+el8gsaQCi/SlCO5p43cbe1FaJARWtr+o+terP/wiI7S/2lJPDQnscSX9vYohQkJHLOWLRl3PXCUJglZzHFIQzQkSh0ZlkVELoQDoTjWxTQnzvZKhg53SjzDd83cCI5148soGBCupFl78FdkFOchyxaX6ewwhVEw/Eg/bi+NLJfmvP+/tNlMLQynTFxV9nUe/eQqucezzsXnD/l0ltM8bJHydad1GFkJrnzKqeBZxIMzoAe5zdNyuHNsHqWJv5/zjDtbvSJsDPfTSTizPA20/3gO0Qvb1YYmrz0G6SPMGqFi8w8GfJwdViXqtlegsA/zp84Rf7CgIj3BVs+UtVcO3NdMJGIGaHWHiskF9ezvp7BifGFeQBQPtNqxHZUA12Tr1+XEB8oMHfhdx+DtsQb3JBVUM5IkPV2ZpwVDsqHArxhNFJj9pBLQOrAa/sfu0eSJ5+Iz1g0XPeIBHqc8hHGF35o64XAgtIN0IyP+HQa+II0jX5etSpEfDOrUS1KKABp8CM0WCQ1ATAojhvr5BUZbpLheGgvuz6l9VtkgHWQ1o83lhGsFJaVpwy8Wfh/YuG5WdL2PbA0LUvlJW09Sn2raOKMOY7tzCnd7l9CUgdhK2c9IL6qCHsjIfY/6vbuK4Ns4EhQkZJ0x IO9cc4yr VX3gA30Zv3tmH+YF47mVYMEW+zvk6G/z7dk6oOjm63GCxdZFPaR9Ccm8kCLYG/gheN7yyGHLp3ZpWLl69sqp3BxBl6I2F7bGU8SGecncKfYOeT+U5xw1yLe71GmUDkss84S2e9vsboFrbJa5thlLhPfIj6r2CCOxgjVhtFmT3t9smL9bCxCx38QaLCgfR3pWb/p2jEkyEf4CD0frYJ2c5TZhTLCV6tQYnPxjXwPayPfTeSfkWrs20pPvug/BjE69YursKCFpDNpV93wGpKX6jP73w0EpqxiTB1CKiAOct8Qpf4zTfEKaZgtnXdzvddTKhRZ4Ij2fC9mUx1fN4Sm7F/LRX2sulmjIIyE4d0gxavDAtwtdq4seICW10kdVHqq4KwWZm34xmeGfmYpIfxguiidGiOLryF9jidg84yFkjnrmoEDF+SLCRhq/EskH5gNxUEnyX5t5yfTbUTKLSeQ00xSLJb5p1ALCNofC7d0SZ7YR9FE1crGQrBpQKRB61f2oOA/eUP3L+3F/Z65QBOSCiq90mZQtnzI1SFhkmhxXhXdq7DRbMZeooNgODnSIJANmgNSJO 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 There are only two callers of __read_swap_cache_async 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 ac9d299e7d0c..83dfa1f9e689 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1051,14 +1051,20 @@ 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, }; /* 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;