提交 d7c4a5f1 编写于 作者: I Ian Kent 提交者: Linus Torvalds

[PATCH] autofs4: add a show mount options for proc filesystem

Add show_options method to display autofs4 mount options in the proc
filesystem.
Signed-off-by: NIan Kent <raven@themaw.net>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 862b110f
...@@ -87,11 +87,14 @@ struct autofs_wait_queue { ...@@ -87,11 +87,14 @@ struct autofs_wait_queue {
struct autofs_sb_info { struct autofs_sb_info {
u32 magic; u32 magic;
struct dentry *root; struct dentry *root;
int pipefd;
struct file *pipe; struct file *pipe;
pid_t oz_pgrp; pid_t oz_pgrp;
int catatonic; int catatonic;
int version; int version;
int sub_version; int sub_version;
int min_proto;
int max_proto;
unsigned long exp_timeout; unsigned long exp_timeout;
int reghost_enabled; int reghost_enabled;
int needs_reghost; int needs_reghost;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/file.h> #include <linux/file.h>
#include <linux/seq_file.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/parser.h> #include <linux/parser.h>
#include <linux/bitops.h> #include <linux/bitops.h>
...@@ -163,9 +164,26 @@ static void autofs4_put_super(struct super_block *sb) ...@@ -163,9 +164,26 @@ static void autofs4_put_super(struct super_block *sb)
DPRINTK("shutting down"); DPRINTK("shutting down");
} }
static int autofs4_show_options(struct seq_file *m, struct vfsmount *mnt)
{
struct autofs_sb_info *sbi = autofs4_sbi(mnt->mnt_sb);
if (!sbi)
return 0;
seq_printf(m, ",fd=%d", sbi->pipefd);
seq_printf(m, ",pgrp=%d", sbi->oz_pgrp);
seq_printf(m, ",timeout=%lu", sbi->exp_timeout/HZ);
seq_printf(m, ",minproto=%d", sbi->min_proto);
seq_printf(m, ",maxproto=%d", sbi->max_proto);
return 0;
}
static struct super_operations autofs4_sops = { static struct super_operations autofs4_sops = {
.put_super = autofs4_put_super, .put_super = autofs4_put_super,
.statfs = simple_statfs, .statfs = simple_statfs,
.show_options = autofs4_show_options,
}; };
enum {Opt_err, Opt_fd, Opt_uid, Opt_gid, Opt_pgrp, Opt_minproto, Opt_maxproto}; enum {Opt_err, Opt_fd, Opt_uid, Opt_gid, Opt_pgrp, Opt_minproto, Opt_maxproto};
...@@ -261,7 +279,6 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent) ...@@ -261,7 +279,6 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent)
int pipefd; int pipefd;
struct autofs_sb_info *sbi; struct autofs_sb_info *sbi;
struct autofs_info *ino; struct autofs_info *ino;
int minproto, maxproto;
sbi = (struct autofs_sb_info *) kmalloc(sizeof(*sbi), GFP_KERNEL); sbi = (struct autofs_sb_info *) kmalloc(sizeof(*sbi), GFP_KERNEL);
if ( !sbi ) if ( !sbi )
...@@ -273,12 +290,15 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent) ...@@ -273,12 +290,15 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent)
s->s_fs_info = sbi; s->s_fs_info = sbi;
sbi->magic = AUTOFS_SBI_MAGIC; sbi->magic = AUTOFS_SBI_MAGIC;
sbi->root = NULL; sbi->root = NULL;
sbi->pipefd = -1;
sbi->catatonic = 0; sbi->catatonic = 0;
sbi->exp_timeout = 0; sbi->exp_timeout = 0;
sbi->oz_pgrp = process_group(current); sbi->oz_pgrp = process_group(current);
sbi->sb = s; sbi->sb = s;
sbi->version = 0; sbi->version = 0;
sbi->sub_version = 0; sbi->sub_version = 0;
sbi->min_proto = 0;
sbi->max_proto = 0;
mutex_init(&sbi->wq_mutex); mutex_init(&sbi->wq_mutex);
spin_lock_init(&sbi->fs_lock); spin_lock_init(&sbi->fs_lock);
sbi->queues = NULL; sbi->queues = NULL;
...@@ -311,22 +331,26 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent) ...@@ -311,22 +331,26 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent)
if (parse_options(data, &pipefd, if (parse_options(data, &pipefd,
&root_inode->i_uid, &root_inode->i_gid, &root_inode->i_uid, &root_inode->i_gid,
&sbi->oz_pgrp, &sbi->oz_pgrp,
&minproto, &maxproto)) { &sbi->min_proto, &sbi->max_proto)) {
printk("autofs: called with bogus options\n"); printk("autofs: called with bogus options\n");
goto fail_dput; goto fail_dput;
} }
/* Couldn't this be tested earlier? */ /* Couldn't this be tested earlier? */
if (maxproto < AUTOFS_MIN_PROTO_VERSION || if (sbi->max_proto < AUTOFS_MIN_PROTO_VERSION ||
minproto > AUTOFS_MAX_PROTO_VERSION) { sbi->min_proto > AUTOFS_MAX_PROTO_VERSION) {
printk("autofs: kernel does not match daemon version " printk("autofs: kernel does not match daemon version "
"daemon (%d, %d) kernel (%d, %d)\n", "daemon (%d, %d) kernel (%d, %d)\n",
minproto, maxproto, sbi->min_proto, sbi->max_proto,
AUTOFS_MIN_PROTO_VERSION, AUTOFS_MAX_PROTO_VERSION); AUTOFS_MIN_PROTO_VERSION, AUTOFS_MAX_PROTO_VERSION);
goto fail_dput; goto fail_dput;
} }
sbi->version = maxproto > AUTOFS_MAX_PROTO_VERSION ? AUTOFS_MAX_PROTO_VERSION : maxproto; /* Establish highest kernel protocol version */
if (sbi->max_proto > AUTOFS_MAX_PROTO_VERSION)
sbi->version = AUTOFS_MAX_PROTO_VERSION;
else
sbi->version = sbi->max_proto;
sbi->sub_version = AUTOFS_PROTO_SUBVERSION; sbi->sub_version = AUTOFS_PROTO_SUBVERSION;
DPRINTK("pipe fd = %d, pgrp = %u", pipefd, sbi->oz_pgrp); DPRINTK("pipe fd = %d, pgrp = %u", pipefd, sbi->oz_pgrp);
...@@ -339,6 +363,7 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent) ...@@ -339,6 +363,7 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent)
if ( !pipe->f_op || !pipe->f_op->write ) if ( !pipe->f_op || !pipe->f_op->write )
goto fail_fput; goto fail_fput;
sbi->pipe = pipe; sbi->pipe = pipe;
sbi->pipefd = pipefd;
/* /*
* Take a reference to the root dentry so we get a chance to * Take a reference to the root dentry so we get a chance to
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册