mount options: fix ncpfs
Add a .show_options super operation to ncpfs. Small fix: add FS_BINARY_MOUNTDATA to the filesystem type flags, since it can take binary data, as well as text (similarly to NFS). Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
d0132eea7a
Коммит
564cd138cb
|
@ -28,6 +28,8 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/vfs.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/seq_file.h>
|
||||
|
||||
#include <linux/ncp_fs.h>
|
||||
|
||||
|
@ -36,9 +38,15 @@
|
|||
#include "ncplib_kernel.h"
|
||||
#include "getopt.h"
|
||||
|
||||
#define NCP_DEFAULT_FILE_MODE 0600
|
||||
#define NCP_DEFAULT_DIR_MODE 0700
|
||||
#define NCP_DEFAULT_TIME_OUT 10
|
||||
#define NCP_DEFAULT_RETRY_COUNT 20
|
||||
|
||||
static void ncp_delete_inode(struct inode *);
|
||||
static void ncp_put_super(struct super_block *);
|
||||
static int ncp_statfs(struct dentry *, struct kstatfs *);
|
||||
static int ncp_show_options(struct seq_file *, struct vfsmount *);
|
||||
|
||||
static struct kmem_cache * ncp_inode_cachep;
|
||||
|
||||
|
@ -96,6 +104,7 @@ static const struct super_operations ncp_sops =
|
|||
.put_super = ncp_put_super,
|
||||
.statfs = ncp_statfs,
|
||||
.remount_fs = ncp_remount,
|
||||
.show_options = ncp_show_options,
|
||||
};
|
||||
|
||||
extern struct dentry_operations ncp_root_dentry_operations;
|
||||
|
@ -304,6 +313,37 @@ static void ncp_stop_tasks(struct ncp_server *server) {
|
|||
flush_scheduled_work();
|
||||
}
|
||||
|
||||
static int ncp_show_options(struct seq_file *seq, struct vfsmount *mnt)
|
||||
{
|
||||
struct ncp_server *server = NCP_SBP(mnt->mnt_sb);
|
||||
unsigned int tmp;
|
||||
|
||||
if (server->m.uid != 0)
|
||||
seq_printf(seq, ",uid=%u", server->m.uid);
|
||||
if (server->m.gid != 0)
|
||||
seq_printf(seq, ",gid=%u", server->m.gid);
|
||||
if (server->m.mounted_uid != 0)
|
||||
seq_printf(seq, ",owner=%u", server->m.mounted_uid);
|
||||
tmp = server->m.file_mode & S_IALLUGO;
|
||||
if (tmp != NCP_DEFAULT_FILE_MODE)
|
||||
seq_printf(seq, ",mode=0%o", tmp);
|
||||
tmp = server->m.dir_mode & S_IALLUGO;
|
||||
if (tmp != NCP_DEFAULT_DIR_MODE)
|
||||
seq_printf(seq, ",dirmode=0%o", tmp);
|
||||
if (server->m.time_out != NCP_DEFAULT_TIME_OUT * HZ / 100) {
|
||||
tmp = server->m.time_out * 100 / HZ;
|
||||
seq_printf(seq, ",timeout=%u", tmp);
|
||||
}
|
||||
if (server->m.retry_count != NCP_DEFAULT_RETRY_COUNT)
|
||||
seq_printf(seq, ",retry=%u", server->m.retry_count);
|
||||
if (server->m.flags != 0)
|
||||
seq_printf(seq, ",flags=%lu", server->m.flags);
|
||||
if (server->m.wdog_pid != NULL)
|
||||
seq_printf(seq, ",wdogpid=%u", pid_vnr(server->m.wdog_pid));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct ncp_option ncp_opts[] = {
|
||||
{ "uid", OPT_INT, 'u' },
|
||||
{ "gid", OPT_INT, 'g' },
|
||||
|
@ -331,12 +371,12 @@ static int ncp_parse_options(struct ncp_mount_data_kernel *data, char *options)
|
|||
data->mounted_uid = 0;
|
||||
data->wdog_pid = NULL;
|
||||
data->ncp_fd = ~0;
|
||||
data->time_out = 10;
|
||||
data->retry_count = 20;
|
||||
data->time_out = NCP_DEFAULT_TIME_OUT;
|
||||
data->retry_count = NCP_DEFAULT_RETRY_COUNT;
|
||||
data->uid = 0;
|
||||
data->gid = 0;
|
||||
data->file_mode = 0600;
|
||||
data->dir_mode = 0700;
|
||||
data->file_mode = NCP_DEFAULT_FILE_MODE;
|
||||
data->dir_mode = NCP_DEFAULT_DIR_MODE;
|
||||
data->info_fd = -1;
|
||||
data->mounted_vol[0] = 0;
|
||||
|
||||
|
@ -982,6 +1022,7 @@ static struct file_system_type ncp_fs_type = {
|
|||
.name = "ncpfs",
|
||||
.get_sb = ncp_get_sb,
|
||||
.kill_sb = kill_anon_super,
|
||||
.fs_flags = FS_BINARY_MOUNTDATA,
|
||||
};
|
||||
|
||||
static int __init init_ncp_fs(void)
|
||||
|
|
Загрузка…
Ссылка в новой задаче