2022-09-15 03:56:06

by Liu Shixin

[permalink] [raw]
Subject: [PATCH v5 0/5] Delay the initializaton of zswap

In the initialization of zswap, about 18MB memory will be allocated for
zswap_pool. Since not all users use zswap, the memory may be wasted. Save
the memory for these users by delaying the initialization of zswap to
first enablement.

v4->v5: Rebase on next-20220913, the previous first patch is superseded
by patch ("frontswap: don't call ->init if no ops are registered").
v3->v4: Revert three patches to replace previous patch[1-2] suggested by
Vitaly.
v2->v3: Fix frontswap_ops NULL reported by Nathan and add init for online
swap device in backend register.
v1->v2: Change init_zswap to zswap_init suggested by Andrew.

Liu Shixin (5):
Revert "mm: mark swap_lock and swap_active_head static"
Revert "frontswap: simplify frontswap_register_ops"
mm/zswap: replace zswap_init_{started/failed} with zswap_init_state
mm/zswap: delay the initializaton of zswap until the first enablement
mm/zswap: skip confusing print info

include/linux/swapfile.h | 2 ++
mm/frontswap.c | 42 ++++++++++++++++++++++
mm/swapfile.c | 4 +--
mm/zswap.c | 77 ++++++++++++++++++++++++++++++----------
4 files changed, 104 insertions(+), 21 deletions(-)

--
2.25.1


2022-09-15 04:01:49

by Liu Shixin

[permalink] [raw]
Subject: [PATCH v5 1/5] Revert "mm: mark swap_lock and swap_active_head static"

This reverts commit 633423a09cb5cfe61438283e1ce49c23cf4a0611.

swap_lock and swap_active_head will be used in next patch, so export it
again.

Signed-off-by: Liu Shixin <[email protected]>
---
include/linux/swapfile.h | 2 ++
mm/swapfile.c | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/include/linux/swapfile.h b/include/linux/swapfile.h
index 7ed529a77c5b..a2540b8396e2 100644
--- a/include/linux/swapfile.h
+++ b/include/linux/swapfile.h
@@ -6,6 +6,8 @@
* these were static in swapfile.c but frontswap.c needs them and we don't
* want to expose them to the dozens of source files that include swap.h
*/
+extern spinlock_t swap_lock;
+extern struct plist_head swap_active_head;
extern struct swap_info_struct *swap_info[];
extern unsigned long generic_max_swapfile_size(void);
unsigned long arch_max_swapfile_size(void);
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 4efcfe34e45b..6cdb34c01dd3 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -51,7 +51,7 @@ static bool swap_count_continued(struct swap_info_struct *, pgoff_t,
unsigned char);
static void free_swap_count_continuations(struct swap_info_struct *);

-static DEFINE_SPINLOCK(swap_lock);
+DEFINE_SPINLOCK(swap_lock);
static unsigned int nr_swapfiles;
atomic_long_t nr_swap_pages;
/*
@@ -77,7 +77,7 @@ static const char Unused_offset[] = "Unused swap offset entry ";
* all active swap_info_structs
* protected with swap_lock, and ordered by priority.
*/
-static PLIST_HEAD(swap_active_head);
+PLIST_HEAD(swap_active_head);

/*
* all available (active, not full) swap_info_structs
--
2.25.1