]> Pileus Git - ~andy/linux/blobdiff - fs/fat/inode.c
fat: introduce 2 new values for the -o nfs mount option
[~andy/linux] / fs / fat / inode.c
index acf6e479b4433a5a78a087eefd838757b49d50cb..93fbc8a7f0986a81ef7df9bb121573f6ff08a94d 100644 (file)
@@ -814,8 +814,6 @@ static int fat_show_options(struct seq_file *m, struct dentry *root)
                seq_puts(m, ",usefree");
        if (opts->quiet)
                seq_puts(m, ",quiet");
-       if (opts->nfs)
-               seq_puts(m, ",nfs");
        if (opts->showexec)
                seq_puts(m, ",showexec");
        if (opts->sys_immutable)
@@ -849,6 +847,10 @@ static int fat_show_options(struct seq_file *m, struct dentry *root)
                seq_puts(m, ",errors=panic");
        else
                seq_puts(m, ",errors=remount-ro");
+       if (opts->nfs == FAT_NFS_NOSTALE_RO)
+               seq_puts(m, ",nfs=nostale_ro");
+       else if (opts->nfs)
+               seq_puts(m, ",nfs=stale_rw");
        if (opts->discard)
                seq_puts(m, ",discard");
 
@@ -865,7 +867,7 @@ enum {
        Opt_uni_xl_no, Opt_uni_xl_yes, Opt_nonumtail_no, Opt_nonumtail_yes,
        Opt_obsolete, Opt_flush, Opt_tz_utc, Opt_rodir, Opt_err_cont,
        Opt_err_panic, Opt_err_ro, Opt_discard, Opt_nfs, Opt_time_offset,
-       Opt_err,
+       Opt_nfs_stale_rw, Opt_nfs_nostale_ro, Opt_err,
 };
 
 static const match_table_t fat_tokens = {
@@ -895,7 +897,9 @@ static const match_table_t fat_tokens = {
        {Opt_err_panic, "errors=panic"},
        {Opt_err_ro, "errors=remount-ro"},
        {Opt_discard, "discard"},
-       {Opt_nfs, "nfs"},
+       {Opt_nfs_stale_rw, "nfs"},
+       {Opt_nfs_stale_rw, "nfs=stale_rw"},
+       {Opt_nfs_nostale_ro, "nfs=nostale_ro"},
        {Opt_obsolete, "conv=binary"},
        {Opt_obsolete, "conv=text"},
        {Opt_obsolete, "conv=auto"},
@@ -1092,6 +1096,12 @@ static int parse_options(struct super_block *sb, char *options, int is_vfat,
                case Opt_err_ro:
                        opts->errors = FAT_ERRORS_RO;
                        break;
+               case Opt_nfs_stale_rw:
+                       opts->nfs = FAT_NFS_STALE_RW;
+                       break;
+               case Opt_nfs_nostale_ro:
+                       opts->nfs = FAT_NFS_NOSTALE_RO;
+                       break;
 
                /* msdos specific */
                case Opt_dots:
@@ -1150,9 +1160,6 @@ static int parse_options(struct super_block *sb, char *options, int is_vfat,
                case Opt_discard:
                        opts->discard = 1;
                        break;
-               case Opt_nfs:
-                       opts->nfs = 1;
-                       break;
 
                /* obsolete mount options */
                case Opt_obsolete:
@@ -1183,6 +1190,8 @@ out:
                opts->allow_utime = ~opts->fs_dmask & (S_IWGRP | S_IWOTH);
        if (opts->unicode_xlate)
                opts->utf8 = 0;
+       if (opts->nfs == FAT_NFS_NOSTALE_RO)
+               sb->s_flags |= MS_RDONLY;
 
        return 0;
 }