diff options
| author | Dave Airlie <airlied@starflyer.(none)> | 2005-10-20 04:21:33 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@linux.ie> | 2005-10-20 04:21:33 -0400 |
| commit | 312f5726055534be1dc9dd369be13aabd2943fcb (patch) | |
| tree | 29394a3f83b4952a73b36a4aa962dfeda839e9db /fs/bfs/inode.c | |
| parent | 3d5efad953c6d5ba11d5bcb584ef8e906f953a73 (diff) | |
| parent | 93918e9afc76717176e9e114e79cdbb602a45ae8 (diff) | |
merge Linus head tree into my drm tree and fix up conflicts
Diffstat (limited to 'fs/bfs/inode.c')
| -rw-r--r-- | fs/bfs/inode.c | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index c7b39aa279d7..3af6c73c5b5a 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c | |||
| @@ -357,28 +357,46 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent) | |||
| 357 | } | 357 | } |
| 358 | 358 | ||
| 359 | info->si_blocks = (le32_to_cpu(bfs_sb->s_end) + 1)>>BFS_BSIZE_BITS; /* for statfs(2) */ | 359 | info->si_blocks = (le32_to_cpu(bfs_sb->s_end) + 1)>>BFS_BSIZE_BITS; /* for statfs(2) */ |
| 360 | info->si_freeb = (le32_to_cpu(bfs_sb->s_end) + 1 - cpu_to_le32(bfs_sb->s_start))>>BFS_BSIZE_BITS; | 360 | info->si_freeb = (le32_to_cpu(bfs_sb->s_end) + 1 - le32_to_cpu(bfs_sb->s_start))>>BFS_BSIZE_BITS; |
| 361 | info->si_freei = 0; | 361 | info->si_freei = 0; |
| 362 | info->si_lf_eblk = 0; | 362 | info->si_lf_eblk = 0; |
| 363 | info->si_lf_sblk = 0; | 363 | info->si_lf_sblk = 0; |
| 364 | info->si_lf_ioff = 0; | 364 | info->si_lf_ioff = 0; |
| 365 | bh = NULL; | ||
| 365 | for (i=BFS_ROOT_INO; i<=info->si_lasti; i++) { | 366 | for (i=BFS_ROOT_INO; i<=info->si_lasti; i++) { |
| 366 | inode = iget(s,i); | 367 | struct bfs_inode *di; |
| 367 | if (BFS_I(inode)->i_dsk_ino == 0) | 368 | int block = (i - BFS_ROOT_INO)/BFS_INODES_PER_BLOCK + 1; |
| 369 | int off = (i - BFS_ROOT_INO) % BFS_INODES_PER_BLOCK; | ||
| 370 | unsigned long sblock, eblock; | ||
| 371 | |||
| 372 | if (!off) { | ||
| 373 | brelse(bh); | ||
| 374 | bh = sb_bread(s, block); | ||
| 375 | } | ||
| 376 | |||
| 377 | if (!bh) | ||
| 378 | continue; | ||
| 379 | |||
| 380 | di = (struct bfs_inode *)bh->b_data + off; | ||
| 381 | |||
| 382 | if (!di->i_ino) { | ||
| 368 | info->si_freei++; | 383 | info->si_freei++; |
| 369 | else { | 384 | continue; |
| 370 | set_bit(i, info->si_imap); | 385 | } |
| 371 | info->si_freeb -= inode->i_blocks; | 386 | set_bit(i, info->si_imap); |
| 372 | if (BFS_I(inode)->i_eblock > info->si_lf_eblk) { | 387 | info->si_freeb -= BFS_FILEBLOCKS(di); |
| 373 | info->si_lf_eblk = BFS_I(inode)->i_eblock; | 388 | |
| 374 | info->si_lf_sblk = BFS_I(inode)->i_sblock; | 389 | sblock = le32_to_cpu(di->i_sblock); |
| 375 | info->si_lf_ioff = BFS_INO2OFF(i); | 390 | eblock = le32_to_cpu(di->i_eblock); |
| 376 | } | 391 | if (eblock > info->si_lf_eblk) { |
| 392 | info->si_lf_eblk = eblock; | ||
| 393 | info->si_lf_sblk = sblock; | ||
| 394 | info->si_lf_ioff = BFS_INO2OFF(i); | ||
| 377 | } | 395 | } |
| 378 | iput(inode); | ||
| 379 | } | 396 | } |
| 397 | brelse(bh); | ||
| 380 | if (!(s->s_flags & MS_RDONLY)) { | 398 | if (!(s->s_flags & MS_RDONLY)) { |
| 381 | mark_buffer_dirty(bh); | 399 | mark_buffer_dirty(info->si_sbh); |
| 382 | s->s_dirt = 1; | 400 | s->s_dirt = 1; |
| 383 | } | 401 | } |
| 384 | dump_imap("read_super", s); | 402 | dump_imap("read_super", s); |
