diff options
Diffstat (limited to 'fs/ext2')
-rw-r--r-- | fs/ext2/super.c | 59 |
1 files changed, 52 insertions, 7 deletions
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index dcfe331dc4c4..3c0c7c6a5b44 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/config.h> | 19 | #include <linux/config.h> |
20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
21 | #include <linux/string.h> | 21 | #include <linux/string.h> |
22 | #include <linux/fs.h> | ||
22 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
23 | #include <linux/init.h> | 24 | #include <linux/init.h> |
24 | #include <linux/blkdev.h> | 25 | #include <linux/blkdev.h> |
@@ -27,6 +28,8 @@ | |||
27 | #include <linux/buffer_head.h> | 28 | #include <linux/buffer_head.h> |
28 | #include <linux/smp_lock.h> | 29 | #include <linux/smp_lock.h> |
29 | #include <linux/vfs.h> | 30 | #include <linux/vfs.h> |
31 | #include <linux/seq_file.h> | ||
32 | #include <linux/mount.h> | ||
30 | #include <asm/uaccess.h> | 33 | #include <asm/uaccess.h> |
31 | #include "ext2.h" | 34 | #include "ext2.h" |
32 | #include "xattr.h" | 35 | #include "xattr.h" |
@@ -201,6 +204,26 @@ static void ext2_clear_inode(struct inode *inode) | |||
201 | #endif | 204 | #endif |
202 | } | 205 | } |
203 | 206 | ||
207 | static int ext2_show_options(struct seq_file *seq, struct vfsmount *vfs) | ||
208 | { | ||
209 | struct ext2_sb_info *sbi = EXT2_SB(vfs->mnt_sb); | ||
210 | |||
211 | if (sbi->s_mount_opt & EXT2_MOUNT_GRPID) | ||
212 | seq_puts(seq, ",grpid"); | ||
213 | else | ||
214 | seq_puts(seq, ",nogrpid"); | ||
215 | |||
216 | #if defined(CONFIG_QUOTA) | ||
217 | if (sbi->s_mount_opt & EXT2_MOUNT_USRQUOTA) | ||
218 | seq_puts(seq, ",usrquota"); | ||
219 | |||
220 | if (sbi->s_mount_opt & EXT2_MOUNT_GRPQUOTA) | ||
221 | seq_puts(seq, ",grpquota"); | ||
222 | #endif | ||
223 | |||
224 | return 0; | ||
225 | } | ||
226 | |||
204 | #ifdef CONFIG_QUOTA | 227 | #ifdef CONFIG_QUOTA |
205 | static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data, size_t len, loff_t off); | 228 | static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data, size_t len, loff_t off); |
206 | static ssize_t ext2_quota_write(struct super_block *sb, int type, const char *data, size_t len, loff_t off); | 229 | static ssize_t ext2_quota_write(struct super_block *sb, int type, const char *data, size_t len, loff_t off); |
@@ -218,6 +241,7 @@ static struct super_operations ext2_sops = { | |||
218 | .statfs = ext2_statfs, | 241 | .statfs = ext2_statfs, |
219 | .remount_fs = ext2_remount, | 242 | .remount_fs = ext2_remount, |
220 | .clear_inode = ext2_clear_inode, | 243 | .clear_inode = ext2_clear_inode, |
244 | .show_options = ext2_show_options, | ||
221 | #ifdef CONFIG_QUOTA | 245 | #ifdef CONFIG_QUOTA |
222 | .quota_read = ext2_quota_read, | 246 | .quota_read = ext2_quota_read, |
223 | .quota_write = ext2_quota_write, | 247 | .quota_write = ext2_quota_write, |
@@ -256,10 +280,11 @@ static unsigned long get_sb_block(void **data) | |||
256 | 280 | ||
257 | enum { | 281 | enum { |
258 | Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid, | 282 | Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid, |
259 | Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro, | 283 | Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, |
260 | Opt_nouid32, Opt_check, Opt_nocheck, Opt_debug, Opt_oldalloc, Opt_orlov, Opt_nobh, | 284 | Opt_err_ro, Opt_nouid32, Opt_check, Opt_nocheck, Opt_debug, |
261 | Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl, Opt_xip, | 285 | Opt_oldalloc, Opt_orlov, Opt_nobh, Opt_user_xattr, Opt_nouser_xattr, |
262 | Opt_ignore, Opt_err, | 286 | Opt_acl, Opt_noacl, Opt_xip, Opt_ignore, Opt_err, Opt_quota, |
287 | Opt_usrquota, Opt_grpquota | ||
263 | }; | 288 | }; |
264 | 289 | ||
265 | static match_table_t tokens = { | 290 | static match_table_t tokens = { |
@@ -288,10 +313,10 @@ static match_table_t tokens = { | |||
288 | {Opt_acl, "acl"}, | 313 | {Opt_acl, "acl"}, |
289 | {Opt_noacl, "noacl"}, | 314 | {Opt_noacl, "noacl"}, |
290 | {Opt_xip, "xip"}, | 315 | {Opt_xip, "xip"}, |
291 | {Opt_ignore, "grpquota"}, | 316 | {Opt_grpquota, "grpquota"}, |
292 | {Opt_ignore, "noquota"}, | 317 | {Opt_ignore, "noquota"}, |
293 | {Opt_ignore, "quota"}, | 318 | {Opt_quota, "quota"}, |
294 | {Opt_ignore, "usrquota"}, | 319 | {Opt_usrquota, "usrquota"}, |
295 | {Opt_err, NULL} | 320 | {Opt_err, NULL} |
296 | }; | 321 | }; |
297 | 322 | ||
@@ -406,6 +431,26 @@ static int parse_options (char * options, | |||
406 | printk("EXT2 xip option not supported\n"); | 431 | printk("EXT2 xip option not supported\n"); |
407 | #endif | 432 | #endif |
408 | break; | 433 | break; |
434 | |||
435 | #if defined(CONFIG_QUOTA) | ||
436 | case Opt_quota: | ||
437 | case Opt_usrquota: | ||
438 | set_opt(sbi->s_mount_opt, USRQUOTA); | ||
439 | break; | ||
440 | |||
441 | case Opt_grpquota: | ||
442 | set_opt(sbi->s_mount_opt, GRPQUOTA); | ||
443 | break; | ||
444 | #else | ||
445 | case Opt_quota: | ||
446 | case Opt_usrquota: | ||
447 | case Opt_grpquota: | ||
448 | printk(KERN_ERR | ||
449 | "EXT2-fs: quota operations not supported.\n"); | ||
450 | |||
451 | break; | ||
452 | #endif | ||
453 | |||
409 | case Opt_ignore: | 454 | case Opt_ignore: |
410 | break; | 455 | break; |
411 | default: | 456 | default: |