Revert "msdos fs: remove unsettable atari option"

Revert commit 7557bc66be629d19a402e752673708bfbb8b5e86 ("msdos fs: remove
unsettable atari option")
diff --git a/fs/fat/fat.h b/fs/fat/fat.h
index 8fc1093..d38466f 100644
--- a/fs/fat/fat.h
+++ b/fs/fat/fat.h
@@ -45,6 +45,7 @@ struct fat_mount_options {
 		 utf8:1,	   /* Use of UTF-8 character set (Default) */
 		 unicode_xlate:1,  /* create escape sequences for unhandled Unicode */
 		 numtail:1,        /* Does first alias have a numeric '~1' type tail? */
+		 atari:1,	   /* Use Atari GEMDOS variation of MS-DOS fs */
 		 flush:1,	   /* write things quickly */
 		 nocase:1,	   /* Does this need case conversion? 0=need case conversion*/
 		 usefree:1,	   /* Use free_clusters for FAT32 */
diff --git a/fs/fat/namei_msdos.c b/fs/fat/namei_msdos.c
index 582ca73..9a96d49 100644
--- a/fs/fat/namei_msdos.c
+++ b/fs/fat/namei_msdos.c
@@ -12,7 +12,12 @@
 
 /* Characters that are undesirable in an MS-DOS file name */
 static unsigned char bad_chars[] = "*?<>|\"";
-static unsigned char bad_if_strict[] = "+=,; ";
+static unsigned char bad_if_strict_pc[] = "+=,; ";
+/* GEMDOS is less restrictive */
+static unsigned char bad_if_strict_atari[] = " ";
+
+#define bad_if_strict(opts) \
+	((opts)->atari ? bad_if_strict_atari : bad_if_strict_pc)
 
 /***** Formats an MS-DOS file name. Rejects invalid names. */
 static int msdos_format_name(const unsigned char *name, int len,
@@ -33,20 +38,21 @@ static int msdos_format_name(const unsigned char *name, int len,
 			/* Get rid of dot - test for it elsewhere */
 			name++;
 			len--;
-		} else
+		} else if (!opts->atari)
 			return -EINVAL;
 	}
 	/*
-	 * disallow names that _really_ start with a dot
+	 * disallow names that _really_ start with a dot for MS-DOS,
+	 * GEMDOS does not care
 	 */
-	space = 1;
+	space = !opts->atari;
 	c = 0;
 	for (walk = res; len && walk - res < 8; walk++) {
 		c = *name++;
 		len--;
 		if (opts->name_check != 'r' && strchr(bad_chars, c))
 			return -EINVAL;
-		if (opts->name_check == 's' && strchr(bad_if_strict, c))
+		if (opts->name_check == 's' && strchr(bad_if_strict(opts), c))
 			return -EINVAL;
 		if (c >= 'A' && c <= 'Z' && opts->name_check == 's')
 			return -EINVAL;
@@ -86,7 +92,7 @@ static int msdos_format_name(const unsigned char *name, int len,
 			if (opts->name_check != 'r' && strchr(bad_chars, c))
 				return -EINVAL;
 			if (opts->name_check == 's' &&
-			    strchr(bad_if_strict, c))
+			    strchr(bad_if_strict(opts), c))
 				return -EINVAL;
 			if (c < ' ' || c == ':' || c == '\\')
 				return -EINVAL;