swapon: optional -p PRIO support (by Francois Barel <frabar666 AT gmail.com>)

function                                             old     new   delta
swap_on_off_main                                     153     216     +63
packed_usage                                       24190   24214     +24
swap_enable_disable                                  127     131      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 91/0)               Total: 91 bytes
This commit is contained in:
Denis Vlasenko 2008-05-18 23:05:34 +00:00
parent 5599502a55
commit ee56e013cf
3 changed files with 42 additions and 7 deletions

View File

@ -3809,11 +3809,14 @@
"\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]"

View File

@ -743,6 +743,13 @@ config SWAPONOFF
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

View File

@ -11,6 +11,16 @@
#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;
@ -26,7 +36,7 @@ static int swap_enable_disable(char *device)
#endif
if (applet_name[5] == 'n')
status = swapon(device, 0);
status = swapon(device, g_flags);
else
status = swapoff(device);
@ -63,15 +73,30 @@ int swap_on_off_main(int argc ATTRIBUTE_UNUSED, char **argv)
{
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;
}