|
@@ -31,6 +31,7 @@ enum {
|
|
|
NFSD_Getfd,
|
|
|
NFSD_Getfs,
|
|
|
NFSD_List,
|
|
|
+ NFSD_Export_features,
|
|
|
NFSD_Fh,
|
|
|
NFSD_FO_UnlockIP,
|
|
|
NFSD_FO_UnlockFS,
|
|
@@ -149,6 +150,24 @@ static const struct file_operations exports_operations = {
|
|
|
.owner = THIS_MODULE,
|
|
|
};
|
|
|
|
|
|
+static int export_features_show(struct seq_file *m, void *v)
|
|
|
+{
|
|
|
+ seq_printf(m, "0x%x 0x%x\n", NFSEXP_ALLFLAGS, NFSEXP_SECINFO_FLAGS);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int export_features_open(struct inode *inode, struct file *file)
|
|
|
+{
|
|
|
+ return single_open(file, export_features_show, NULL);
|
|
|
+}
|
|
|
+
|
|
|
+static struct file_operations export_features_operations = {
|
|
|
+ .open = export_features_open,
|
|
|
+ .read = seq_read,
|
|
|
+ .llseek = seq_lseek,
|
|
|
+ .release = single_release,
|
|
|
+};
|
|
|
+
|
|
|
extern int nfsd_pool_stats_open(struct inode *inode, struct file *file);
|
|
|
extern int nfsd_pool_stats_release(struct inode *inode, struct file *file);
|
|
|
|
|
@@ -1306,6 +1325,8 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
|
|
|
[NFSD_Getfd] = {".getfd", &transaction_ops, S_IWUSR|S_IRUSR},
|
|
|
[NFSD_Getfs] = {".getfs", &transaction_ops, S_IWUSR|S_IRUSR},
|
|
|
[NFSD_List] = {"exports", &exports_operations, S_IRUGO},
|
|
|
+ [NFSD_Export_features] = {"export_features",
|
|
|
+ &export_features_operations, S_IRUGO},
|
|
|
[NFSD_FO_UnlockIP] = {"unlock_ip",
|
|
|
&transaction_ops, S_IWUSR|S_IRUSR},
|
|
|
[NFSD_FO_UnlockFS] = {"unlock_filesystem",
|