diff options
author | David Howells <dhowells@redhat.com> | 2017-07-05 11:25:03 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2017-07-11 06:06:17 -0400 |
commit | 3ab7947ac3b5cd625c186bb608678bffd881e472 (patch) | |
tree | d1487e21f4c1cc3f6a3fef517814c2476a3c9256 | |
parent | a66ca4146f3f736ff968c099926ccb1c1761b1a4 (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.c | 24 |
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, | |||
53 | static void befs_put_super(struct super_block *); | 54 | static void befs_put_super(struct super_block *); |
54 | static int befs_remount(struct super_block *, int *, char *); | 55 | static int befs_remount(struct super_block *, int *, char *); |
55 | static int befs_statfs(struct dentry *, struct kstatfs *); | 56 | static int befs_statfs(struct dentry *, struct kstatfs *); |
57 | static int befs_show_options(struct seq_file *, struct dentry *); | ||
56 | static int parse_options(char *, struct befs_mount_options *); | 58 | static int parse_options(char *, struct befs_mount_options *); |
57 | static struct dentry *befs_fh_to_dentry(struct super_block *sb, | 59 | static 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 | ||
776 | static 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; |