diff options
-rw-r--r-- | fs/bfs/bfs.h | 1 | ||||
-rw-r--r-- | fs/bfs/file.c | 3 | ||||
-rw-r--r-- | fs/bfs/inode.c | 46 |
3 files changed, 7 insertions, 43 deletions
diff --git a/fs/bfs/bfs.h b/fs/bfs/bfs.h index 7109e451abf7..f7f87e233dd9 100644 --- a/fs/bfs/bfs.h +++ b/fs/bfs/bfs.h | |||
@@ -17,7 +17,6 @@ struct bfs_sb_info { | |||
17 | unsigned long si_lf_eblk; | 17 | unsigned long si_lf_eblk; |
18 | unsigned long si_lasti; | 18 | unsigned long si_lasti; |
19 | unsigned long *si_imap; | 19 | unsigned long *si_imap; |
20 | struct buffer_head *si_sbh; /* buffer header w/superblock */ | ||
21 | struct mutex bfs_lock; | 20 | struct mutex bfs_lock; |
22 | }; | 21 | }; |
23 | 22 | ||
diff --git a/fs/bfs/file.c b/fs/bfs/file.c index 8fc2e9c9739d..eb67edd0f8ea 100644 --- a/fs/bfs/file.c +++ b/fs/bfs/file.c | |||
@@ -70,7 +70,6 @@ static int bfs_get_block(struct inode *inode, sector_t block, | |||
70 | struct super_block *sb = inode->i_sb; | 70 | struct super_block *sb = inode->i_sb; |
71 | struct bfs_sb_info *info = BFS_SB(sb); | 71 | struct bfs_sb_info *info = BFS_SB(sb); |
72 | struct bfs_inode_info *bi = BFS_I(inode); | 72 | struct bfs_inode_info *bi = BFS_I(inode); |
73 | struct buffer_head *sbh = info->si_sbh; | ||
74 | 73 | ||
75 | phys = bi->i_sblock + block; | 74 | phys = bi->i_sblock + block; |
76 | if (!create) { | 75 | if (!create) { |
@@ -112,7 +111,6 @@ static int bfs_get_block(struct inode *inode, sector_t block, | |||
112 | info->si_freeb -= phys - bi->i_eblock; | 111 | info->si_freeb -= phys - bi->i_eblock; |
113 | info->si_lf_eblk = bi->i_eblock = phys; | 112 | info->si_lf_eblk = bi->i_eblock = phys; |
114 | mark_inode_dirty(inode); | 113 | mark_inode_dirty(inode); |
115 | mark_buffer_dirty(sbh); | ||
116 | err = 0; | 114 | err = 0; |
117 | goto out; | 115 | goto out; |
118 | } | 116 | } |
@@ -147,7 +145,6 @@ static int bfs_get_block(struct inode *inode, sector_t block, | |||
147 | */ | 145 | */ |
148 | info->si_freeb -= bi->i_eblock - bi->i_sblock + 1 - inode->i_blocks; | 146 | info->si_freeb -= bi->i_eblock - bi->i_sblock + 1 - inode->i_blocks; |
149 | mark_inode_dirty(inode); | 147 | mark_inode_dirty(inode); |
150 | mark_buffer_dirty(sbh); | ||
151 | map_bh(bh_result, sb, phys); | 148 | map_bh(bh_result, sb, phys); |
152 | out: | 149 | out: |
153 | mutex_unlock(&info->bfs_lock); | 150 | mutex_unlock(&info->bfs_lock); |
diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index 0499822b1568..c4daf0f5fc02 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c | |||
@@ -31,7 +31,6 @@ MODULE_LICENSE("GPL"); | |||
31 | #define dprintf(x...) | 31 | #define dprintf(x...) |
32 | #endif | 32 | #endif |
33 | 33 | ||
34 | static void bfs_write_super(struct super_block *s); | ||
35 | void dump_imap(const char *prefix, struct super_block *s); | 34 | void dump_imap(const char *prefix, struct super_block *s); |
36 | 35 | ||
37 | struct inode *bfs_iget(struct super_block *sb, unsigned long ino) | 36 | struct inode *bfs_iget(struct super_block *sb, unsigned long ino) |
@@ -204,33 +203,11 @@ static void bfs_evict_inode(struct inode *inode) | |||
204 | * "last block of the last file" even if there is no | 203 | * "last block of the last file" even if there is no |
205 | * real file there, saves us 1 gap. | 204 | * real file there, saves us 1 gap. |
206 | */ | 205 | */ |
207 | if (info->si_lf_eblk == bi->i_eblock) { | 206 | if (info->si_lf_eblk == bi->i_eblock) |
208 | info->si_lf_eblk = bi->i_sblock - 1; | 207 | info->si_lf_eblk = bi->i_sblock - 1; |
209 | mark_buffer_dirty(info->si_sbh); | ||
210 | } | ||
211 | mutex_unlock(&info->bfs_lock); | 208 | mutex_unlock(&info->bfs_lock); |
212 | } | 209 | } |
213 | 210 | ||
214 | static int bfs_sync_fs(struct super_block *sb, int wait) | ||
215 | { | ||
216 | struct bfs_sb_info *info = BFS_SB(sb); | ||
217 | |||
218 | mutex_lock(&info->bfs_lock); | ||
219 | mark_buffer_dirty(info->si_sbh); | ||
220 | sb->s_dirt = 0; | ||
221 | mutex_unlock(&info->bfs_lock); | ||
222 | |||
223 | return 0; | ||
224 | } | ||
225 | |||
226 | static void bfs_write_super(struct super_block *sb) | ||
227 | { | ||
228 | if (!(sb->s_flags & MS_RDONLY)) | ||
229 | bfs_sync_fs(sb, 1); | ||
230 | else | ||
231 | sb->s_dirt = 0; | ||
232 | } | ||
233 | |||
234 | static void bfs_put_super(struct super_block *s) | 211 | static void bfs_put_super(struct super_block *s) |
235 | { | 212 | { |
236 | struct bfs_sb_info *info = BFS_SB(s); | 213 | struct bfs_sb_info *info = BFS_SB(s); |
@@ -240,10 +217,6 @@ static void bfs_put_super(struct super_block *s) | |||
240 | 217 | ||
241 | lock_kernel(); | 218 | lock_kernel(); |
242 | 219 | ||
243 | if (s->s_dirt) | ||
244 | bfs_write_super(s); | ||
245 | |||
246 | brelse(info->si_sbh); | ||
247 | mutex_destroy(&info->bfs_lock); | 220 | mutex_destroy(&info->bfs_lock); |
248 | kfree(info->si_imap); | 221 | kfree(info->si_imap); |
249 | kfree(info); | 222 | kfree(info); |
@@ -315,8 +288,6 @@ static const struct super_operations bfs_sops = { | |||
315 | .write_inode = bfs_write_inode, | 288 | .write_inode = bfs_write_inode, |
316 | .evict_inode = bfs_evict_inode, | 289 | .evict_inode = bfs_evict_inode, |
317 | .put_super = bfs_put_super, | 290 | .put_super = bfs_put_super, |
318 | .write_super = bfs_write_super, | ||
319 | .sync_fs = bfs_sync_fs, | ||
320 | .statfs = bfs_statfs, | 291 | .statfs = bfs_statfs, |
321 | }; | 292 | }; |
322 | 293 | ||
@@ -343,7 +314,7 @@ void dump_imap(const char *prefix, struct super_block *s) | |||
343 | 314 | ||
344 | static int bfs_fill_super(struct super_block *s, void *data, int silent) | 315 | static int bfs_fill_super(struct super_block *s, void *data, int silent) |
345 | { | 316 | { |
346 | struct buffer_head *bh; | 317 | struct buffer_head *bh, *sbh; |
347 | struct bfs_super_block *bfs_sb; | 318 | struct bfs_super_block *bfs_sb; |
348 | struct inode *inode; | 319 | struct inode *inode; |
349 | unsigned i, imap_len; | 320 | unsigned i, imap_len; |
@@ -359,10 +330,10 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent) | |||
359 | 330 | ||
360 | sb_set_blocksize(s, BFS_BSIZE); | 331 | sb_set_blocksize(s, BFS_BSIZE); |
361 | 332 | ||
362 | info->si_sbh = sb_bread(s, 0); | 333 | sbh = sb_bread(s, 0); |
363 | if (!info->si_sbh) | 334 | if (!sbh) |
364 | goto out; | 335 | goto out; |
365 | bfs_sb = (struct bfs_super_block *)info->si_sbh->b_data; | 336 | bfs_sb = (struct bfs_super_block *)sbh->b_data; |
366 | if (le32_to_cpu(bfs_sb->s_magic) != BFS_MAGIC) { | 337 | if (le32_to_cpu(bfs_sb->s_magic) != BFS_MAGIC) { |
367 | if (!silent) | 338 | if (!silent) |
368 | printf("No BFS filesystem on %s (magic=%08x)\n", | 339 | printf("No BFS filesystem on %s (magic=%08x)\n", |
@@ -466,10 +437,7 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent) | |||
466 | info->si_lf_eblk = eblock; | 437 | info->si_lf_eblk = eblock; |
467 | } | 438 | } |
468 | brelse(bh); | 439 | brelse(bh); |
469 | if (!(s->s_flags & MS_RDONLY)) { | 440 | brelse(sbh); |
470 | mark_buffer_dirty(info->si_sbh); | ||
471 | s->s_dirt = 1; | ||
472 | } | ||
473 | dump_imap("read_super", s); | 441 | dump_imap("read_super", s); |
474 | return 0; | 442 | return 0; |
475 | 443 | ||
@@ -479,7 +447,7 @@ out3: | |||
479 | out2: | 447 | out2: |
480 | kfree(info->si_imap); | 448 | kfree(info->si_imap); |
481 | out1: | 449 | out1: |
482 | brelse(info->si_sbh); | 450 | brelse(sbh); |
483 | out: | 451 | out: |
484 | mutex_destroy(&info->bfs_lock); | 452 | mutex_destroy(&info->bfs_lock); |
485 | kfree(info); | 453 | kfree(info); |