mount: support strictatime option. Closes 5240
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 26 Jun 2012 14:09:00 +0000 (16:09 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 26 Jun 2012 14:09:00 +0000 (16:09 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
util-linux/mount.c

index b6c94d7ba7e1444ae36be1904441944c4f85639a..525fdcce9cbc60a53bc9e4e4ca3fdf6cad06f54a 100644 (file)
 #ifndef MS_RELATIME
 # define MS_RELATIME    (1 << 21)
 #endif
+#ifndef MS_STRICTATIME
+# define MS_STRICTATIME (1 << 24)
+#endif
+
+/* Any ~MS_FOO value has this bit set: */
+#define BB_MS_INVERTED_VALUE (1u << 31)
 
 #include "libbb.h"
 #if ENABLE_FEATURE_MOUNT_LABEL
@@ -240,6 +246,7 @@ static const int32_t mount_options[] = {
                /* "nomand"      */ ~MS_MANDLOCK,
                /* "relatime"    */ MS_RELATIME,
                /* "norelatime"  */ ~MS_RELATIME,
+               /* "strictatime" */ MS_STRICTATIME,
                /* "loud"        */ ~MS_SILENT,
                /* "rbind"       */ MS_BIND|MS_RECURSIVE,
 
@@ -297,6 +304,7 @@ static const char mount_option_str[] =
                "nomand\0"
                "relatime\0"
                "norelatime\0"
+               "strictatime\0"
                "loud\0"
                "rbind\0"
 
@@ -473,7 +481,7 @@ static unsigned long parse_mount_options(char *options, char **unrecognized)
                         && (options[opt_len] == '\0' || options[opt_len] == '=')
                        ) {
                                unsigned long fl = mount_options[i];
-                               if ((long)fl < 0)
+                               if (fl & BB_MS_INVERTED_VALUE)
                                        flags &= fl;
                                else
                                        flags |= fl;