fix interaction of -a and -p options in swapon
authorMatt Whitlock <busybox@mattwhitlock.name>
Sat, 22 Mar 2014 23:10:08 +0000 (19:10 -0400)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 23 Mar 2014 17:36:22 +0000 (18:36 +0100)
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>
util-linux/swaponoff.c

index bcceff77220964adc8b9a751cf9a6f0d47a54e63..d5bfe1888ac7b527bd86be9a2776494ace315cd5 100644 (file)
@@ -82,6 +82,9 @@ static int do_em_all(void)
        struct mntent *m;
        FILE *f;
        int err;
+#ifdef G
+       int cl_flags = g_flags;
+#endif
 
        f = setmntent("/etc/fstab", "r");
        if (f == NULL)
@@ -97,14 +100,14 @@ static int do_em_all(void)
                        ) {
 #if ENABLE_FEATURE_SWAPON_PRI
                                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");
                                if (p) {
                                        /* Max allowed 32767 (== SWAP_FLAG_PRIO_MASK) */
                                        unsigned prio = bb_strtou(p + 4, NULL, 10);
                                        /* We want to allow "NNNN,foo", thus errno == EINVAL is allowed too */
                                        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);
                                        }
                                }