aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2017-07-05 11:25:03 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2017-07-11 06:06:17 -0400
commit3ab7947ac3b5cd625c186bb608678bffd881e472 (patch)
treed1487e21f4c1cc3f6a3fef517814c2476a3c9256
parenta66ca4146f3f736ff968c099926ccb1c1761b1a4 (diff)
befs: Implement show_options
Implement the show_options superblock op for befs 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. Signed-off-by: David Howells <dhowells@redhat.com> cc: Luis de Bethencourt <luisbg@osg.samsung.com> cc: Salah Triki <salah.triki@gmail.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--fs/befs/linuxvfs.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c
index 63e7c4760bfb..4a4a5a366158 100644
--- a/fs/befs/linuxvfs.c
+++ b/fs/befs/linuxvfs.c
@@ -20,6 +20,7 @@
20#include <linux/sched.h> 20#include <linux/sched.h>
21#include <linux/cred.h> 21#include <linux/cred.h>
22#include <linux/exportfs.h> 22#include <linux/exportfs.h>
23#include <linux/seq_file.h>
23 24
24#include "befs.h" 25#include "befs.h"
25#include "btree.h" 26#include "btree.h"
@@ -53,6 +54,7 @@ static int befs_nls2utf(struct super_block *sb, const char *in, int in_len,
53static void befs_put_super(struct super_block *); 54static void befs_put_super(struct super_block *);
54static int befs_remount(struct super_block *, int *, char *); 55static int befs_remount(struct super_block *, int *, char *);
55static int befs_statfs(struct dentry *, struct kstatfs *); 56static int befs_statfs(struct dentry *, struct kstatfs *);
57static int befs_show_options(struct seq_file *, struct dentry *);
56static int parse_options(char *, struct befs_mount_options *); 58static int parse_options(char *, struct befs_mount_options *);
57static struct dentry *befs_fh_to_dentry(struct super_block *sb, 59static struct dentry *befs_fh_to_dentry(struct super_block *sb,
58 struct fid *fid, int fh_len, int fh_type); 60 struct fid *fid, int fh_len, int fh_type);
@@ -66,7 +68,7 @@ static const struct super_operations befs_sops = {
66 .put_super = befs_put_super, /* uninit super */ 68 .put_super = befs_put_super, /* uninit super */
67 .statfs = befs_statfs, /* statfs */ 69 .statfs = befs_statfs, /* statfs */
68 .remount_fs = befs_remount, 70 .remount_fs = befs_remount,
69 .show_options = generic_show_options, 71 .show_options = befs_show_options,
70}; 72};
71 73
72/* slab cache for befs_inode_info objects */ 74/* slab cache for befs_inode_info objects */
@@ -771,6 +773,24 @@ parse_options(char *options, struct befs_mount_options *opts)
771 return 1; 773 return 1;
772} 774}
773 775
776static int befs_show_options(struct seq_file *m, struct dentry *root)
777{
778 struct befs_sb_info *befs_sb = BEFS_SB(root->d_sb);
779 struct befs_mount_options *opts = &befs_sb->mount_opts;
780
781 if (!uid_eq(opts->uid, GLOBAL_ROOT_UID))
782 seq_printf(m, ",uid=%u",
783 from_kuid_munged(&init_user_ns, opts->uid));
784 if (!gid_eq(opts->gid, GLOBAL_ROOT_GID))
785 seq_printf(m, ",gid=%u",
786 from_kgid_munged(&init_user_ns, opts->gid));
787 if (opts->iocharset)
788 seq_printf(m, ",charset=%s", opts->iocharset);
789 if (opts->debug)
790 seq_puts(m, ",debug");
791 return 0;
792}
793
774/* This function has the responsibiltiy of getting the 794/* This function has the responsibiltiy of getting the
775 * filesystem ready for unmounting. 795 * filesystem ready for unmounting.
776 * Basically, we free everything that we allocated in 796 * Basically, we free everything that we allocated in
@@ -804,8 +824,6 @@ befs_fill_super(struct super_block *sb, void *data, int silent)
804 const off_t x86_sb_off = 512; 824 const off_t x86_sb_off = 512;
805 int blocksize; 825 int blocksize;
806 826
807 save_mount_options(sb, data);
808
809 sb->s_fs_info = kzalloc(sizeof(*befs_sb), GFP_KERNEL); 827 sb->s_fs_info = kzalloc(sizeof(*befs_sb), GFP_KERNEL);
810 if (sb->s_fs_info == NULL) 828 if (sb->s_fs_info == NULL)
811 goto unacquire_none; 829 goto unacquire_none;