Commit 677018a6 authored by David Howells's avatar David Howells Committed by Al Viro

afs: Implement show_options

Implement the show_options superblock op for afs as part of a bid to get
rid of s_options and generic_show_options() to make it easier to implement
a context-based mount where the mount options can be passed individually
over a file descriptor.

Also implement the show_devname op to display the correct device name and thus
avoid the need to display the cell= and volume= options.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
cc: linux-afs@lists.infradead.org
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 26a7655e
...@@ -37,6 +37,8 @@ static void afs_kill_super(struct super_block *sb); ...@@ -37,6 +37,8 @@ static void afs_kill_super(struct super_block *sb);
static struct inode *afs_alloc_inode(struct super_block *sb); static struct inode *afs_alloc_inode(struct super_block *sb);
static void afs_destroy_inode(struct inode *inode); static void afs_destroy_inode(struct inode *inode);
static int afs_statfs(struct dentry *dentry, struct kstatfs *buf); static int afs_statfs(struct dentry *dentry, struct kstatfs *buf);
static int afs_show_devname(struct seq_file *m, struct dentry *root);
static int afs_show_options(struct seq_file *m, struct dentry *root);
struct file_system_type afs_fs_type = { struct file_system_type afs_fs_type = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
...@@ -53,7 +55,8 @@ static const struct super_operations afs_super_ops = { ...@@ -53,7 +55,8 @@ static const struct super_operations afs_super_ops = {
.drop_inode = afs_drop_inode, .drop_inode = afs_drop_inode,
.destroy_inode = afs_destroy_inode, .destroy_inode = afs_destroy_inode,
.evict_inode = afs_evict_inode, .evict_inode = afs_evict_inode,
.show_options = generic_show_options, .show_devname = afs_show_devname,
.show_options = afs_show_options,
}; };
static struct kmem_cache *afs_inode_cachep; static struct kmem_cache *afs_inode_cachep;
...@@ -135,6 +138,45 @@ void __exit afs_fs_exit(void) ...@@ -135,6 +138,45 @@ void __exit afs_fs_exit(void)
_leave(""); _leave("");
} }
/*
* Display the mount device name in /proc/mounts.
*/
static int afs_show_devname(struct seq_file *m, struct dentry *root)
{
struct afs_super_info *as = root->d_sb->s_fs_info;
struct afs_volume *volume = as->volume;
struct afs_cell *cell = volume->cell;
const char *suf = "";
char pref = '%';
switch (volume->type) {
case AFSVL_RWVOL:
break;
case AFSVL_ROVOL:
pref = '#';
if (volume->type_force)
suf = ".readonly";
break;
case AFSVL_BACKVOL:
pref = '#';
suf = ".backup";
break;
}
seq_printf(m, "%c%s:%s%s", pref, cell->name, volume->vlocation->vldb.name, suf);
return 0;
}
/*
* Display the mount options in /proc/mounts.
*/
static int afs_show_options(struct seq_file *m, struct dentry *root)
{
if (test_bit(AFS_VNODE_AUTOCELL, &AFS_FS_I(d_inode(root))->flags))
seq_puts(m, "autocell");
return 0;
}
/* /*
* parse the mount options * parse the mount options
* - this function has been shamelessly adapted from the ext3 fs which * - this function has been shamelessly adapted from the ext3 fs which
...@@ -426,7 +468,6 @@ static struct dentry *afs_mount(struct file_system_type *fs_type, ...@@ -426,7 +468,6 @@ static struct dentry *afs_mount(struct file_system_type *fs_type,
deactivate_locked_super(sb); deactivate_locked_super(sb);
goto error; goto error;
} }
save_mount_options(sb, new_opts);
sb->s_flags |= MS_ACTIVE; sb->s_flags |= MS_ACTIVE;
} else { } else {
_debug("reuse"); _debug("reuse");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment