"\n -a Stop swapping on all swap devices" \
#define swapon_trivial_usage \
- "[-a] [DEVICE]"
+ "[-a]" USE_FEATURE_SWAPON_PRI(" [-p pri]") " [DEVICE]"
#define swapon_full_usage "\n\n" \
"Start swapping on DEVICE\n" \
"\nOptions:" \
"\n -a Start swapping on all swap devices" \
+ USE_FEATURE_SWAPON_PRI( \
+ "\n -p pri Set swap device priority" \
+ ) \
#define switch_root_trivial_usage \
"[-c /dev/console] NEW_ROOT NEW_INIT [ARGUMENTS_TO_INIT]"
space. If you are not using any swap space, you can leave this
option disabled.
+config FEATURE_SWAPON_PRI
+ bool "Support option -p in swapon"
+ default n
+ depends on SWAPONOFF
+ help
+ Enable support for setting swap device priority in swapon.
+
config SWITCH_ROOT
bool "switch_root"
default n
#include <mntent.h>
#include <sys/swap.h>
+#if ENABLE_FEATURE_SWAPON_PRI
+struct globals {
+ int flags;
+};
+#define G (*(struct globals*)&bb_common_bufsiz1)
+#define g_flags (G.flags)
+#else
+#define g_flags 0
+#endif
+
static int swap_enable_disable(char *device)
{
int status;
#endif
if (applet_name[5] == 'n')
- status = swapon(device, 0);
+ status = swapon(device, g_flags);
else
status = swapoff(device);
{
int ret;
- if (!argv[1])
- bb_show_usage();
-
+#if !ENABLE_FEATURE_SWAPON_PRI
ret = getopt32(argv, "a");
- if (ret)
+#else
+ opt_complementary = "p+";
+ ret = getopt32(argv, (applet_name[5] == 'n') ? "ap:" : "a", &g_flags);
+
+ if (ret & 2) { // -p
+ g_flags = SWAP_FLAG_PREFER |
+ ((g_flags & SWAP_FLAG_PRIO_MASK) << SWAP_FLAG_PRIO_SHIFT);
+ ret &= 1;
+ }
+#endif
+
+ if (ret /* & 1: not needed */) // -a
return do_em_all();
+ argv += optind;
+ if (!*argv)
+ bb_show_usage();
+
/* ret = 0; redundant */
- while (*++argv)
+ do {
ret += swap_enable_disable(*argv);
+ } while (*++argv);
+
return ret;
}