diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/ext2/super.c | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 09a88bf04579..a304c544571f 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | #include "xip.h" | 39 | #include "xip.h" |
| 40 | 40 | ||
| 41 | static void ext2_sync_super(struct super_block *sb, | 41 | static void ext2_sync_super(struct super_block *sb, |
| 42 | struct ext2_super_block *es); | 42 | struct ext2_super_block *es, int wait); |
| 43 | static int ext2_remount (struct super_block * sb, int * flags, char * data); | 43 | static int ext2_remount (struct super_block * sb, int * flags, char * data); |
| 44 | static int ext2_statfs (struct dentry * dentry, struct kstatfs * buf); | 44 | static int ext2_statfs (struct dentry * dentry, struct kstatfs * buf); |
| 45 | static int ext2_sync_fs(struct super_block *sb, int wait); | 45 | static int ext2_sync_fs(struct super_block *sb, int wait); |
| @@ -54,7 +54,7 @@ void ext2_error (struct super_block * sb, const char * function, | |||
| 54 | if (!(sb->s_flags & MS_RDONLY)) { | 54 | if (!(sb->s_flags & MS_RDONLY)) { |
| 55 | sbi->s_mount_state |= EXT2_ERROR_FS; | 55 | sbi->s_mount_state |= EXT2_ERROR_FS; |
| 56 | es->s_state |= cpu_to_le16(EXT2_ERROR_FS); | 56 | es->s_state |= cpu_to_le16(EXT2_ERROR_FS); |
| 57 | ext2_sync_super(sb, es); | 57 | ext2_sync_super(sb, es, 1); |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | va_start(args, fmt); | 60 | va_start(args, fmt); |
| @@ -125,7 +125,7 @@ static void ext2_put_super (struct super_block * sb) | |||
| 125 | struct ext2_super_block *es = sbi->s_es; | 125 | struct ext2_super_block *es = sbi->s_es; |
| 126 | 126 | ||
| 127 | es->s_state = cpu_to_le16(sbi->s_mount_state); | 127 | es->s_state = cpu_to_le16(sbi->s_mount_state); |
| 128 | ext2_sync_super(sb, es); | 128 | ext2_sync_super(sb, es, 1); |
| 129 | } | 129 | } |
| 130 | db_count = sbi->s_gdb_count; | 130 | db_count = sbi->s_gdb_count; |
| 131 | for (i = 0; i < db_count; i++) | 131 | for (i = 0; i < db_count; i++) |
| @@ -1127,23 +1127,16 @@ static void ext2_clear_super_error(struct super_block *sb) | |||
| 1127 | } | 1127 | } |
| 1128 | } | 1128 | } |
| 1129 | 1129 | ||
| 1130 | static void ext2_commit_super (struct super_block * sb, | 1130 | static void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es, |
| 1131 | struct ext2_super_block * es) | 1131 | int wait) |
| 1132 | { | ||
| 1133 | ext2_clear_super_error(sb); | ||
| 1134 | es->s_wtime = cpu_to_le32(get_seconds()); | ||
| 1135 | mark_buffer_dirty(EXT2_SB(sb)->s_sbh); | ||
| 1136 | sb->s_dirt = 0; | ||
| 1137 | } | ||
| 1138 | |||
| 1139 | static void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es) | ||
| 1140 | { | 1132 | { |
| 1141 | ext2_clear_super_error(sb); | 1133 | ext2_clear_super_error(sb); |
| 1142 | es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb)); | 1134 | es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb)); |
| 1143 | es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb)); | 1135 | es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb)); |
| 1144 | es->s_wtime = cpu_to_le32(get_seconds()); | 1136 | es->s_wtime = cpu_to_le32(get_seconds()); |
| 1145 | mark_buffer_dirty(EXT2_SB(sb)->s_sbh); | 1137 | mark_buffer_dirty(EXT2_SB(sb)->s_sbh); |
| 1146 | sync_dirty_buffer(EXT2_SB(sb)->s_sbh); | 1138 | if (wait) |
| 1139 | sync_dirty_buffer(EXT2_SB(sb)->s_sbh); | ||
| 1147 | sb->s_dirt = 0; | 1140 | sb->s_dirt = 0; |
| 1148 | } | 1141 | } |
| 1149 | 1142 | ||
| @@ -1166,11 +1159,8 @@ static int ext2_sync_fs(struct super_block *sb, int wait) | |||
| 1166 | if (es->s_state & cpu_to_le16(EXT2_VALID_FS)) { | 1159 | if (es->s_state & cpu_to_le16(EXT2_VALID_FS)) { |
| 1167 | ext2_debug("setting valid to 0\n"); | 1160 | ext2_debug("setting valid to 0\n"); |
| 1168 | es->s_state &= cpu_to_le16(~EXT2_VALID_FS); | 1161 | es->s_state &= cpu_to_le16(~EXT2_VALID_FS); |
| 1169 | ext2_sync_super(sb, es); | ||
| 1170 | } else { | ||
| 1171 | ext2_commit_super(sb, es); | ||
| 1172 | } | 1162 | } |
| 1173 | sb->s_dirt = 0; | 1163 | ext2_sync_super(sb, es, wait); |
| 1174 | unlock_kernel(); | 1164 | unlock_kernel(); |
| 1175 | 1165 | ||
| 1176 | return 0; | 1166 | return 0; |
| @@ -1268,7 +1258,7 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data) | |||
| 1268 | if (!ext2_setup_super (sb, es, 0)) | 1258 | if (!ext2_setup_super (sb, es, 0)) |
| 1269 | sb->s_flags &= ~MS_RDONLY; | 1259 | sb->s_flags &= ~MS_RDONLY; |
| 1270 | } | 1260 | } |
| 1271 | ext2_sync_super(sb, es); | 1261 | ext2_sync_super(sb, es, 1); |
| 1272 | unlock_kernel(); | 1262 | unlock_kernel(); |
| 1273 | return 0; | 1263 | return 0; |
| 1274 | restore_opts: | 1264 | restore_opts: |
