diff options
-rw-r--r-- | fs/ext2/super.c | 59 | ||||
-rw-r--r-- | fs/ext3/super.c | 92 | ||||
-rw-r--r-- | fs/jfs/jfs_filsys.h | 3 | ||||
-rw-r--r-- | fs/jfs/super.c | 48 | ||||
-rw-r--r-- | include/linux/ext2_fs.h | 3 | ||||
-rw-r--r-- | include/linux/ext3_fs.h | 2 |
6 files changed, 186 insertions, 21 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: |
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 3c3c6e399fb3..a93c3609025d 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/mount.h> | 35 | #include <linux/mount.h> |
36 | #include <linux/namei.h> | 36 | #include <linux/namei.h> |
37 | #include <linux/quotaops.h> | 37 | #include <linux/quotaops.h> |
38 | #include <linux/seq_file.h> | ||
38 | #include <asm/uaccess.h> | 39 | #include <asm/uaccess.h> |
39 | #include "xattr.h" | 40 | #include "xattr.h" |
40 | #include "acl.h" | 41 | #include "acl.h" |
@@ -509,8 +510,41 @@ static void ext3_clear_inode(struct inode *inode) | |||
509 | kfree(rsv); | 510 | kfree(rsv); |
510 | } | 511 | } |
511 | 512 | ||
512 | #ifdef CONFIG_QUOTA | 513 | static int ext3_show_options(struct seq_file *seq, struct vfsmount *vfs) |
514 | { | ||
515 | struct ext3_sb_info *sbi = EXT3_SB(vfs->mnt_sb); | ||
516 | |||
517 | if (sbi->s_mount_opt & EXT3_MOUNT_JOURNAL_DATA) | ||
518 | seq_puts(seq, ",data=journal"); | ||
519 | |||
520 | if (sbi->s_mount_opt & EXT3_MOUNT_ORDERED_DATA) | ||
521 | seq_puts(seq, ",data=ordered"); | ||
522 | |||
523 | if (sbi->s_mount_opt & EXT3_MOUNT_WRITEBACK_DATA) | ||
524 | seq_puts(seq, ",data=writeback"); | ||
525 | |||
526 | #if defined(CONFIG_QUOTA) | ||
527 | if (sbi->s_jquota_fmt) | ||
528 | seq_printf(seq, ",jqfmt=%s", | ||
529 | (sbi->s_jquota_fmt == QFMT_VFS_OLD) ? "vfsold": "vfsv0"); | ||
530 | |||
531 | if (sbi->s_qf_names[USRQUOTA]) | ||
532 | seq_printf(seq, ",usrjquota=%s", sbi->s_qf_names[USRQUOTA]); | ||
533 | |||
534 | if (sbi->s_qf_names[GRPQUOTA]) | ||
535 | seq_printf(seq, ",grpjquota=%s", sbi->s_qf_names[GRPQUOTA]); | ||
513 | 536 | ||
537 | if (sbi->s_mount_opt & EXT3_MOUNT_USRQUOTA) | ||
538 | seq_puts(seq, ",usrquota"); | ||
539 | |||
540 | if (sbi->s_mount_opt & EXT3_MOUNT_GRPQUOTA) | ||
541 | seq_puts(seq, ",grpquota"); | ||
542 | #endif | ||
543 | |||
544 | return 0; | ||
545 | } | ||
546 | |||
547 | #ifdef CONFIG_QUOTA | ||
514 | #define QTYPE2NAME(t) ((t)==USRQUOTA?"user":"group") | 548 | #define QTYPE2NAME(t) ((t)==USRQUOTA?"user":"group") |
515 | #define QTYPE2MOPT(on, t) ((t)==USRQUOTA?((on)##USRJQUOTA):((on)##GRPJQUOTA)) | 549 | #define QTYPE2MOPT(on, t) ((t)==USRQUOTA?((on)##USRJQUOTA):((on)##GRPJQUOTA)) |
516 | 550 | ||
@@ -569,6 +603,7 @@ static struct super_operations ext3_sops = { | |||
569 | .statfs = ext3_statfs, | 603 | .statfs = ext3_statfs, |
570 | .remount_fs = ext3_remount, | 604 | .remount_fs = ext3_remount, |
571 | .clear_inode = ext3_clear_inode, | 605 | .clear_inode = ext3_clear_inode, |
606 | .show_options = ext3_show_options, | ||
572 | #ifdef CONFIG_QUOTA | 607 | #ifdef CONFIG_QUOTA |
573 | .quota_read = ext3_quota_read, | 608 | .quota_read = ext3_quota_read, |
574 | .quota_write = ext3_quota_write, | 609 | .quota_write = ext3_quota_write, |
@@ -590,7 +625,8 @@ enum { | |||
590 | Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback, | 625 | Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback, |
591 | Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota, | 626 | Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota, |
592 | Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota, | 627 | Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota, |
593 | Opt_ignore, Opt_barrier, Opt_err, Opt_resize, | 628 | Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota, |
629 | Opt_grpquota | ||
594 | }; | 630 | }; |
595 | 631 | ||
596 | static match_table_t tokens = { | 632 | static match_table_t tokens = { |
@@ -634,10 +670,10 @@ static match_table_t tokens = { | |||
634 | {Opt_grpjquota, "grpjquota=%s"}, | 670 | {Opt_grpjquota, "grpjquota=%s"}, |
635 | {Opt_jqfmt_vfsold, "jqfmt=vfsold"}, | 671 | {Opt_jqfmt_vfsold, "jqfmt=vfsold"}, |
636 | {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"}, | 672 | {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"}, |
637 | {Opt_quota, "grpquota"}, | 673 | {Opt_grpquota, "grpquota"}, |
638 | {Opt_noquota, "noquota"}, | 674 | {Opt_noquota, "noquota"}, |
639 | {Opt_quota, "quota"}, | 675 | {Opt_quota, "quota"}, |
640 | {Opt_quota, "usrquota"}, | 676 | {Opt_usrquota, "usrquota"}, |
641 | {Opt_barrier, "barrier=%u"}, | 677 | {Opt_barrier, "barrier=%u"}, |
642 | {Opt_err, NULL}, | 678 | {Opt_err, NULL}, |
643 | {Opt_resize, "resize"}, | 679 | {Opt_resize, "resize"}, |
@@ -903,7 +939,13 @@ clear_qf_name: | |||
903 | sbi->s_jquota_fmt = QFMT_VFS_V0; | 939 | sbi->s_jquota_fmt = QFMT_VFS_V0; |
904 | break; | 940 | break; |
905 | case Opt_quota: | 941 | case Opt_quota: |
942 | case Opt_usrquota: | ||
906 | set_opt(sbi->s_mount_opt, QUOTA); | 943 | set_opt(sbi->s_mount_opt, QUOTA); |
944 | set_opt(sbi->s_mount_opt, USRQUOTA); | ||
945 | break; | ||
946 | case Opt_grpquota: | ||
947 | set_opt(sbi->s_mount_opt, QUOTA); | ||
948 | set_opt(sbi->s_mount_opt, GRPQUOTA); | ||
907 | break; | 949 | break; |
908 | case Opt_noquota: | 950 | case Opt_noquota: |
909 | if (sb_any_quota_enabled(sb)) { | 951 | if (sb_any_quota_enabled(sb)) { |
@@ -912,8 +954,13 @@ clear_qf_name: | |||
912 | return 0; | 954 | return 0; |
913 | } | 955 | } |
914 | clear_opt(sbi->s_mount_opt, QUOTA); | 956 | clear_opt(sbi->s_mount_opt, QUOTA); |
957 | clear_opt(sbi->s_mount_opt, USRQUOTA); | ||
958 | clear_opt(sbi->s_mount_opt, GRPQUOTA); | ||
915 | break; | 959 | break; |
916 | #else | 960 | #else |
961 | case Opt_quota: | ||
962 | case Opt_usrquota: | ||
963 | case Opt_grpquota: | ||
917 | case Opt_usrjquota: | 964 | case Opt_usrjquota: |
918 | case Opt_grpjquota: | 965 | case Opt_grpjquota: |
919 | case Opt_offusrjquota: | 966 | case Opt_offusrjquota: |
@@ -924,7 +971,6 @@ clear_qf_name: | |||
924 | "EXT3-fs: journalled quota options not " | 971 | "EXT3-fs: journalled quota options not " |
925 | "supported.\n"); | 972 | "supported.\n"); |
926 | break; | 973 | break; |
927 | case Opt_quota: | ||
928 | case Opt_noquota: | 974 | case Opt_noquota: |
929 | break; | 975 | break; |
930 | #endif | 976 | #endif |
@@ -962,14 +1008,38 @@ clear_qf_name: | |||
962 | } | 1008 | } |
963 | } | 1009 | } |
964 | #ifdef CONFIG_QUOTA | 1010 | #ifdef CONFIG_QUOTA |
965 | if (!sbi->s_jquota_fmt && (sbi->s_qf_names[USRQUOTA] || | 1011 | if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { |
966 | sbi->s_qf_names[GRPQUOTA])) { | 1012 | if ((sbi->s_mount_opt & EXT3_MOUNT_USRQUOTA) && |
967 | printk(KERN_ERR | 1013 | sbi->s_qf_names[USRQUOTA]) |
968 | "EXT3-fs: journalled quota format not specified.\n"); | 1014 | clear_opt(sbi->s_mount_opt, USRQUOTA); |
969 | return 0; | 1015 | |
1016 | if ((sbi->s_mount_opt & EXT3_MOUNT_GRPQUOTA) && | ||
1017 | sbi->s_qf_names[GRPQUOTA]) | ||
1018 | clear_opt(sbi->s_mount_opt, GRPQUOTA); | ||
1019 | |||
1020 | if ((sbi->s_qf_names[USRQUOTA] && | ||
1021 | (sbi->s_mount_opt & EXT3_MOUNT_GRPQUOTA)) || | ||
1022 | (sbi->s_qf_names[GRPQUOTA] && | ||
1023 | (sbi->s_mount_opt & EXT3_MOUNT_USRQUOTA))) { | ||
1024 | printk(KERN_ERR "EXT3-fs: old and new quota " | ||
1025 | "format mixing.\n"); | ||
1026 | return 0; | ||
1027 | } | ||
1028 | |||
1029 | if (!sbi->s_jquota_fmt) { | ||
1030 | printk(KERN_ERR "EXT3-fs: journalled quota format " | ||
1031 | "not specified.\n"); | ||
1032 | return 0; | ||
1033 | } | ||
1034 | } else { | ||
1035 | if (sbi->s_jquota_fmt) { | ||
1036 | printk(KERN_ERR "EXT3-fs: journalled quota format " | ||
1037 | "specified with no journalling " | ||
1038 | "enabled.\n"); | ||
1039 | return 0; | ||
1040 | } | ||
970 | } | 1041 | } |
971 | #endif | 1042 | #endif |
972 | |||
973 | return 1; | 1043 | return 1; |
974 | } | 1044 | } |
975 | 1045 | ||
diff --git a/fs/jfs/jfs_filsys.h b/fs/jfs/jfs_filsys.h index 86ccac80f0ab..72a5588faeca 100644 --- a/fs/jfs/jfs_filsys.h +++ b/fs/jfs/jfs_filsys.h | |||
@@ -37,6 +37,9 @@ | |||
37 | #define JFS_ERR_CONTINUE 0x00000004 /* continue */ | 37 | #define JFS_ERR_CONTINUE 0x00000004 /* continue */ |
38 | #define JFS_ERR_PANIC 0x00000008 /* panic */ | 38 | #define JFS_ERR_PANIC 0x00000008 /* panic */ |
39 | 39 | ||
40 | #define JFS_USRQUOTA 0x00000010 | ||
41 | #define JFS_GRPQUOTA 0x00000020 | ||
42 | |||
40 | /* platform option (conditional compilation) */ | 43 | /* platform option (conditional compilation) */ |
41 | #define JFS_AIX 0x80000000 /* AIX support */ | 44 | #define JFS_AIX 0x80000000 /* AIX support */ |
42 | /* POSIX name/directory support */ | 45 | /* POSIX name/directory support */ |
diff --git a/fs/jfs/super.c b/fs/jfs/super.c index 9ff89720f93b..71bc34b96b2b 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c | |||
@@ -23,9 +23,11 @@ | |||
23 | #include <linux/parser.h> | 23 | #include <linux/parser.h> |
24 | #include <linux/completion.h> | 24 | #include <linux/completion.h> |
25 | #include <linux/vfs.h> | 25 | #include <linux/vfs.h> |
26 | #include <linux/mount.h> | ||
26 | #include <linux/moduleparam.h> | 27 | #include <linux/moduleparam.h> |
27 | #include <linux/posix_acl.h> | 28 | #include <linux/posix_acl.h> |
28 | #include <asm/uaccess.h> | 29 | #include <asm/uaccess.h> |
30 | #include <linux/seq_file.h> | ||
29 | 31 | ||
30 | #include "jfs_incore.h" | 32 | #include "jfs_incore.h" |
31 | #include "jfs_filsys.h" | 33 | #include "jfs_filsys.h" |
@@ -192,7 +194,8 @@ static void jfs_put_super(struct super_block *sb) | |||
192 | 194 | ||
193 | enum { | 195 | enum { |
194 | Opt_integrity, Opt_nointegrity, Opt_iocharset, Opt_resize, | 196 | Opt_integrity, Opt_nointegrity, Opt_iocharset, Opt_resize, |
195 | Opt_resize_nosize, Opt_errors, Opt_ignore, Opt_err, | 197 | Opt_resize_nosize, Opt_errors, Opt_ignore, Opt_err, Opt_quota, |
198 | Opt_usrquota, Opt_grpquota | ||
196 | }; | 199 | }; |
197 | 200 | ||
198 | static match_table_t tokens = { | 201 | static match_table_t tokens = { |
@@ -204,8 +207,8 @@ static match_table_t tokens = { | |||
204 | {Opt_errors, "errors=%s"}, | 207 | {Opt_errors, "errors=%s"}, |
205 | {Opt_ignore, "noquota"}, | 208 | {Opt_ignore, "noquota"}, |
206 | {Opt_ignore, "quota"}, | 209 | {Opt_ignore, "quota"}, |
207 | {Opt_ignore, "usrquota"}, | 210 | {Opt_usrquota, "usrquota"}, |
208 | {Opt_ignore, "grpquota"}, | 211 | {Opt_grpquota, "grpquota"}, |
209 | {Opt_err, NULL} | 212 | {Opt_err, NULL} |
210 | }; | 213 | }; |
211 | 214 | ||
@@ -293,6 +296,24 @@ static int parse_options(char *options, struct super_block *sb, s64 *newLVSize, | |||
293 | } | 296 | } |
294 | break; | 297 | break; |
295 | } | 298 | } |
299 | |||
300 | #if defined(CONFIG_QUOTA) | ||
301 | case Opt_quota: | ||
302 | case Opt_usrquota: | ||
303 | *flag |= JFS_USRQUOTA; | ||
304 | break; | ||
305 | case Opt_grpquota: | ||
306 | *flag |= JFS_GRPQUOTA; | ||
307 | break; | ||
308 | #else | ||
309 | case Opt_usrquota: | ||
310 | case Opt_grpquota: | ||
311 | case Opt_quota: | ||
312 | printk(KERN_ERR | ||
313 | "JFS: quota operations not supported\n"); | ||
314 | break; | ||
315 | #endif | ||
316 | |||
296 | default: | 317 | default: |
297 | printk("jfs: Unrecognized mount option \"%s\" " | 318 | printk("jfs: Unrecognized mount option \"%s\" " |
298 | " or missing value\n", p); | 319 | " or missing value\n", p); |
@@ -539,6 +560,26 @@ static int jfs_sync_fs(struct super_block *sb, int wait) | |||
539 | return 0; | 560 | return 0; |
540 | } | 561 | } |
541 | 562 | ||
563 | static int jfs_show_options(struct seq_file *seq, struct vfsmount *vfs) | ||
564 | { | ||
565 | struct jfs_sb_info *sbi = JFS_SBI(vfs->mnt_sb); | ||
566 | |||
567 | if (sbi->flag & JFS_NOINTEGRITY) | ||
568 | seq_puts(seq, ",nointegrity"); | ||
569 | else | ||
570 | seq_puts(seq, ",integrity"); | ||
571 | |||
572 | #if defined(CONFIG_QUOTA) | ||
573 | if (sbi->flag & JFS_USRQUOTA) | ||
574 | seq_puts(seq, ",usrquota"); | ||
575 | |||
576 | if (sbi->flag & JFS_GRPQUOTA) | ||
577 | seq_puts(seq, ",grpquota"); | ||
578 | #endif | ||
579 | |||
580 | return 0; | ||
581 | } | ||
582 | |||
542 | static struct super_operations jfs_super_operations = { | 583 | static struct super_operations jfs_super_operations = { |
543 | .alloc_inode = jfs_alloc_inode, | 584 | .alloc_inode = jfs_alloc_inode, |
544 | .destroy_inode = jfs_destroy_inode, | 585 | .destroy_inode = jfs_destroy_inode, |
@@ -552,6 +593,7 @@ static struct super_operations jfs_super_operations = { | |||
552 | .unlockfs = jfs_unlockfs, | 593 | .unlockfs = jfs_unlockfs, |
553 | .statfs = jfs_statfs, | 594 | .statfs = jfs_statfs, |
554 | .remount_fs = jfs_remount, | 595 | .remount_fs = jfs_remount, |
596 | .show_options = jfs_show_options | ||
555 | }; | 597 | }; |
556 | 598 | ||
557 | static struct export_operations jfs_export_operations = { | 599 | static struct export_operations jfs_export_operations = { |
diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h index a657130ba03a..f7bd1c7ebefb 100644 --- a/include/linux/ext2_fs.h +++ b/include/linux/ext2_fs.h | |||
@@ -313,6 +313,9 @@ struct ext2_inode { | |||
313 | #define EXT2_MOUNT_XATTR_USER 0x004000 /* Extended user attributes */ | 313 | #define EXT2_MOUNT_XATTR_USER 0x004000 /* Extended user attributes */ |
314 | #define EXT2_MOUNT_POSIX_ACL 0x008000 /* POSIX Access Control Lists */ | 314 | #define EXT2_MOUNT_POSIX_ACL 0x008000 /* POSIX Access Control Lists */ |
315 | #define EXT2_MOUNT_XIP 0x010000 /* Execute in place */ | 315 | #define EXT2_MOUNT_XIP 0x010000 /* Execute in place */ |
316 | #define EXT2_MOUNT_USRQUOTA 0x020000 /* user quota */ | ||
317 | #define EXT2_MOUNT_GRPQUOTA 0x040000 /* group quota */ | ||
318 | |||
316 | 319 | ||
317 | #define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt | 320 | #define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt |
318 | #define set_opt(o, opt) o |= EXT2_MOUNT_##opt | 321 | #define set_opt(o, opt) o |= EXT2_MOUNT_##opt |
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index c16662836c58..c0272d73ab20 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h | |||
@@ -373,6 +373,8 @@ struct ext3_inode { | |||
373 | #define EXT3_MOUNT_BARRIER 0x20000 /* Use block barriers */ | 373 | #define EXT3_MOUNT_BARRIER 0x20000 /* Use block barriers */ |
374 | #define EXT3_MOUNT_NOBH 0x40000 /* No bufferheads */ | 374 | #define EXT3_MOUNT_NOBH 0x40000 /* No bufferheads */ |
375 | #define EXT3_MOUNT_QUOTA 0x80000 /* Some quota option set */ | 375 | #define EXT3_MOUNT_QUOTA 0x80000 /* Some quota option set */ |
376 | #define EXT3_MOUNT_USRQUOTA 0x100000 /* "old" user quota */ | ||
377 | #define EXT3_MOUNT_GRPQUOTA 0x200000 /* "old" group quota */ | ||
376 | 378 | ||
377 | /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */ | 379 | /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */ |
378 | #ifndef _LINUX_EXT2_FS_H | 380 | #ifndef _LINUX_EXT2_FS_H |