fs/9p: Add new mount modes
authorEric Van Hensbergen <ericvh@kernel.org>
Sun, 18 Dec 2022 20:34:45 +0000 (20:34 +0000)
committerEric Van Hensbergen <ericvh@kernel.org>
Mon, 27 Mar 2023 02:33:48 +0000 (02:33 +0000)
Add some additional mount modes for cache management including
specifying directio as a mount option and an option for ignore
qid.version for determining whether or not a file is cacheable.

Signed-off-by: Eric Van Hensbergen <ericvh@kernel.org>
fs/9p/v9fs.c
fs/9p/v9fs.h

index f8e952c013f905efd96564a188ac4b67ed9d2b72..43d3806150a99dcaf1201fd532ebb2fe29c188e0 100644 (file)
@@ -38,7 +38,7 @@ enum {
        /* String options */
        Opt_uname, Opt_remotename, Opt_cache, Opt_cachetag,
        /* Options that take no arguments */
-       Opt_nodevmap, Opt_noxattr,
+       Opt_nodevmap, Opt_noxattr, Opt_directio, Opt_ignoreqv,
        /* Access options */
        Opt_access, Opt_posixacl,
        /* Lock timeout option */
@@ -56,6 +56,8 @@ static const match_table_t tokens = {
        {Opt_remotename, "aname=%s"},
        {Opt_nodevmap, "nodevmap"},
        {Opt_noxattr, "noxattr"},
+       {Opt_directio, "directio"},
+       {Opt_ignoreqv, "ignoreqv"},
        {Opt_cache, "cache=%s"},
        {Opt_cachetag, "cachetag=%s"},
        {Opt_access, "access=%s"},
@@ -125,7 +127,7 @@ int v9fs_show_options(struct seq_file *m, struct dentry *root)
        if (v9ses->nodev)
                seq_puts(m, ",nodevmap");
        if (v9ses->cache)
-               seq_printf(m, ",%s", v9fs_cache_modes[v9ses->cache]);
+               seq_printf(m, ",cache=%s", v9fs_cache_modes[v9ses->cache]);
 #ifdef CONFIG_9P_FSCACHE
        if (v9ses->cachetag && v9ses->cache == CACHE_FSCACHE)
                seq_printf(m, ",cachetag=%s", v9ses->cachetag);
@@ -147,6 +149,10 @@ int v9fs_show_options(struct seq_file *m, struct dentry *root)
                break;
        }
 
+       if (v9ses->flags & V9FS_IGNORE_QV)
+               seq_puts(m, ",ignoreqv");
+       if (v9ses->flags & V9FS_DIRECT_IO)
+               seq_puts(m, ",directio");
        if (v9ses->flags & V9FS_POSIX_ACL)
                seq_puts(m, ",posixacl");
 
@@ -276,6 +282,12 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)
                case Opt_noxattr:
                        v9ses->flags |= V9FS_NO_XATTR;
                        break;
+               case Opt_directio:
+                       v9ses->flags |= V9FS_DIRECT_IO;
+                       break;
+               case Opt_ignoreqv:
+                       v9ses->flags |= V9FS_IGNORE_QV;
+                       break;
                case Opt_cachetag:
 #ifdef CONFIG_9P_FSCACHE
                        kfree(v9ses->cachetag);
index 8cd63782a25c182fa9e18f29f922b0cf30fe6974..12401f1be5d6086b81736f6371ba32e18a33bb58 100644 (file)
@@ -37,7 +37,10 @@ enum p9_session_flags {
        V9FS_ACCESS_USER        = 0x08,
        V9FS_ACCESS_CLIENT      = 0x10,
        V9FS_POSIX_ACL          = 0x20,
-       V9FS_NO_XATTR           = 0x40
+       V9FS_NO_XATTR           = 0x40,
+       V9FS_IGNORE_QV          = 0x80, /* ignore qid.version for cache hints */
+       V9FS_DIRECT_IO          = 0x100,
+       V9FS_SYNC               = 0x200
 };
 
 /* possible values of ->cache */