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" \ "\n -a Stop swapping on all swap devices" \
#define swapon_trivial_usage \ #define swapon_trivial_usage \
"[-a] [DEVICE]" "[-a]" USE_FEATURE_SWAPON_PRI(" [-p pri]") " [DEVICE]"
#define swapon_full_usage "\n\n" \ #define swapon_full_usage "\n\n" \
"Start swapping on DEVICE\n" \ "Start swapping on DEVICE\n" \
"\nOptions:" \ "\nOptions:" \
"\n -a Start swapping on all swap devices" \ "\n -a Start swapping on all swap devices" \
USE_FEATURE_SWAPON_PRI( \
"\n -p pri Set swap device priority" \
) \
#define switch_root_trivial_usage \ #define switch_root_trivial_usage \
"[-c /dev/console] NEW_ROOT NEW_INIT [ARGUMENTS_TO_INIT]" "[-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 space. If you are not using any swap space, you can leave this
option disabled. 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 config SWITCH_ROOT
bool "switch_root" bool "switch_root"
default n default n

View File

@ -11,6 +11,16 @@
#include <mntent.h> #include <mntent.h>
#include <sys/swap.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) static int swap_enable_disable(char *device)
{ {
int status; int status;
@ -26,7 +36,7 @@ static int swap_enable_disable(char *device)
#endif #endif
if (applet_name[5] == 'n') if (applet_name[5] == 'n')
status = swapon(device, 0); status = swapon(device, g_flags);
else else
status = swapoff(device); status = swapoff(device);
@ -63,15 +73,30 @@ int swap_on_off_main(int argc ATTRIBUTE_UNUSED, char **argv)
{ {
int ret; int ret;
if (!argv[1]) #if !ENABLE_FEATURE_SWAPON_PRI
bb_show_usage();
ret = getopt32(argv, "a"); 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(); return do_em_all();
argv += optind;
if (!*argv)
bb_show_usage();
/* ret = 0; redundant */ /* ret = 0; redundant */
while (*++argv) do {
ret += swap_enable_disable(*argv); ret += swap_enable_disable(*argv);
} while (*++argv);
return ret; return ret;
} }