fix interaction of -a and -p options in swapon

Swap entries in /etc/fstab inherit the priority specified on the command line unless they have 'pri' in their mount options.

Signed-off-by: Matt Whitlock <busybox@mattwhitlock.name>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Matt Whitlock 2014-03-22 19:10:08 -04:00 committed by Denys Vlasenko
parent c3a27b0bfd
commit b9bbd4ddf6

View File

@ -82,6 +82,9 @@ static int do_em_all(void)
struct mntent *m; struct mntent *m;
FILE *f; FILE *f;
int err; int err;
#ifdef G
int cl_flags = g_flags;
#endif
f = setmntent("/etc/fstab", "r"); f = setmntent("/etc/fstab", "r");
if (f == NULL) if (f == NULL)
@ -97,14 +100,14 @@ static int do_em_all(void)
) { ) {
#if ENABLE_FEATURE_SWAPON_PRI #if ENABLE_FEATURE_SWAPON_PRI
char *p; char *p;
g_flags = 0; /* each swap space might have different flags */ g_flags = cl_flags; /* each swap space might have different flags */
p = hasmntopt(m, "pri"); p = hasmntopt(m, "pri");
if (p) { if (p) {
/* Max allowed 32767 (== SWAP_FLAG_PRIO_MASK) */ /* Max allowed 32767 (== SWAP_FLAG_PRIO_MASK) */
unsigned prio = bb_strtou(p + 4, NULL, 10); unsigned prio = bb_strtou(p + 4, NULL, 10);
/* We want to allow "NNNN,foo", thus errno == EINVAL is allowed too */ /* We want to allow "NNNN,foo", thus errno == EINVAL is allowed too */
if (errno != ERANGE) { if (errno != ERANGE) {
g_flags = SWAP_FLAG_PREFER | g_flags = (g_flags & ~SWAP_FLAG_PRIO_MASK) | SWAP_FLAG_PREFER |
MIN(prio, SWAP_FLAG_PRIO_MASK); MIN(prio, SWAP_FLAG_PRIO_MASK);
} }
} }