From: Kairui Song <ryncsn@gmail.com>
To: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Miaohe Lin <linmiaohe@huawei.com>,
David Hildenbrand <david@redhat.com>,
"Huang, Ying" <ying.huang@intel.com>,
Hugh Dickins <hughd@google.com>, Kairui Song <kasong@tencent.com>
Subject: [PATCH 4/5] swap: remove the swap lock in swap_cache_get_folio
Date: Fri, 9 Dec 2022 02:02:08 +0800 [thread overview]
Message-ID: <20221208180209.50845-5-ryncsn@gmail.com> (raw)
In-Reply-To: <20221208180209.50845-1-ryncsn@gmail.com>
From: Kairui Song <kasong@tencent.com>
There is only one caller not keep holding a reference or lock the
swap device while calling this function. Just move the lock out
of this function, it only used to prevent swapoff, and this helper
function is very short so there is no performance regression
issue. Help saves a few cycles.
Signed-off-by: Kairui Song <kasong@tencent.com>
---
mm/shmem.c | 8 +++++++-
mm/swap_state.c | 8 ++------
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/mm/shmem.c b/mm/shmem.c
index c1d8b8a1aa3b..0183b6678270 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1725,6 +1725,7 @@ static int shmem_swapin_folio(struct inode *inode, pgoff_t index,
struct address_space *mapping = inode->i_mapping;
struct shmem_inode_info *info = SHMEM_I(inode);
struct mm_struct *charge_mm = vma ? vma->vm_mm : NULL;
+ struct swap_info_struct *si;
struct folio *folio = NULL;
swp_entry_t swap;
int error;
@@ -1737,7 +1738,12 @@ static int shmem_swapin_folio(struct inode *inode, pgoff_t index,
return -EIO;
/* Look it up and read it in.. */
- folio = swap_cache_get_folio(swap, NULL, 0);
+ si = get_swap_device(swap);
+ if (si) {
+ folio = swap_cache_get_folio(swap, NULL, 0);
+ put_swap_device(si);
+ }
+
if (!folio) {
/* Or update major stats only when swapin succeeds?? */
if (fault_type) {
diff --git a/mm/swap_state.c b/mm/swap_state.c
index 19089417abd1..eba388f67741 100644
--- a/mm/swap_state.c
+++ b/mm/swap_state.c
@@ -324,19 +324,15 @@ static inline bool swap_use_vma_readahead(void)
* unlocked and with its refcount incremented - we rely on the kernel
* lock getting page table operations atomic even if we drop the folio
* lock before returning.
+ *
+ * Caller must lock the swap device or hold a reference to keep it valid.
*/
struct folio *swap_cache_get_folio(swp_entry_t entry,
struct vm_area_struct *vma, unsigned long addr)
{
struct folio *folio;
- struct swap_info_struct *si;
- 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 (folio) {
bool vma_ra = swap_use_vma_readahead();
bool readahead;
--
2.35.2
next prev parent reply other threads:[~2022-12-08 18:03 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-08 18:02 [PATCH 0/5] Clean up and fixes for swap Kairui Song
2022-12-08 18:02 ` [PATCH 1/5] swapfile: get rid of volatile and avoid redundant read Kairui Song
2022-12-09 2:48 ` Huang, Ying
2022-12-08 18:02 ` [PATCH 2/5] swap: avoid a redundant pte map if ra window is 1 Kairui Song
2022-12-09 3:15 ` Huang, Ying
2022-12-08 18:02 ` [PATCH 3/5] swap: fold swap_ra_clamp_pfn into swap_ra_info Kairui Song
2022-12-08 19:08 ` Matthew Wilcox
2022-12-09 2:00 ` Kairui Song
2022-12-09 3:23 ` Huang, Ying
2022-12-08 18:02 ` Kairui Song [this message]
2022-12-11 11:39 ` [PATCH 4/5] swap: remove the swap lock in swap_cache_get_folio Huang, Ying
2022-12-11 11:47 ` Kairui Song
2022-12-08 18:02 ` [PATCH 5/5] swap: avoid ra statistic lost when swapin races Kairui Song
2022-12-08 19:14 ` Matthew Wilcox
2022-12-09 1:54 ` Kairui Song
2022-12-11 12:02 ` Huang, Ying
2022-12-11 12:15 ` Kairui Song
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221208180209.50845-5-ryncsn@gmail.com \
--to=ryncsn@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=david@redhat.com \
--cc=hughd@google.com \
--cc=kasong@tencent.com \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ying.huang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox