diff options
Diffstat (limited to 'fs/9p/vfs_super.c')
| -rw-r--r-- | fs/9p/vfs_super.c | 39 |
1 files changed, 12 insertions, 27 deletions
diff --git a/fs/9p/vfs_super.c b/fs/9p/vfs_super.c index 38d695d66a0b..8961f1a8f668 100644 --- a/fs/9p/vfs_super.c +++ b/fs/9p/vfs_super.c | |||
| @@ -81,7 +81,7 @@ static int v9fs_set_super(struct super_block *s, void *data) | |||
| 81 | 81 | ||
| 82 | static void | 82 | static void |
| 83 | v9fs_fill_super(struct super_block *sb, struct v9fs_session_info *v9ses, | 83 | v9fs_fill_super(struct super_block *sb, struct v9fs_session_info *v9ses, |
| 84 | int flags) | 84 | int flags, void *data) |
| 85 | { | 85 | { |
| 86 | sb->s_maxbytes = MAX_LFS_FILESIZE; | 86 | sb->s_maxbytes = MAX_LFS_FILESIZE; |
| 87 | sb->s_blocksize_bits = fls(v9ses->maxdata - 1); | 87 | sb->s_blocksize_bits = fls(v9ses->maxdata - 1); |
| @@ -91,6 +91,8 @@ v9fs_fill_super(struct super_block *sb, struct v9fs_session_info *v9ses, | |||
| 91 | 91 | ||
| 92 | sb->s_flags = flags | MS_ACTIVE | MS_SYNCHRONOUS | MS_DIRSYNC | | 92 | sb->s_flags = flags | MS_ACTIVE | MS_SYNCHRONOUS | MS_DIRSYNC | |
| 93 | MS_NOATIME; | 93 | MS_NOATIME; |
| 94 | |||
| 95 | save_mount_options(sb, data); | ||
| 94 | } | 96 | } |
| 95 | 97 | ||
| 96 | /** | 98 | /** |
| @@ -113,14 +115,11 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, | |||
| 113 | struct v9fs_session_info *v9ses = NULL; | 115 | struct v9fs_session_info *v9ses = NULL; |
| 114 | struct p9_wstat *st = NULL; | 116 | struct p9_wstat *st = NULL; |
| 115 | int mode = S_IRWXUGO | S_ISVTX; | 117 | int mode = S_IRWXUGO | S_ISVTX; |
| 116 | uid_t uid = current_fsuid(); | ||
| 117 | gid_t gid = current_fsgid(); | ||
| 118 | struct p9_fid *fid; | 118 | struct p9_fid *fid; |
| 119 | int retval = 0; | 119 | int retval = 0; |
| 120 | 120 | ||
| 121 | P9_DPRINTK(P9_DEBUG_VFS, " \n"); | 121 | P9_DPRINTK(P9_DEBUG_VFS, " \n"); |
| 122 | 122 | ||
| 123 | st = NULL; | ||
| 124 | v9ses = kzalloc(sizeof(struct v9fs_session_info), GFP_KERNEL); | 123 | v9ses = kzalloc(sizeof(struct v9fs_session_info), GFP_KERNEL); |
| 125 | if (!v9ses) | 124 | if (!v9ses) |
| 126 | return -ENOMEM; | 125 | return -ENOMEM; |
| @@ -142,7 +141,7 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, | |||
| 142 | retval = PTR_ERR(sb); | 141 | retval = PTR_ERR(sb); |
| 143 | goto free_stat; | 142 | goto free_stat; |
| 144 | } | 143 | } |
| 145 | v9fs_fill_super(sb, v9ses, flags); | 144 | v9fs_fill_super(sb, v9ses, flags, data); |
| 146 | 145 | ||
| 147 | inode = v9fs_get_inode(sb, S_IFDIR | mode); | 146 | inode = v9fs_get_inode(sb, S_IFDIR | mode); |
| 148 | if (IS_ERR(inode)) { | 147 | if (IS_ERR(inode)) { |
| @@ -150,9 +149,6 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, | |||
| 150 | goto release_sb; | 149 | goto release_sb; |
| 151 | } | 150 | } |
| 152 | 151 | ||
| 153 | inode->i_uid = uid; | ||
| 154 | inode->i_gid = gid; | ||
| 155 | |||
| 156 | root = d_alloc_root(inode); | 152 | root = d_alloc_root(inode); |
| 157 | if (!root) { | 153 | if (!root) { |
| 158 | iput(inode); | 154 | iput(inode); |
| @@ -173,10 +169,8 @@ P9_DPRINTK(P9_DEBUG_VFS, " simple set mount, return 0\n"); | |||
| 173 | simple_set_mnt(mnt, sb); | 169 | simple_set_mnt(mnt, sb); |
| 174 | return 0; | 170 | return 0; |
| 175 | 171 | ||
| 176 | release_sb: | ||
| 177 | deactivate_locked_super(sb); | ||
| 178 | |||
| 179 | free_stat: | 172 | free_stat: |
| 173 | p9stat_free(st); | ||
| 180 | kfree(st); | 174 | kfree(st); |
| 181 | 175 | ||
| 182 | clunk_fid: | 176 | clunk_fid: |
| @@ -185,7 +179,12 @@ clunk_fid: | |||
| 185 | close_session: | 179 | close_session: |
| 186 | v9fs_session_close(v9ses); | 180 | v9fs_session_close(v9ses); |
| 187 | kfree(v9ses); | 181 | kfree(v9ses); |
| 182 | return retval; | ||
| 188 | 183 | ||
| 184 | release_sb: | ||
| 185 | p9stat_free(st); | ||
| 186 | kfree(st); | ||
| 187 | deactivate_locked_super(sb); | ||
| 189 | return retval; | 188 | return retval; |
| 190 | } | 189 | } |
| 191 | 190 | ||
| @@ -207,24 +206,10 @@ static void v9fs_kill_super(struct super_block *s) | |||
| 207 | 206 | ||
| 208 | v9fs_session_close(v9ses); | 207 | v9fs_session_close(v9ses); |
| 209 | kfree(v9ses); | 208 | kfree(v9ses); |
| 209 | s->s_fs_info = NULL; | ||
| 210 | P9_DPRINTK(P9_DEBUG_VFS, "exiting kill_super\n"); | 210 | P9_DPRINTK(P9_DEBUG_VFS, "exiting kill_super\n"); |
| 211 | } | 211 | } |
| 212 | 212 | ||
| 213 | /** | ||
| 214 | * v9fs_show_options - Show mount options in /proc/mounts | ||
| 215 | * @m: seq_file to write to | ||
| 216 | * @mnt: mount descriptor | ||
| 217 | * | ||
| 218 | */ | ||
| 219 | |||
| 220 | static int v9fs_show_options(struct seq_file *m, struct vfsmount *mnt) | ||
| 221 | { | ||
| 222 | struct v9fs_session_info *v9ses = mnt->mnt_sb->s_fs_info; | ||
| 223 | |||
| 224 | seq_printf(m, "%s", v9ses->options); | ||
| 225 | return 0; | ||
| 226 | } | ||
| 227 | |||
| 228 | static void | 213 | static void |
| 229 | v9fs_umount_begin(struct super_block *sb) | 214 | v9fs_umount_begin(struct super_block *sb) |
| 230 | { | 215 | { |
| @@ -237,7 +222,7 @@ v9fs_umount_begin(struct super_block *sb) | |||
| 237 | static const struct super_operations v9fs_super_ops = { | 222 | static const struct super_operations v9fs_super_ops = { |
| 238 | .statfs = simple_statfs, | 223 | .statfs = simple_statfs, |
| 239 | .clear_inode = v9fs_clear_inode, | 224 | .clear_inode = v9fs_clear_inode, |
| 240 | .show_options = v9fs_show_options, | 225 | .show_options = generic_show_options, |
| 241 | .umount_begin = v9fs_umount_begin, | 226 | .umount_begin = v9fs_umount_begin, |
| 242 | }; | 227 | }; |
| 243 | 228 | ||
