diff options
Diffstat (limited to 'util-linux')
-rw-r--r-- | util-linux/Config.in | 7 | ||||
-rw-r--r-- | util-linux/swaponoff.c | 37 |
2 files changed, 38 insertions, 6 deletions
diff --git a/util-linux/Config.in b/util-linux/Config.in index c30091a7a..3b7630e6b 100644 --- a/util-linux/Config.in +++ b/util-linux/Config.in | |||
@@ -743,6 +743,13 @@ config SWAPONOFF | |||
743 | space. If you are not using any swap space, you can leave this | 743 | space. If you are not using any swap space, you can leave this |
744 | option disabled. | 744 | option disabled. |
745 | 745 | ||
746 | config FEATURE_SWAPON_PRI | ||
747 | bool "Support option -p in swapon" | ||
748 | default n | ||
749 | depends on SWAPONOFF | ||
750 | help | ||
751 | Enable support for setting swap device priority in swapon. | ||
752 | |||
746 | config SWITCH_ROOT | 753 | config SWITCH_ROOT |
747 | bool "switch_root" | 754 | bool "switch_root" |
748 | default n | 755 | default n |
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c index beefac030..6eafa3e21 100644 --- a/util-linux/swaponoff.c +++ b/util-linux/swaponoff.c | |||
@@ -11,6 +11,16 @@ | |||
11 | #include <mntent.h> | 11 | #include <mntent.h> |
12 | #include <sys/swap.h> | 12 | #include <sys/swap.h> |
13 | 13 | ||
14 | #if ENABLE_FEATURE_SWAPON_PRI | ||
15 | struct globals { | ||
16 | int flags; | ||
17 | }; | ||
18 | #define G (*(struct globals*)&bb_common_bufsiz1) | ||
19 | #define g_flags (G.flags) | ||
20 | #else | ||
21 | #define g_flags 0 | ||
22 | #endif | ||
23 | |||
14 | static int swap_enable_disable(char *device) | 24 | static int swap_enable_disable(char *device) |
15 | { | 25 | { |
16 | int status; | 26 | int status; |
@@ -26,7 +36,7 @@ static int swap_enable_disable(char *device) | |||
26 | #endif | 36 | #endif |
27 | 37 | ||
28 | if (applet_name[5] == 'n') | 38 | if (applet_name[5] == 'n') |
29 | status = swapon(device, 0); | 39 | status = swapon(device, g_flags); |
30 | else | 40 | else |
31 | status = swapoff(device); | 41 | status = swapoff(device); |
32 | 42 | ||
@@ -63,15 +73,30 @@ int swap_on_off_main(int argc ATTRIBUTE_UNUSED, char **argv) | |||
63 | { | 73 | { |
64 | int ret; | 74 | int ret; |
65 | 75 | ||
66 | if (!argv[1]) | 76 | #if !ENABLE_FEATURE_SWAPON_PRI |
67 | bb_show_usage(); | ||
68 | |||
69 | ret = getopt32(argv, "a"); | 77 | ret = getopt32(argv, "a"); |
70 | if (ret) | 78 | #else |
79 | opt_complementary = "p+"; | ||
80 | ret = getopt32(argv, (applet_name[5] == 'n') ? "ap:" : "a", &g_flags); | ||
81 | |||
82 | if (ret & 2) { // -p | ||
83 | g_flags = SWAP_FLAG_PREFER | | ||
84 | ((g_flags & SWAP_FLAG_PRIO_MASK) << SWAP_FLAG_PRIO_SHIFT); | ||
85 | ret &= 1; | ||
86 | } | ||
87 | #endif | ||
88 | |||
89 | if (ret /* & 1: not needed */) // -a | ||
71 | return do_em_all(); | 90 | return do_em_all(); |
72 | 91 | ||
92 | argv += optind; | ||
93 | if (!*argv) | ||
94 | bb_show_usage(); | ||
95 | |||
73 | /* ret = 0; redundant */ | 96 | /* ret = 0; redundant */ |
74 | while (*++argv) | 97 | do { |
75 | ret += swap_enable_disable(*argv); | 98 | ret += swap_enable_disable(*argv); |
99 | } while (*++argv); | ||
100 | |||
76 | return ret; | 101 | return ret; |
77 | } | 102 | } |