diff options
author | James Bottomley <jejb@titanic.(none)> | 2005-11-10 09:29:07 -0500 |
---|---|---|
committer | James Bottomley <jejb@titanic.(none)> | 2005-11-10 09:29:07 -0500 |
commit | 8a87a0b6313109d2fea87b1271d497c954ce2ca8 (patch) | |
tree | 1b7ae51ff681e27118590e9cab4bf0ce38f5d80e /fs/ext2 | |
parent | e6a04466ba965875a6132700fabb2f2c0249c41a (diff) | |
parent | 3b44f137b9a846c5452d9e6e1271b79b1dbcc942 (diff) |
Merge by hand (whitespace conflicts in libata.h)
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'fs/ext2')
-rw-r--r-- | fs/ext2/CHANGES | 157 | ||||
-rw-r--r-- | fs/ext2/balloc.c | 73 | ||||
-rw-r--r-- | fs/ext2/ialloc.c | 40 | ||||
-rw-r--r-- | fs/ext2/super.c | 16 |
4 files changed, 1 insertions, 285 deletions
diff --git a/fs/ext2/CHANGES b/fs/ext2/CHANGES deleted file mode 100644 index aa5aaf0e5911..000000000000 --- a/fs/ext2/CHANGES +++ /dev/null | |||
@@ -1,157 +0,0 @@ | |||
1 | Changes from version 0.5a to version 0.5b | ||
2 | ========================================= | ||
3 | - Now that we have sysctl(), the immutable flag cannot be changed when | ||
4 | the system is running at security level > 0. | ||
5 | - Some cleanups in the code. | ||
6 | - More consistency checks on directories. | ||
7 | - The ext2.diff patch from Tom May <ftom@netcom.com> has been | ||
8 | integrated. This patch replaces expensive "/" and "%" with | ||
9 | cheap ">>" and "&" where possible. | ||
10 | |||
11 | Changes from version 0.5 to version 0.5a | ||
12 | ======================================== | ||
13 | - Zero the partial block following the end of the file when a file | ||
14 | is truncated. | ||
15 | - Dates updated in the copyright. | ||
16 | - More checks when the filesystem is mounted: the count of blocks, | ||
17 | fragments, and inodes per group is checked against the block size. | ||
18 | - The buffers used by the error routines are now static variables, to | ||
19 | avoid using space on the kernel stack, as requested by Linus. | ||
20 | - Some cleanups in the error messages (some versions of syslog contain | ||
21 | a bug which truncates an error message if it contains '\n'). | ||
22 | - Check that no data can be written to a file past the 2GB limit. | ||
23 | - The famous readdir() bug has been fixed by Stephen Tweedie. | ||
24 | - Added a revision level in the superblock. | ||
25 | - Full support for O_SYNC flag of the open system call. | ||
26 | - New mount options: `resuid=#uid' and `resgid=#gid'. `resuid' causes | ||
27 | ext2fs to consider user #uid like root for the reserved blocks. | ||
28 | `resgid' acts the same way with group #gid. New fields in the | ||
29 | superblock contain default values for resuid and resgid and can | ||
30 | be modified by tune2fs. | ||
31 | Idea comes from Rene Cougnenc <cougnenc@renux.frmug.fr.net>. | ||
32 | - New mount options: `bsddf' and `minixdf'. `bsddf' causes ext2fs | ||
33 | to remove the blocks used for FS structures from the total block | ||
34 | count in statfs. With `minixdf', ext2fs mimics Minix behavior | ||
35 | in statfs (i.e. it returns the total number of blocks on the | ||
36 | partition). This is intended to make bde happy :-) | ||
37 | - New file attributes: | ||
38 | - Immutable files cannot be modified. Data cannot be written to | ||
39 | these files. They cannot be removed, renamed and new links cannot | ||
40 | be created. Even root cannot modify the files. He has to remove | ||
41 | the immutable attribute first. | ||
42 | - Append-only files: can only be written in append-mode when writing. | ||
43 | They cannot be removed, renamed and new links cannot be created. | ||
44 | Note: files may only be added to an append-only directory. | ||
45 | - No-dump files: the attribute is not used by the kernel. My port | ||
46 | of dump uses it to avoid backing up files which are not important. | ||
47 | - New check in ext2_check_dir_entry: the inode number is checked. | ||
48 | - Support for big file systems: the copy of the FS descriptor is now | ||
49 | dynamically allocated (previous versions used a fixed size array). | ||
50 | This allows to mount 2GB+ FS. | ||
51 | - Reorganization of the ext2_inode structure to allow other operating | ||
52 | systems to create specific fields if they use ext2fs as their native | ||
53 | file system. Currently, ext2fs is only implemented in Linux but | ||
54 | will soon be part of Gnu Hurd and of Masix. | ||
55 | |||
56 | Changes from version 0.4b to version 0.5 | ||
57 | ======================================== | ||
58 | - New superblock fields: s_lastcheck and s_checkinterval added | ||
59 | by Uwe Ohse <uwe@tirka.gun.de> to implement timedependent checks | ||
60 | of the file system | ||
61 | - Real random numbers for secure rm added by Pierre del Perugia | ||
62 | <delperug@gla.ecoledoc.ibp.fr> | ||
63 | - The mount warnings related to the state of a fs are not printed | ||
64 | if the fs is mounted read-only, idea by Nick Holloway | ||
65 | <alfie@dcs.warwick.ac.uk> | ||
66 | |||
67 | Changes from version 0.4a to version 0.4b | ||
68 | ========================================= | ||
69 | - Copyrights changed to include the name of my laboratory. | ||
70 | - Clean up of balloc.c and ialloc.c. | ||
71 | - More consistency checks. | ||
72 | - Block preallocation added by Stephen Tweedie. | ||
73 | - Direct reads of directories disallowed. | ||
74 | - Readahead implemented in readdir by Stephen Tweedie. | ||
75 | - Bugs in block and inodes allocation fixed. | ||
76 | - Readahead implemented in ext2_find_entry by Chip Salzenberg. | ||
77 | - New mount options: | ||
78 | `check=none|normal|strict' | ||
79 | `debug' | ||
80 | `errors=continue|remount-ro|panic' | ||
81 | `grpid', `bsdgroups' | ||
82 | `nocheck' | ||
83 | `nogrpid', `sysvgroups' | ||
84 | - truncate() now tries to deallocate contiguous blocks in a single call | ||
85 | to ext2_free_blocks(). | ||
86 | - lots of cosmetic changes. | ||
87 | |||
88 | Changes from version 0.4 to version 0.4a | ||
89 | ======================================== | ||
90 | - the `sync' option support is now complete. Version 0.4 was not | ||
91 | supporting it when truncating a file. I have tested the synchronous | ||
92 | writes and they work but they make the system very slow :-( I have | ||
93 | to work again on this to make it faster. | ||
94 | - when detecting an error on a mounted filesystem, version 0.4 used | ||
95 | to try to write a flag in the super block even if the filesystem had | ||
96 | been mounted read-only. This is fixed. | ||
97 | - the `sb=#' option now causes the kernel code to use the filesystem | ||
98 | descriptors located at block #+1. Version 0.4 used the superblock | ||
99 | backup located at block # but used the main copy of the descriptors. | ||
100 | - a new file attribute `S' is supported. This attribute causes | ||
101 | synchronous writes but is applied to a file not to the entire file | ||
102 | system (thanks to Michael Kraehe <kraehe@bakunin.north.de> for | ||
103 | suggesting it). | ||
104 | - the directory cache is inhibited by default. The cache management | ||
105 | code seems to be buggy and I have to look at it carefully before | ||
106 | using it again. | ||
107 | - deleting a file with the `s' attribute (secure deletion) causes its | ||
108 | blocks to be overwritten with random values not with zeros (thanks to | ||
109 | Michael A. Griffith <grif@cs.ucr.edu> for suggesting it). | ||
110 | - lots of cosmetic changes have been made. | ||
111 | |||
112 | Changes from version 0.3 to version 0.4 | ||
113 | ======================================= | ||
114 | - Three new mount options are supported: `check', `sync' and `sb=#'. | ||
115 | `check' tells the kernel code to make more consistency checks | ||
116 | when the file system is mounted. Currently, the kernel code checks | ||
117 | that the blocks and inodes bitmaps are consistent with the free | ||
118 | blocks and inodes counts. More checks will be added in future | ||
119 | releases. | ||
120 | `sync' tells the kernel code to use synchronous writes when updating | ||
121 | an inode, a bitmap, a directory entry or an indirect block. This | ||
122 | can make the file system much slower but can be a big win for files | ||
123 | recovery in case of a crash (and we can now say to the BSD folks | ||
124 | that Linux also supports synchronous updates :-). | ||
125 | `sb=#' tells the kernel code to use an alternate super block instead | ||
126 | of its master copy. `#' is the number of the block (counted in | ||
127 | 1024 bytes blocks) which contains the alternate super block. | ||
128 | An ext2 file system typically contains backups of the super block | ||
129 | at blocks 8193, 16385, and so on. | ||
130 | - I have change the meaning of the valid flag used by e2fsck. it | ||
131 | now contains the state of the file system. If the kernel code | ||
132 | detects an inconsistency while the file system is mounted, it flags | ||
133 | it as erroneous and e2fsck will detect that on next run. | ||
134 | - The super block now contains a mount counter. This counter is | ||
135 | incremented each time the file system is mounted read/write. When | ||
136 | this counter becomes bigger than a maximal mount counts (also stored | ||
137 | in the super block), e2fsck checks the file system, even if it had | ||
138 | been unmounted cleanly, and resets this counter to 0. | ||
139 | - File attributes are now supported. One can associate a set of | ||
140 | attributes to a file. Three attributes are defined: | ||
141 | `c': the file is marked for automatic compression, | ||
142 | `s': the file is marked for secure deletion: when the file is | ||
143 | deleted, its blocks are zeroed and written back to the disk, | ||
144 | `u': the file is marked for undeletion: when the file is deleted, | ||
145 | its contents are saved to allow a future undeletion. | ||
146 | Currently, only the `s' attribute is implemented in the kernel | ||
147 | code. Support for the other attributes will be added in a future | ||
148 | release. | ||
149 | - a few bugs related to times updates have been fixed by Bruce | ||
150 | Evans and me. | ||
151 | - a bug related to the links count of deleted inodes has been fixed. | ||
152 | Previous versions used to keep the links count set to 1 when a file | ||
153 | was deleted. The new version now sets links_count to 0 when deleting | ||
154 | the last link. | ||
155 | - a race condition when deallocating an inode has been fixed by | ||
156 | Stephen Tweedie. | ||
157 | |||
diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c index 6591abef64d0..bb6908066494 100644 --- a/fs/ext2/balloc.c +++ b/fs/ext2/balloc.c | |||
@@ -624,76 +624,3 @@ unsigned long ext2_bg_num_gdb(struct super_block *sb, int group) | |||
624 | return EXT2_SB(sb)->s_gdb_count; | 624 | return EXT2_SB(sb)->s_gdb_count; |
625 | } | 625 | } |
626 | 626 | ||
627 | #ifdef CONFIG_EXT2_CHECK | ||
628 | /* Called at mount-time, super-block is locked */ | ||
629 | void ext2_check_blocks_bitmap (struct super_block * sb) | ||
630 | { | ||
631 | struct buffer_head *bitmap_bh = NULL; | ||
632 | struct ext2_super_block * es; | ||
633 | unsigned long desc_count, bitmap_count, x, j; | ||
634 | unsigned long desc_blocks; | ||
635 | struct ext2_group_desc * desc; | ||
636 | int i; | ||
637 | |||
638 | es = EXT2_SB(sb)->s_es; | ||
639 | desc_count = 0; | ||
640 | bitmap_count = 0; | ||
641 | desc = NULL; | ||
642 | for (i = 0; i < EXT2_SB(sb)->s_groups_count; i++) { | ||
643 | desc = ext2_get_group_desc (sb, i, NULL); | ||
644 | if (!desc) | ||
645 | continue; | ||
646 | desc_count += le16_to_cpu(desc->bg_free_blocks_count); | ||
647 | brelse(bitmap_bh); | ||
648 | bitmap_bh = read_block_bitmap(sb, i); | ||
649 | if (!bitmap_bh) | ||
650 | continue; | ||
651 | |||
652 | if (ext2_bg_has_super(sb, i) && | ||
653 | !ext2_test_bit(0, bitmap_bh->b_data)) | ||
654 | ext2_error(sb, __FUNCTION__, | ||
655 | "Superblock in group %d is marked free", i); | ||
656 | |||
657 | desc_blocks = ext2_bg_num_gdb(sb, i); | ||
658 | for (j = 0; j < desc_blocks; j++) | ||
659 | if (!ext2_test_bit(j + 1, bitmap_bh->b_data)) | ||
660 | ext2_error(sb, __FUNCTION__, | ||
661 | "Descriptor block #%ld in group " | ||
662 | "%d is marked free", j, i); | ||
663 | |||
664 | if (!block_in_use(le32_to_cpu(desc->bg_block_bitmap), | ||
665 | sb, bitmap_bh->b_data)) | ||
666 | ext2_error(sb, "ext2_check_blocks_bitmap", | ||
667 | "Block bitmap for group %d is marked free", | ||
668 | i); | ||
669 | |||
670 | if (!block_in_use(le32_to_cpu(desc->bg_inode_bitmap), | ||
671 | sb, bitmap_bh->b_data)) | ||
672 | ext2_error(sb, "ext2_check_blocks_bitmap", | ||
673 | "Inode bitmap for group %d is marked free", | ||
674 | i); | ||
675 | |||
676 | for (j = 0; j < EXT2_SB(sb)->s_itb_per_group; j++) | ||
677 | if (!block_in_use(le32_to_cpu(desc->bg_inode_table) + j, | ||
678 | sb, bitmap_bh->b_data)) | ||
679 | ext2_error (sb, "ext2_check_blocks_bitmap", | ||
680 | "Block #%ld of the inode table in " | ||
681 | "group %d is marked free", j, i); | ||
682 | |||
683 | x = ext2_count_free(bitmap_bh, sb->s_blocksize); | ||
684 | if (le16_to_cpu(desc->bg_free_blocks_count) != x) | ||
685 | ext2_error (sb, "ext2_check_blocks_bitmap", | ||
686 | "Wrong free blocks count for group %d, " | ||
687 | "stored = %d, counted = %lu", i, | ||
688 | le16_to_cpu(desc->bg_free_blocks_count), x); | ||
689 | bitmap_count += x; | ||
690 | } | ||
691 | if (le32_to_cpu(es->s_free_blocks_count) != bitmap_count) | ||
692 | ext2_error (sb, "ext2_check_blocks_bitmap", | ||
693 | "Wrong free blocks count in super block, " | ||
694 | "stored = %lu, counted = %lu", | ||
695 | (unsigned long)le32_to_cpu(es->s_free_blocks_count), | ||
696 | bitmap_count); | ||
697 | brelse(bitmap_bh); | ||
698 | } | ||
699 | #endif | ||
diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c index e2d6208633a7..74714af4ae69 100644 --- a/fs/ext2/ialloc.c +++ b/fs/ext2/ialloc.c | |||
@@ -700,43 +700,3 @@ unsigned long ext2_count_dirs (struct super_block * sb) | |||
700 | return count; | 700 | return count; |
701 | } | 701 | } |
702 | 702 | ||
703 | #ifdef CONFIG_EXT2_CHECK | ||
704 | /* Called at mount-time, super-block is locked */ | ||
705 | void ext2_check_inodes_bitmap (struct super_block * sb) | ||
706 | { | ||
707 | struct ext2_super_block * es = EXT2_SB(sb)->s_es; | ||
708 | unsigned long desc_count = 0, bitmap_count = 0; | ||
709 | struct buffer_head *bitmap_bh = NULL; | ||
710 | int i; | ||
711 | |||
712 | for (i = 0; i < EXT2_SB(sb)->s_groups_count; i++) { | ||
713 | struct ext2_group_desc *desc; | ||
714 | unsigned x; | ||
715 | |||
716 | desc = ext2_get_group_desc(sb, i, NULL); | ||
717 | if (!desc) | ||
718 | continue; | ||
719 | desc_count += le16_to_cpu(desc->bg_free_inodes_count); | ||
720 | brelse(bitmap_bh); | ||
721 | bitmap_bh = read_inode_bitmap(sb, i); | ||
722 | if (!bitmap_bh) | ||
723 | continue; | ||
724 | |||
725 | x = ext2_count_free(bitmap_bh, EXT2_INODES_PER_GROUP(sb) / 8); | ||
726 | if (le16_to_cpu(desc->bg_free_inodes_count) != x) | ||
727 | ext2_error (sb, "ext2_check_inodes_bitmap", | ||
728 | "Wrong free inodes count in group %d, " | ||
729 | "stored = %d, counted = %lu", i, | ||
730 | le16_to_cpu(desc->bg_free_inodes_count), x); | ||
731 | bitmap_count += x; | ||
732 | } | ||
733 | brelse(bitmap_bh); | ||
734 | if (percpu_counter_read(&EXT2_SB(sb)->s_freeinodes_counter) != | ||
735 | bitmap_count) | ||
736 | ext2_error(sb, "ext2_check_inodes_bitmap", | ||
737 | "Wrong free inodes count in super block, " | ||
738 | "stored = %lu, counted = %lu", | ||
739 | (unsigned long)le32_to_cpu(es->s_free_inodes_count), | ||
740 | bitmap_count); | ||
741 | } | ||
742 | #endif | ||
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 3c0c7c6a5b44..e4ed4b31a433 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c | |||
@@ -281,7 +281,7 @@ static unsigned long get_sb_block(void **data) | |||
281 | enum { | 281 | enum { |
282 | Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid, | 282 | Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid, |
283 | Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, | 283 | Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, |
284 | Opt_err_ro, Opt_nouid32, Opt_check, Opt_nocheck, Opt_debug, | 284 | Opt_err_ro, Opt_nouid32, Opt_nocheck, Opt_debug, |
285 | Opt_oldalloc, Opt_orlov, Opt_nobh, Opt_user_xattr, Opt_nouser_xattr, | 285 | Opt_oldalloc, Opt_orlov, Opt_nobh, Opt_user_xattr, Opt_nouser_xattr, |
286 | Opt_acl, Opt_noacl, Opt_xip, Opt_ignore, Opt_err, Opt_quota, | 286 | Opt_acl, Opt_noacl, Opt_xip, Opt_ignore, Opt_err, Opt_quota, |
287 | Opt_usrquota, Opt_grpquota | 287 | Opt_usrquota, Opt_grpquota |
@@ -303,7 +303,6 @@ static match_table_t tokens = { | |||
303 | {Opt_nouid32, "nouid32"}, | 303 | {Opt_nouid32, "nouid32"}, |
304 | {Opt_nocheck, "check=none"}, | 304 | {Opt_nocheck, "check=none"}, |
305 | {Opt_nocheck, "nocheck"}, | 305 | {Opt_nocheck, "nocheck"}, |
306 | {Opt_check, "check"}, | ||
307 | {Opt_debug, "debug"}, | 306 | {Opt_debug, "debug"}, |
308 | {Opt_oldalloc, "oldalloc"}, | 307 | {Opt_oldalloc, "oldalloc"}, |
309 | {Opt_orlov, "orlov"}, | 308 | {Opt_orlov, "orlov"}, |
@@ -376,13 +375,6 @@ static int parse_options (char * options, | |||
376 | case Opt_nouid32: | 375 | case Opt_nouid32: |
377 | set_opt (sbi->s_mount_opt, NO_UID32); | 376 | set_opt (sbi->s_mount_opt, NO_UID32); |
378 | break; | 377 | break; |
379 | case Opt_check: | ||
380 | #ifdef CONFIG_EXT2_CHECK | ||
381 | set_opt (sbi->s_mount_opt, CHECK); | ||
382 | #else | ||
383 | printk("EXT2 Check option not supported\n"); | ||
384 | #endif | ||
385 | break; | ||
386 | case Opt_nocheck: | 378 | case Opt_nocheck: |
387 | clear_opt (sbi->s_mount_opt, CHECK); | 379 | clear_opt (sbi->s_mount_opt, CHECK); |
388 | break; | 380 | break; |
@@ -503,12 +495,6 @@ static int ext2_setup_super (struct super_block * sb, | |||
503 | EXT2_BLOCKS_PER_GROUP(sb), | 495 | EXT2_BLOCKS_PER_GROUP(sb), |
504 | EXT2_INODES_PER_GROUP(sb), | 496 | EXT2_INODES_PER_GROUP(sb), |
505 | sbi->s_mount_opt); | 497 | sbi->s_mount_opt); |
506 | #ifdef CONFIG_EXT2_CHECK | ||
507 | if (test_opt (sb, CHECK)) { | ||
508 | ext2_check_blocks_bitmap (sb); | ||
509 | ext2_check_inodes_bitmap (sb); | ||
510 | } | ||
511 | #endif | ||
512 | return res; | 498 | return res; |
513 | } | 499 | } |
514 | 500 | ||