Root/
1 | /* |
2 | * QNX4 file system, Linux implementation. |
3 | * |
4 | * Version : 0.2.1 |
5 | * |
6 | * Using parts of the xiafs filesystem. |
7 | * |
8 | * History : |
9 | * |
10 | * 28-05-1998 by Richard Frowijn : first release. |
11 | * 20-06-1998 by Frank Denis : basic optimisations. |
12 | * 25-06-1998 by Frank Denis : qnx4_is_free, qnx4_set_bitmap, qnx4_bmap . |
13 | * 28-06-1998 by Frank Denis : qnx4_free_inode (to be fixed) . |
14 | */ |
15 | |
16 | #include <linux/buffer_head.h> |
17 | #include <linux/bitops.h> |
18 | #include "qnx4.h" |
19 | |
20 | static void count_bits(register const char *bmPart, register int size, |
21 | int *const tf) |
22 | { |
23 | char b; |
24 | int tot = *tf; |
25 | |
26 | if (size > QNX4_BLOCK_SIZE) { |
27 | size = QNX4_BLOCK_SIZE; |
28 | } |
29 | do { |
30 | b = *bmPart++; |
31 | tot += 8 - hweight8(b); |
32 | size--; |
33 | } while (size != 0); |
34 | *tf = tot; |
35 | } |
36 | |
37 | unsigned long qnx4_count_free_blocks(struct super_block *sb) |
38 | { |
39 | int start = le32_to_cpu(qnx4_sb(sb)->BitMap->di_first_xtnt.xtnt_blk) - 1; |
40 | int total = 0; |
41 | int total_free = 0; |
42 | int offset = 0; |
43 | int size = le32_to_cpu(qnx4_sb(sb)->BitMap->di_size); |
44 | struct buffer_head *bh; |
45 | |
46 | while (total < size) { |
47 | if ((bh = sb_bread(sb, start + offset)) == NULL) { |
48 | printk(KERN_ERR "qnx4: I/O error in counting free blocks\n"); |
49 | break; |
50 | } |
51 | count_bits(bh->b_data, size - total, &total_free); |
52 | brelse(bh); |
53 | total += QNX4_BLOCK_SIZE; |
54 | offset++; |
55 | } |
56 | |
57 | return total_free; |
58 | } |
59 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9