aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfs/client.c2
-rw-r--r--fs/nfs/internal.h1
-rw-r--r--fs/nfs/super.c25
3 files changed, 28 insertions, 0 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index 726fe5a845b4..75c9cd2aa119 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -765,6 +765,7 @@ static int nfs_init_server(struct nfs_server *server,
765 765
766 /* Initialise the client representation from the mount data */ 766 /* Initialise the client representation from the mount data */
767 server->flags = data->flags; 767 server->flags = data->flags;
768 server->options = data->options;
768 769
769 if (data->rsize) 770 if (data->rsize)
770 server->rsize = nfs_block_size(data->rsize, NULL); 771 server->rsize = nfs_block_size(data->rsize, NULL);
@@ -1153,6 +1154,7 @@ static int nfs4_init_server(struct nfs_server *server,
1153 /* Initialise the client representation from the mount data */ 1154 /* Initialise the client representation from the mount data */
1154 server->flags = data->flags; 1155 server->flags = data->flags;
1155 server->caps |= NFS_CAP_ATOMIC_OPEN; 1156 server->caps |= NFS_CAP_ATOMIC_OPEN;
1157 server->options = data->options;
1156 1158
1157 /* Get a client record */ 1159 /* Get a client record */
1158 error = nfs4_set_client(server, 1160 error = nfs4_set_client(server,
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
index 013070000c38..e4d6a8348adf 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -39,6 +39,7 @@ struct nfs_parsed_mount_data {
39 int acregmin, acregmax, 39 int acregmin, acregmax,
40 acdirmin, acdirmax; 40 acdirmin, acdirmax;
41 int namlen; 41 int namlen;
42 unsigned int options;
42 unsigned int bsize; 43 unsigned int bsize;
43 unsigned int auth_flavor_len; 44 unsigned int auth_flavor_len;
44 rpc_authflavor_t auth_flavors[1]; 45 rpc_authflavor_t auth_flavors[1];
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index b5fea776a0dc..82eaadbff408 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -77,6 +77,7 @@ enum {
77 Opt_rdirplus, Opt_nordirplus, 77 Opt_rdirplus, Opt_nordirplus,
78 Opt_sharecache, Opt_nosharecache, 78 Opt_sharecache, Opt_nosharecache,
79 Opt_resvport, Opt_noresvport, 79 Opt_resvport, Opt_noresvport,
80 Opt_fscache, Opt_nofscache,
80 81
81 /* Mount options that take integer arguments */ 82 /* Mount options that take integer arguments */
82 Opt_port, 83 Opt_port,
@@ -94,6 +95,7 @@ enum {
94 Opt_sec, Opt_proto, Opt_mountproto, Opt_mounthost, 95 Opt_sec, Opt_proto, Opt_mountproto, Opt_mounthost,
95 Opt_addr, Opt_mountaddr, Opt_clientaddr, 96 Opt_addr, Opt_mountaddr, Opt_clientaddr,
96 Opt_lookupcache, 97 Opt_lookupcache,
98 Opt_fscache_uniq,
97 99
98 /* Special mount options */ 100 /* Special mount options */
99 Opt_userspace, Opt_deprecated, Opt_sloppy, 101 Opt_userspace, Opt_deprecated, Opt_sloppy,
@@ -133,6 +135,9 @@ static const match_table_t nfs_mount_option_tokens = {
133 { Opt_nosharecache, "nosharecache" }, 135 { Opt_nosharecache, "nosharecache" },
134 { Opt_resvport, "resvport" }, 136 { Opt_resvport, "resvport" },
135 { Opt_noresvport, "noresvport" }, 137 { Opt_noresvport, "noresvport" },
138 { Opt_fscache, "fsc" },
139 { Opt_fscache_uniq, "fsc=%s" },
140 { Opt_nofscache, "nofsc" },
136 141
137 { Opt_port, "port=%u" }, 142 { Opt_port, "port=%u" },
138 { Opt_rsize, "rsize=%u" }, 143 { Opt_rsize, "rsize=%u" },
@@ -564,6 +569,8 @@ static void nfs_show_mount_options(struct seq_file *m, struct nfs_server *nfss,
564 if (clp->rpc_ops->version == 4) 569 if (clp->rpc_ops->version == 4)
565 seq_printf(m, ",clientaddr=%s", clp->cl_ipaddr); 570 seq_printf(m, ",clientaddr=%s", clp->cl_ipaddr);
566#endif 571#endif
572 if (nfss->options & NFS_OPTION_FSCACHE)
573 seq_printf(m, ",fsc");
567} 574}
568 575
569/* 576/*
@@ -1056,6 +1063,24 @@ static int nfs_parse_mount_options(char *raw,
1056 case Opt_noresvport: 1063 case Opt_noresvport:
1057 mnt->flags |= NFS_MOUNT_NORESVPORT; 1064 mnt->flags |= NFS_MOUNT_NORESVPORT;
1058 break; 1065 break;
1066 case Opt_fscache:
1067 mnt->options |= NFS_OPTION_FSCACHE;
1068 kfree(mnt->fscache_uniq);
1069 mnt->fscache_uniq = NULL;
1070 break;
1071 case Opt_nofscache:
1072 mnt->options &= ~NFS_OPTION_FSCACHE;
1073 kfree(mnt->fscache_uniq);
1074 mnt->fscache_uniq = NULL;
1075 break;
1076 case Opt_fscache_uniq:
1077 string = match_strdup(args);
1078 if (!string)
1079 goto out_nomem;
1080 kfree(mnt->fscache_uniq);
1081 mnt->fscache_uniq = string;
1082 mnt->options |= NFS_OPTION_FSCACHE;
1083 break;
1059 1084
1060 /* 1085 /*
1061 * options that take numeric values 1086 * options that take numeric values