[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: Ian Kent <raven@themaw.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Родитель
862b110f01
Коммит
d7c4a5f108
|
@ -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 @@
|
||||||
#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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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
|
||||||
|
|
Загрузка…
Ссылка в новой задаче