diff options
Diffstat (limited to 'fs/nfsd/nfsctl.c')
-rw-r--r-- | fs/nfsd/nfsctl.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c index d6881774ea57..d4041a05bc19 100644 --- a/fs/nfsd/nfsctl.c +++ b/fs/nfsd/nfsctl.c | |||
@@ -23,10 +23,12 @@ | |||
23 | #include <linux/pagemap.h> | 23 | #include <linux/pagemap.h> |
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/string.h> | 25 | #include <linux/string.h> |
26 | #include <linux/smp_lock.h> | ||
26 | 27 | ||
27 | #include <linux/nfs.h> | 28 | #include <linux/nfs.h> |
28 | #include <linux/nfsd_idmap.h> | 29 | #include <linux/nfsd_idmap.h> |
29 | #include <linux/sunrpc/svc.h> | 30 | #include <linux/sunrpc/svc.h> |
31 | #include <linux/sunrpc/svcsock.h> | ||
30 | #include <linux/nfsd/nfsd.h> | 32 | #include <linux/nfsd/nfsd.h> |
31 | #include <linux/nfsd/cache.h> | 33 | #include <linux/nfsd/cache.h> |
32 | #include <linux/nfsd/xdr.h> | 34 | #include <linux/nfsd/xdr.h> |
@@ -51,6 +53,7 @@ enum { | |||
51 | NFSD_Fh, | 53 | NFSD_Fh, |
52 | NFSD_Threads, | 54 | NFSD_Threads, |
53 | NFSD_Versions, | 55 | NFSD_Versions, |
56 | NFSD_Ports, | ||
54 | /* | 57 | /* |
55 | * The below MUST come last. Otherwise we leave a hole in nfsd_files[] | 58 | * The below MUST come last. Otherwise we leave a hole in nfsd_files[] |
56 | * with !CONFIG_NFSD_V4 and simple_fill_super() goes oops | 59 | * with !CONFIG_NFSD_V4 and simple_fill_super() goes oops |
@@ -74,6 +77,7 @@ static ssize_t write_getfs(struct file *file, char *buf, size_t size); | |||
74 | static ssize_t write_filehandle(struct file *file, char *buf, size_t size); | 77 | static ssize_t write_filehandle(struct file *file, char *buf, size_t size); |
75 | static ssize_t write_threads(struct file *file, char *buf, size_t size); | 78 | static ssize_t write_threads(struct file *file, char *buf, size_t size); |
76 | static ssize_t write_versions(struct file *file, char *buf, size_t size); | 79 | static ssize_t write_versions(struct file *file, char *buf, size_t size); |
80 | static ssize_t write_ports(struct file *file, char *buf, size_t size); | ||
77 | #ifdef CONFIG_NFSD_V4 | 81 | #ifdef CONFIG_NFSD_V4 |
78 | static ssize_t write_leasetime(struct file *file, char *buf, size_t size); | 82 | static ssize_t write_leasetime(struct file *file, char *buf, size_t size); |
79 | static ssize_t write_recoverydir(struct file *file, char *buf, size_t size); | 83 | static ssize_t write_recoverydir(struct file *file, char *buf, size_t size); |
@@ -90,6 +94,7 @@ static ssize_t (*write_op[])(struct file *, char *, size_t) = { | |||
90 | [NFSD_Fh] = write_filehandle, | 94 | [NFSD_Fh] = write_filehandle, |
91 | [NFSD_Threads] = write_threads, | 95 | [NFSD_Threads] = write_threads, |
92 | [NFSD_Versions] = write_versions, | 96 | [NFSD_Versions] = write_versions, |
97 | [NFSD_Ports] = write_ports, | ||
93 | #ifdef CONFIG_NFSD_V4 | 98 | #ifdef CONFIG_NFSD_V4 |
94 | [NFSD_Leasetime] = write_leasetime, | 99 | [NFSD_Leasetime] = write_leasetime, |
95 | [NFSD_RecoveryDir] = write_recoverydir, | 100 | [NFSD_RecoveryDir] = write_recoverydir, |
@@ -419,6 +424,20 @@ static ssize_t write_versions(struct file *file, char *buf, size_t size) | |||
419 | return len; | 424 | return len; |
420 | } | 425 | } |
421 | 426 | ||
427 | static ssize_t write_ports(struct file *file, char *buf, size_t size) | ||
428 | { | ||
429 | /* for now, ignore what was written and just | ||
430 | * return known ports | ||
431 | * AF proto address port | ||
432 | */ | ||
433 | int len = 0; | ||
434 | lock_kernel(); | ||
435 | if (nfsd_serv) | ||
436 | len = svc_sock_names(buf, nfsd_serv); | ||
437 | unlock_kernel(); | ||
438 | return len; | ||
439 | } | ||
440 | |||
422 | #ifdef CONFIG_NFSD_V4 | 441 | #ifdef CONFIG_NFSD_V4 |
423 | extern time_t nfs4_leasetime(void); | 442 | extern time_t nfs4_leasetime(void); |
424 | 443 | ||
@@ -482,6 +501,7 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent) | |||
482 | [NFSD_Fh] = {"filehandle", &transaction_ops, S_IWUSR|S_IRUSR}, | 501 | [NFSD_Fh] = {"filehandle", &transaction_ops, S_IWUSR|S_IRUSR}, |
483 | [NFSD_Threads] = {"threads", &transaction_ops, S_IWUSR|S_IRUSR}, | 502 | [NFSD_Threads] = {"threads", &transaction_ops, S_IWUSR|S_IRUSR}, |
484 | [NFSD_Versions] = {"versions", &transaction_ops, S_IWUSR|S_IRUSR}, | 503 | [NFSD_Versions] = {"versions", &transaction_ops, S_IWUSR|S_IRUSR}, |
504 | [NFSD_Ports] = {"portlist", &transaction_ops, S_IWUSR|S_IRUGO}, | ||
485 | #ifdef CONFIG_NFSD_V4 | 505 | #ifdef CONFIG_NFSD_V4 |
486 | [NFSD_Leasetime] = {"nfsv4leasetime", &transaction_ops, S_IWUSR|S_IRUSR}, | 506 | [NFSD_Leasetime] = {"nfsv4leasetime", &transaction_ops, S_IWUSR|S_IRUSR}, |
487 | [NFSD_RecoveryDir] = {"nfsv4recoverydir", &transaction_ops, S_IWUSR|S_IRUSR}, | 507 | [NFSD_RecoveryDir] = {"nfsv4recoverydir", &transaction_ops, S_IWUSR|S_IRUSR}, |