[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: swapon: implementing discard option.
From: Andy Lee <androidkslee () gmail ! com>
Date: 2012-05-23 1:02:59
Message-ID: CAOcf3K+KNB5xrdVdhxg2-RZt8qANtBpWVHy4JWsDemPsBzZ5vA () mail ! gmail ! com
[Download RAW message or body]
Hi,
This makes swapon to use discard option.
Enable support for discarding freed pages before they are reused.
Cheers,
Andy
---
util-linux/Config.src | 7 +++++++
util-linux/swaponoff.c | 41 +++++++++++++++++++++++++++++++++--------
2 files changed, 40 insertions(+), 8 deletions(-)
diff --git a/util-linux/Config.src b/util-linux/Config.src
index 57a52ce..84652eb 100644
--- a/util-linux/Config.src
+++ b/util-linux/Config.src
@@ -606,6 +606,13 @@ config FEATURE_SWAPON_PRI
help
Enable support for setting swap device priority in swapon.
+config FEATURE_SWAPON_DISCARD
+ bool "Support discard option -d"
+ default y
+ depends on SWAPONOFF
+ help
+ Enable support for discarding freed pages before they are reused.
+
config SWITCH_ROOT
bool "switch_root"
default y
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c
index 54867ec..d911b31 100644
--- a/util-linux/swaponoff.c
+++ b/util-linux/swaponoff.c
@@ -8,10 +8,13 @@
*/
//usage:#define swapon_trivial_usage
-//usage: "[-a]" IF_FEATURE_SWAPON_PRI(" [-p PRI]") " [DEVICE]"
+//usage: "[-a]" IF_FEATURE_SWAPON_DISCARD(" [-d]")
IF_FEATURE_SWAPON_PRI(" [-p PRI]") " [DEVICE]"
//usage:#define swapon_full_usage "\n\n"
//usage: "Start swapping on DEVICE\n"
//usage: "\n -a Start swapping on all swap devices"
+//usage: IF_FEATURE_SWAPON_DISCARD(
+//usage: "\n -d Discard freed pages before they are used"
+//usage: )
//usage: IF_FEATURE_SWAPON_PRI(
//usage: "\n -p PRI Set swap device priority"
//usage: )
@@ -28,6 +31,17 @@
# include <sys/swap.h>
#endif
+#if ENABLE_FEATURE_SWAPON_DISCARD
+#ifndef SWAP_FLAG_DISCARD
+#define SWAP_FLAG_DISCARD 0x10000 /* discard swap cluster after use */
+#endif
+#if ENABLE_FEATURE_SWAPON_PRI
+#define OPT_DISCARD (1 << 2)
+#else
+#define OPT_DISCARD (1 << 1)
+#endif
+#endif
+
#if ENABLE_FEATURE_MOUNT_LABEL
# include "volume_id.h"
#else
@@ -38,7 +52,7 @@
# define MNTTYPE_SWAP "swap"
#endif
-#if ENABLE_FEATURE_SWAPON_PRI
+#if ENABLE_FEATURE_SWAPON_PRI || ENABLE_FEATURE_SWAPON_DISCARD
struct globals {
int flags;
} FIX_ALIASING;
@@ -113,28 +127,39 @@ int swap_on_off_main(int argc UNUSED_PARAM, char **argv)
INIT_G();
-#if !ENABLE_FEATURE_SWAPON_PRI
+#if !ENABLE_FEATURE_SWAPON_PRI && !ENABLE_FEATURE_SWAPON_DISCARD
ret = getopt32(argv, "a");
#else
+#if ENABLE_FEATURE_SWAPON_PRI
if (applet_name[5] == 'n')
opt_complementary = "p+";
- ret = getopt32(argv, (applet_name[5] == 'n') ? "ap:" : "a", &g_flags);
+#endif
+ ret = getopt32(argv, (applet_name[5] == 'n') ?
+ "a" IF_FEATURE_SWAPON_PRI("p:") IF_FEATURE_SWAPON_DISCARD("d") :
+ "a", &g_flags);
+#if ENABLE_FEATURE_SWAPON_PRI
if (ret & 2) { // -p
- g_flags = SWAP_FLAG_PREFER |
+ g_flags |= SWAP_FLAG_PREFER |
((g_flags & SWAP_FLAG_PRIO_MASK) << SWAP_FLAG_PRIO_SHIFT);
- ret &= 1;
}
#endif
- if (ret /* & 1: not needed */) // -a
+#if ENABLE_FEATURE_SWAPON_DISCARD
+ if (ret & OPT_DISCARD) { // -d
+ g_flags |= SWAP_FLAG_DISCARD;
+ }
+#endif
+#endif //!ENABLE_FEATURE_SWAPON_PRI && !ENABLE_FEATURE_SWAPON_DISCARD
+
+ if (ret & 1) // -a
return do_em_all();
argv += optind;
if (!*argv)
bb_show_usage();
- /* ret = 0; redundant */
+ ret = 0;
do {
ret += swap_enable_disable(*argv);
} while (*++argv);
--
1.7.0.4
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic