]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
NFS: Add mount options supporting eager writes
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 12 Feb 2021 21:49:49 +0000 (16:49 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Tue, 16 Feb 2021 21:11:14 +0000 (16:11 -0500)
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/fs_context.c

index 06894bcdea2db6321a86e410bd2a81ba384437a0..b6be02aa79f0af329dfbdc1e7e263b7aabf2fa7e 100644 (file)
@@ -82,6 +82,7 @@ enum nfs_param {
        Opt_v,
        Opt_vers,
        Opt_wsize,
+       Opt_write,
 };
 
 enum {
@@ -113,6 +114,19 @@ static const struct constant_table nfs_param_enums_lookupcache[] = {
        {}
 };
 
+enum {
+       Opt_write_lazy,
+       Opt_write_eager,
+       Opt_write_wait,
+};
+
+static const struct constant_table nfs_param_enums_write[] = {
+       { "lazy",               Opt_write_lazy },
+       { "eager",              Opt_write_eager },
+       { "wait",               Opt_write_wait },
+       {}
+};
+
 static const struct fs_parameter_spec nfs_fs_parameters[] = {
        fsparam_flag_no("ac",           Opt_ac),
        fsparam_u32   ("acdirmax",      Opt_acdirmax),
@@ -171,6 +185,7 @@ static const struct fs_parameter_spec nfs_fs_parameters[] = {
        fsparam_flag  ("v4.1",          Opt_v),
        fsparam_flag  ("v4.2",          Opt_v),
        fsparam_string("vers",          Opt_vers),
+       fsparam_enum  ("write",         Opt_write, nfs_param_enums_write),
        fsparam_u32   ("wsize",         Opt_wsize),
        {}
 };
@@ -770,6 +785,24 @@ static int nfs_fs_context_parse_param(struct fs_context *fc,
                        goto out_invalid_value;
                }
                break;
+       case Opt_write:
+               switch (result.uint_32) {
+               case Opt_write_lazy:
+                       ctx->flags &=
+                               ~(NFS_MOUNT_WRITE_EAGER | NFS_MOUNT_WRITE_WAIT);
+                       break;
+               case Opt_write_eager:
+                       ctx->flags |= NFS_MOUNT_WRITE_EAGER;
+                       ctx->flags &= ~NFS_MOUNT_WRITE_WAIT;
+                       break;
+               case Opt_write_wait:
+                       ctx->flags |=
+                               NFS_MOUNT_WRITE_EAGER | NFS_MOUNT_WRITE_WAIT;
+                       break;
+               default:
+                       goto out_invalid_value;
+               }
+               break;
 
                /*
                 * Special options