aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@citi.umich.edu>2009-12-14 12:53:32 -0500
committerJ. Bruce Fields <bfields@citi.umich.edu>2009-12-14 18:51:29 -0500
commite8e8753f7a32ce4f636771126fc8eba0dc4ad817 (patch)
treeb7298d70312e7ea267343ebe4ed001aa8f1986c8
parent9a74af21330c8d46efa977d088a62cc1bfa954e9 (diff)
nfsd: new interface to advertise export features
Soon we will add the new V4ROOT flag, and allow the INSECURE flag to vary by pseudoflavor. It would be useful for nfs-utils (for example, for improved exportfs error reporting) to be able to know when this happens. Use this new interface for that purpose. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
-rw-r--r--fs/nfsd/nfsctl.c21
-rw-r--r--include/linux/nfsd/export.h3
2 files changed, 23 insertions, 1 deletions
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index 0415680d3f58..e7051ac4dc73 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -31,6 +31,7 @@ enum {
31 NFSD_Getfd, 31 NFSD_Getfd,
32 NFSD_Getfs, 32 NFSD_Getfs,
33 NFSD_List, 33 NFSD_List,
34 NFSD_Export_features,
34 NFSD_Fh, 35 NFSD_Fh,
35 NFSD_FO_UnlockIP, 36 NFSD_FO_UnlockIP,
36 NFSD_FO_UnlockFS, 37 NFSD_FO_UnlockFS,
@@ -149,6 +150,24 @@ static const struct file_operations exports_operations = {
149 .owner = THIS_MODULE, 150 .owner = THIS_MODULE,
150}; 151};
151 152
153static int export_features_show(struct seq_file *m, void *v)
154{
155 seq_printf(m, "0x%x 0x%x\n", NFSEXP_ALLFLAGS, NFSEXP_SECINFO_FLAGS);
156 return 0;
157}
158
159static int export_features_open(struct inode *inode, struct file *file)
160{
161 return single_open(file, export_features_show, NULL);
162}
163
164static struct file_operations export_features_operations = {
165 .open = export_features_open,
166 .read = seq_read,
167 .llseek = seq_lseek,
168 .release = single_release,
169};
170
152extern int nfsd_pool_stats_open(struct inode *inode, struct file *file); 171extern int nfsd_pool_stats_open(struct inode *inode, struct file *file);
153extern int nfsd_pool_stats_release(struct inode *inode, struct file *file); 172extern int nfsd_pool_stats_release(struct inode *inode, struct file *file);
154 173
@@ -1306,6 +1325,8 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
1306 [NFSD_Getfd] = {".getfd", &transaction_ops, S_IWUSR|S_IRUSR}, 1325 [NFSD_Getfd] = {".getfd", &transaction_ops, S_IWUSR|S_IRUSR},
1307 [NFSD_Getfs] = {".getfs", &transaction_ops, S_IWUSR|S_IRUSR}, 1326 [NFSD_Getfs] = {".getfs", &transaction_ops, S_IWUSR|S_IRUSR},
1308 [NFSD_List] = {"exports", &exports_operations, S_IRUGO}, 1327 [NFSD_List] = {"exports", &exports_operations, S_IRUGO},
1328 [NFSD_Export_features] = {"export_features",
1329 &export_features_operations, S_IRUGO},
1309 [NFSD_FO_UnlockIP] = {"unlock_ip", 1330 [NFSD_FO_UnlockIP] = {"unlock_ip",
1310 &transaction_ops, S_IWUSR|S_IRUSR}, 1331 &transaction_ops, S_IWUSR|S_IRUSR},
1311 [NFSD_FO_UnlockFS] = {"unlock_filesystem", 1332 [NFSD_FO_UnlockFS] = {"unlock_filesystem",
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h
index ef3d416fcf67..4f1df1d7312c 100644
--- a/include/linux/nfsd/export.h
+++ b/include/linux/nfsd/export.h
@@ -39,7 +39,8 @@
39#define NFSEXP_FSID 0x2000 39#define NFSEXP_FSID 0x2000
40#define NFSEXP_CROSSMOUNT 0x4000 40#define NFSEXP_CROSSMOUNT 0x4000
41#define NFSEXP_NOACL 0x8000 /* reserved for possible ACL related use */ 41#define NFSEXP_NOACL 0x8000 /* reserved for possible ACL related use */
42#define NFSEXP_ALLFLAGS 0xFE3F 42/* All flags that we claim to support. (Note we don't support NOACL.) */
43#define NFSEXP_ALLFLAGS 0x7E3F
43 44
44/* The flags that may vary depending on security flavor: */ 45/* The flags that may vary depending on security flavor: */
45#define NFSEXP_SECINFO_FLAGS (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \ 46#define NFSEXP_SECINFO_FLAGS (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \